Sì ... clang. Il C++ ha tutto sul tuo elenco tranne che per la comprensione delle liste. È anche il linguaggio LLVM di punta.
"staticamente tipizzato"
Yup
"Usa inferenza di tipo"
// 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
"sono (cioè lambda espressioni, chiusure, Lista primitive, list comprehension, ecc) funzionali"
Lambdas in C++ assomiglia a [capture_spec](arglist...) { body }
. Puoi catturare le variabili chiuse per riferimento (simile a lisp) in questo modo: [&]. In alternativa puoi acquisire per valore in questo modo: [=].
int local = 10;
auto my_closure = [&]() { return local;};
my_closure(); // returns 10.
Nella mappa C++, zip e riduzione sono chiamati std :: transform e 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; });
È possibile anche mettere su list comprehension utilizzando una macro ed e un wrapper per std :: trasformare se si vuole veramente ...
"hanno caratteristiche object-oriented di prima classe (ereditarietà, polimorfismo, mixins, ecc.) "
Naturalmente.C + + consente dispacciamento virtuale + ereditarietà multipla + ereditarietà di implementazione. Nota: i mixin sono solo ereditarietà dell'implementazione. Hai solo bisogno di un meccanismo speciale "mixin" se la tua lingua proibisce l'ereditarietà multipla.
"Avere un sistema di tipo sofisticato (farmaci generici, covarianza e controvarianza, etc.)" Modelli
C++ sono il più potente sistema di farmaci generici in qualsiasi lingua per quanto ne so.
Stai chiedendo molto da una piattaforma così piccola. Sarei davvero sorpreso se hai trovato qualcosa che corrisponde a tutti i tuoi criteri. Perché hai bisogno di usare specificamente LLVM? –
Sì, probabilmente hai ragione. A questo punto non ho un caso d'uso specifico, sono solo curioso del futuro dei linguaggi di programmazione. Mi sembra che LLVM abbia un futuro molto brillante, e dato che sono anche molto colpito dal nuovo linguaggio funzionale Scala che ha come target .NET e JVM, spero che qualcuno là fuori stia lavorando su qualcosa di simile per LLVM . – Matthew
Sì, è sicuramente un progetto interessante. Il problema è che quando si dispone di piattaforme di livello superiore come Java e .NET che sono molto più potenti, nessuno vuole veramente occuparsi di qualcosa di livello basso come LLVM. –