Да ... clang. В C++ есть все, что есть в вашем списке, за исключением списков. Это также флагманский язык LLVM.
"статический типизированный"
Йуп
"Использование вывод типа"
// 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
"функционально (т.е. лямбда-выражение, затворы, список примитивы, списочные и т.д.)"
Lambdas in C++ выглядит как [capture_spec](arglist...) { body }
. Вы можете захватить закрытые переменные по ссылке (аналогично lisp) следующим образом: [&]. В качестве альтернативы вы можете зафиксировать по значению следующим образом: [=].
int local = 10;
auto my_closure = [&]() { return local;};
my_closure(); // returns 10.
На карте C++, zip и reduce называются std :: transform и 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; });
Вы можете также соорудить списочные с помощью макросов и и обертки станда :: преобразование, если вы действительно хотите ...
«имеют объектно-ориентированные функции первого класса (наследование, полиморфизм, миксины и т. д.) "
Конечно.C++ позволяет виртуальную диспетчеру + множественное наследование + наследование реализации. Примечание: mixins - это просто наследование реализации. Вам нужен только специальный механизм микширования, если ваш язык запрещает множественное наследование.
«Есть сложные системы типа (генерики, ковариация и контрвариантность и т.д.)»
C++ шаблоны являются самой мощной системой дженериков на любом языке, насколько я знаю.
Вы много просите от такой небольшой платформы. Я был бы очень удивлен, если бы нашел то, что соответствует всем вашим критериям. Зачем вам нужно использовать LLVM? –
Да, вы, вероятно, правы. На данный момент у меня нет конкретного варианта использования, мне просто интересно узнать о будущем языков программирования. Мне кажется, что LLVM имеет очень светлое будущее, и учитывая, что меня тоже впечатляет новый функциональный язык Scala, который нацелен на .NET и JVM, я надеюсь, что кто-то там работает над чем-то похожим для LLVM , – Matthew
Да, это определенно интересный проект. Проблема в том, что когда у вас более мощные платформы, такие как Java и .NET, которые намного мощнее, никто не хочет иметь дело с чем-то вроде низкоуровневого LLVM. –