Sí ... clang. C++ tiene todo en su lista, excepto la lista de comprensiones. También es el lenguaje LLVM insignia.
"se escriben de forma estática"
Sí
"Uso inferencia de tipos"
// local type inference
auto var = 10;
// type inference on parameters to generic functions
template <typename T>
void my_function(T arg) {
...
}
my_function(1) // infers that T = int
// correctly handles more complicated cases where type is partially specified.
template <typename T>
void my_function(std::vector<T> arg) {
...
}
std::vector<int> my_vec = {1, 2, 3, 4};
my_function(my_vec) // infers that T = int
"son (es decir lambda expresiones, los cierres, las primitivas de lista, listas por comprensión, etc.) funcionales"
Lambdas en C++ parece [capture_spec](arglist...) { body }
. Puede capturar variables cerradas por referencia (similar a lisp) como lo siguiente: [&]. Alternativamente, puede capturar por valor de la siguiente manera: [=].
int local = 10;
auto my_closure = [&]() { return local;};
my_closure(); // returns 10.
En C++ map, zip y reduce se llaman std :: transform y std :: accumulate.
std::vector<int> vec = {1, 2, 3, 4};
int sum = std::accumulate(vec.begin(), vec.end(), [](int x, int y) { return x + y; });
También puede armar listas por comprensión utilizando una macro y una envoltura alrededor y std :: transformar si realmente quiere ...
"Tienen características orientadas a objetos de primera clase (herencia, polimorfismo, mixins, etc.) "
Por supuesto.C++ permite despacho virtual + herencia múltiple + herencia de implementación. Nota: mixins es solo herencia de implementación. Solo necesita un mecanismo especial de "mixin" si su idioma prohíbe la herencia múltiple.
"Tener un sistema sofisticado tipo (genéricos, covarianza y contravarianza, etc.)" plantillas
C++ son el sistema más potente genéricos en cualquier idioma por lo que yo sé.
Estás pidiendo mucho desde una plataforma tan pequeña. Me sorprendería mucho si encontraras algo que coincida con todos tus criterios. ¿Por qué necesita usar LLVM específicamente? –
Sí, probablemente tengas razón. No tengo un caso de uso específico en este punto, solo tengo curiosidad sobre el futuro de los lenguajes de programación. Me parece que LLVM tiene un futuro muy brillante, y dado que también estoy muy impresionado por el nuevo lenguaje funcional Scala que apunta a .NET y JVM, espero que alguien esté trabajando en algo similar para LLVM . – Matthew
Sí, definitivamente es un proyecto interesante. El problema es que cuando tienes plataformas de alto nivel como Java y .NET que son mucho más poderosas, nadie realmente quiere lidiar con algo de bajo nivel como LLVM. –