针对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系统。