15

我对 Scala 非常满意,并且非常喜欢它 :)

但有时我真的想更“低级”,没有 JVM 并使用“酷”的 CPU 功能,如 SSE 等。

那么除了 Scala 之外,什么是好的第二语言呢?

它应该是:

  • 编译成机器码
  • 轻松使用 C 库
  • 可以在非常接近硬件的地方进行编程
  • 当我想要时,可以以非常高级的方式编程

所以基本上我想要一个 Scala,我可以在我想要的时候放入内联汇编程序:) 我假设这样的语言不存在,但也许有一些接近。

那么什么是一个不错的选择呢?C++?、D?、OCaml?

我用 C++(15 年前)编程了一点,很少用 OCaml。在这两种情况下,我只解决了一些问题,并且从未非常“深入”地了解语言本身。

4

10 回答 10

18

你几乎描述了D。

  • 编译成机器码:检查。有一个实验性的 .NET VM 实现,但所有三个主要实现(DMD、LDC、GDC)都直接编译为本机代码,并且该语言旨在使本机编译可行。

  • 易于使用 C 库:D支持 C ABI 和所有 C 类型。您所要做的几乎就是翻译头文件和 C 目标文件中的链接。这甚至可以部分自动化。

  • 可以在非常接近硬件的地方进行编程:检查。D 是我所说的 C 的惯用超集。它不支持所有 C 语法,它的模块系统完全不同,静态数组是 D2 中的值类型,等等。但是,对于 C 语言中的任何结构来说(即不包括预处理器)在 D 或标准库中有一个等效结构。对于任何一段 C 代码(不包括预处理器滥用),都有一个规范的 D 翻译,看起来大致相同,如果您使用相同的编译器后端,则应该生成相同的汇编语言指令。换句话说,每个 C 习语(不包括预处理器滥用)都可以直接翻译成 D。

    D 的参考实现也支持内联 ASM,所以你可以弄乱 SSE 等。

  • 当我想以非常高级的方式编程时,可以:检查。D 被设计为主要是垃圾收集语言(尽管如果您坚持并注意不要使用假定 GC 的库/运行时功能,您可以使用手动内存管理)。除此之外,高级编程主要是通过模板元编程实现的。 在你逃跑之前,请了解 D 中的模板元编程与 C++ 相比有了很大的改进。 在 D 与 C++ 中进行模板元编程就像在 C++ 与 C 中进行面向对象编程一样。在 D 中,模板元编程被设计到语言中,而在 C++ 中,只有足够的功能,您可以使用巧妙的 hackishness 使其几乎无法工作。对于 C++ 与 C 中的面向对象编程也是如此。Phobos 的std.algorithmstd.range模块是 D 的高级子集的好例子。

于 2010-10-30T22:00:11.670 回答
8

以下是一些满足您问题中提到的标准的内容:

于 2010-10-31T06:17:44.077 回答
6

我也在考虑这个问题,因为我目前正在做一个 C 项目,感觉效率很低,也想念 Scala。(我在更新世也做了很多 C++...)我可能会转行。D看起来也很有吸引力。

如果对问题有意义,另一种选择是使用 C + 脚本语言,如 Lua 或 Ruby。这是 Unix+shells 和 emacs 一直以来所做的。当你需要它时,你可以获得性能和低级别的操作,而当它更重要时,你可以获得生产力。

于 2010-10-30T21:35:21.107 回答
5

C++0X、Erlang,也许还有 Haskell 和 Go。C++ 和 Erlang 拥有强大的用户群,C++0x 和 Erlang 有很多工作可用。(我不确定 C/C++ 互操作与 Go 有多好)

C++0X(“cee plus plus oh ex”)是一个不错的选择。它具有lamda 功能和其他好东西

2010 年C++0X技术日演练:使用 C++0x 进行现代编程

C++0X 还具有良好的泛型支持,如Type Classes as Objects and Implicits、Oliviera、Moors、Odersky、OOPSLA 2010 中所述。参见下面的图 12:

图 12 来自类型类作为对象和隐式

于 2010-10-31T10:49:19.867 回答
3

符合您要求的是 C/C++,因为您可以将汇编语言与常规代码内联。调用 C 库将是自然的 :)

适合的另一件事是汇编语言的HLA 实现(此处的 wiki 文章)-它是具有许多高级构造的汇编,使初学者学习起来更容易(和更快)(它编译为“正确的”本机代码)。

于 2010-10-30T21:36:10.780 回答
2

根据您的要求,我认为Nimrod也是这里的有效候选人。

于 2014-03-15T07:14:14.403 回答
2

与 D 和 BitC 一样,ooc ( http://www.ooc-lang.org/ ) 具有许多吸引 Scala(或 Haskell)粉丝的特性。

于 2010-11-02T14:22:19.340 回答
1

考虑使用 C 或 C++ 进行最底层的编程,然后用 JNI 或 JNA 将其包装在 Scala 库中。在某些情况下,您也可以这样吃蛋糕。

于 2010-10-31T19:18:51.310 回答
1

它仍然很新,但看看Vala。这是 GObject 蛋糕上一层甜蜜的语法糖霜,并编译为纯 C。

它支持闭包和有限类型推断等功能。

于 2010-10-31T10:52:19.550 回答
1

你应该看看Go

于 2010-10-30T22:24:23.367 回答