针对LLVM的function语言

有没有针对LLVM的语言:

  • 是静态types的
  • 使用types推断
  • 是function(即lambdaexpression式,闭包,列表原语,列表parsing等)
  • 拥有一stream的面向对象特性(inheritance,多态,mixins等)
  • 有一个复杂的types系统(generics,协方差和逆变等)

所有这些都是Scala,但只针对JVM。 F#(在某种程度上C#)是最重要的,如果不是所有这些,但只针对.NET。 什么类似的语言针对LLVM?

有一个针对LLVM的Haskell(GHC)后端 。

您也可以尝试通过Mono-LLVM使用F#。

此外, VMKit项目正在LLVM之上实现JVM和.NET CLI; 它还处于早期阶段,但是一旦成熟,就可以将它与F#或者任何以JVM为目标的函数式语言(Scala,Clojure等)结合使用,

我不确定这些进展有多远,但可能值得添加到列表中:

Scala for LLVM – https://github.com/greedy/scala/
木材为LLVM – https://bitbucket.org/capitrane/timber-llvm
单声道LLVM – http://www.mono-project.com/Mono_LLVM

是… 铿锵 。 除了列表parsing外,C ++拥有列表上的所有内容。 它也是LLVM的旗舰语言。

“静态types”

“使用types推断”

// 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 

“是function性的(即lambdaexpression式,闭包,列表原语,列表parsing等)”

在c ++中的[capture_spec](arglist...) { body }看起来像[capture_spec](arglist...) { body } 。 您可以通过引用(类似于lisp)捕获闭合的variables,如下所示:[&]。 或者你可以像这样获取值:[=]。

 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; }); 

如果你真的想要,你也可以使用一个macros和一个包装std :: transform来assembly列表推导。

“拥有一stream的面向对象的特性(inheritance,多态,混合等)”

当然。 C ++允许虚拟调度+多inheritance+实现inheritance。 注意:mixin只是实现inheritance。 如果你的语言禁止多重inheritance,你只需要一个特殊的“mixin”机制。

“有一个复杂的types系统(generics,协方差和变换等)”

就我所知,C ++模板是任何语言中最强大的generics系统。