是否有任何针对 LLVM 的语言:
- 是静态类型的
- 使用类型推断
- 是函数式的(即 lambda 表达式、闭包、列表原语、列表推导等)
- 具有一流的面向对象特性(继承、多态、混合等)
- 拥有复杂的类型系统(泛型、协变和逆变等)
Scala 是所有这些,但只针对 JVM。F#(在某种程度上是 C#)是大多数(如果不是全部),但仅针对 .NET。有哪些类似的语言针对 LLVM?
是否有任何针对 LLVM 的语言:
Scala 是所有这些,但只针对 JVM。F#(在某种程度上是 C#)是大多数(如果不是全部),但仅针对 .NET。有哪些类似的语言针对 LLVM?
有一个针对 LLVM的Haskell (GHC) 后端。
您也可以尝试通过Mono-LLVM使用 F# 。
此外,VMKit项目正在 LLVM 之上实现 JVM 和 .NET CLI;它仍处于早期阶段,但一旦成熟,您就可以将它与 F# 或任何面向 JVM 的函数式语言(Scala、Clojure 等)一起使用
我不确定这些进展有多远,但它们可能值得添加到列表中:
LLVM 的Scala - https://github.com/greedy/scala/
LLVM 的
木材 - https://bitbucket.org/capitrane/timber-llvm
LLVM 的
Mono - http://www.mono-project.com/Mono_LLVM
是的……铿锵声。除了列表推导之外,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++ 中的 Lambda 看起来像[capture_spec](arglist...) { body }
. 您可以通过引用(类似于 lisp)捕获封闭变量,如下所示:[&]。或者,您可以像这样按值捕获:[=]。
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++ 模板是任何语言中最强大的泛型系统。