是否有任何针对LLVM的语言:
Scala就是所有这些,但只针对JVM。 F#(在某种程度上是C#)是大多数(如果不是全部),但仅针对.NET。什么类似的语言针对LLVM?
答案 0 :(得分:42)
有Haskell (GHC) backend针对LLVM。
您也可以尝试通过Mono-LLVM使用F#。
此外,VMKit项目正在LLVM之上实现JVM和.NET CLI;它还处于早期阶段,但一旦成熟,你可以将它与F#或任何面向JVM的函数语言(Scala,Clojure等)一起使用
答案 1 :(得分:14)
我不确定这些进展有多远,但它们可能值得添加到列表中:
用于LLVM的Scala - https://github.com/greedy/scala/
LLVM的木材 - https://bitbucket.org/capitrane/timber-llvm
LLVM的单声道 - http://www.mono-project.com/Mono_LLVM
答案 2 :(得分:-3)
是的...... 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
“功能正常(即lambda表达式,闭包,列表原语,列表推导等)”
c ++中的Lambdas看起来像[capture_spec](arglist...) { body }
。您可以通过引用捕获已关闭的变量(类似于lisp),如下所示:[&amp;]。或者,您可以按值捕获:[=]。
int local = 10;
auto my_closure = [&]() { return local;};
my_closure(); // returns 10.
在C ++ map中,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; });
如果你真的想要,你还可以使用宏和std :: transform的包装来装配列表推导...
“拥有一流的面向对象特性(继承,多态,混合等)”
当然。 C ++允许虚拟调度+多继承+实现继承。注意:mixins只是实现继承。如果您的语言禁止多重继承,则只需要一种特殊的“mixin”机制。
“拥有复杂的类型系统(泛型,协方差和逆变等)”
据我所知,C ++模板是任何语言中功能最强大的泛型系统。