Tak ... clang. C++ ma wszystko na twojej liście, z wyjątkiem listy. Jest to również flagowy język LLVM.
"statycznie wpisane"
Yup
"Użyj typ wnioskowanie"
// 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
"są funkcjonalne (czyli lambda wyrażenia, zamknięcia, lista prymitywy, listowych, etc.)"
Lambda w języku C++ wygląda jak [capture_spec](arglist...) { body }
. Możesz przechwytywać zamknięte zmienne przez odwołanie (podobnie jak seplenienie), tak jak to: [&]. Alternatywnie możesz przechwytywać według wartości, jak na przykład: [=].
int local = 10;
auto my_closure = [&]() { return local;};
my_closure(); // returns 10.
W mapie C++, zip i redukcja nazywane są std :: transform i 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; });
Można również sklecić listowych za pomocą makra i i owinięcie wokół std :: przekształcić, jeśli naprawdę chcesz ...
posiadają cechy obiektowe Pierwsza klasa (dziedziczenie, polimorfizm”, mixins, itp.) "
Oczywiście.C++ umożliwia wirtualną wysyłkę + dziedziczenie dziedziczenia + wielokrotnego. Uwaga: mixiny są po prostu dziedziczeniem implementacji. Potrzebujesz tylko specjalnego mechanizmu "mixin", jeśli twój język zabrania wielokrotnego dziedziczenia.
"Have a zaawansowany system typu (leki generyczne, kowariancji i kontrawariancja, etc.)"
C++ szablony są najbardziej wydajny system rodzajowych w dowolnym języku, o ile wiem.
Prosisz o wiele z tak małej platformy. Byłbym bardzo zaskoczony, gdybyś znalazł coś, co pasuje do wszystkich twoich kryteriów. Dlaczego musisz używać LLVM specjalnie? –
Tak, prawdopodobnie masz rację. W tej chwili nie mam konkretnego przypadku użycia, ciekawi mnie tylko przyszłość języków programowania. Wydaje mi się, że LLVM ma bardzo świetlaną przyszłość, a także jestem pod dużym wrażeniem nowej funkcjonalnej wersji językowej Scala, która jest skierowana do .NET i JVM, mam nadzieję, że ktoś tam pracuje nad czymś podobnym do LLVM. . – Matthew
Tak, to zdecydowanie interesujący projekt. Problem polega na tym, że jeśli masz platformy o wyższym poziomie, takie jak Java i .NET, które są znacznie potężniejsze, nikt tak naprawdę nie chce zajmować się czymś tak niskim jak LLVM. –