寻找一种新的编程语言,支持解释和本地编译两种模式。

4

我目前使用Perl、Python、C#、C、C++、Java等几种语言进行编程,现在正在寻找一种新的语言作为个人项目的主要语言。

我的当前标准如下:

  • 可以作为解释性语言运行(即无需等待编译即可运行);
  • 可以编译成本地代码;
  • 具有强类型(即使是可选的);
  • 支持宏/模板/代码变形/你想叫它什么就叫什么;
  • 拥有相当数量的库,或者易于访问。

有什么想法?建议?


这个列表很难满足。除了两三种语言外,你必须打破规则:例如 Python 是强类型(也许你指的是静态类型?),并且如果愿意使用 Cython 等工具,可以原生编译(但不应该只是为了好玩)。真正强大的宏系统排除了除 Lisp、一些其他语言的奇怪扩展以及极少数其他不知名的语言之外的所有语言。 - user395760
即使是C语言也具有强大的宏支持... - Loki
C语言的宏定义实在是可笑(如果你能称之为宏定义的话),与其他编程语言相比,简直不值一提;因为Lisp拥有最强大的宏定义,其他编程语言都受到了Lisp的启发。C预处理器宏定义有时可能会派上用场,但它们是一个非常混乱且过于受限的巨大问题。此外,C语言和那些令人遗憾地向后兼容C语言的编程语言几乎是唯一具有预处理器文本替换功能的语言。 - user395760
3个回答

5
我建议您使用Haskell符合您的标准。
  • 是否可以作为解释性语言运行?是的,通过GHCI。
  • 是否可以编译成本地代码?是的。
  • 是否具有强类型?非常强。也许是当今最强类型的语言之一,除了像Agda这样的定理证明器之外。
  • 是否支持宏/模板/变形?如果您使用模板Haskell,则是的。但这是一种可选的语言扩展,因此大多数库不使用宏。我自己没有使用过模板Haskell,所以无法评论它是否好用。
  • 是否具有良好的库支持?标准库还不错。还有Hackage,一个类似于CPAN的Haskell库开放存储库。

此外,听起来您已经了解了很多命令式/面向对象语言。在我看来,如果您学习另一种这些语言中的任何一种,它可能只是您已经在其他地方见过的功能的稍微不同的排列。将另一种编程范式(如函数式编程)添加到您的工具箱中可能是更好的学习体验。虽然我猜这是否是优势取决于您想要学习新东西还是快速提高生产力。


我正在考虑建议这个。+1,特别是因为最后一段很重要。当你学习Haskell(无论你是否了解十几种命令式语言),几周后你不会编写真正的应用程序。 - user395760

3

通用Lisp非常适合:它有可选的类型检查,可以进行高效本地编译,强大的REPL使它成为脚本编写的完美选择,并且有强大的宏元编程功能。

OCaml同样适用,使用CamlP4进行元编程。


+1 对于公共领域。宏(以及CLOS MOP)为一些令人费解的可能性提供了支持。 - The Archetypal Paul
那是个好建议,虽然每次我想起语法就会感到恐惧。但你说得对 - 它确实符合我大部分的要求。Lisp 的另一个主要问题是虽然有相当多的库可供使用,但很难找到它们,而且没有真正的中央索引(尽管cliki还不错)。 - Loki
我忘了提到Scheme - 它可能比CL更好一些,因为有一些库。实际上,我经常在我的小脚本任务中使用Bigloo。 - SK-logic

-1

Scala?它可以运行脚本,尽管它们首先会被编译(透明地)。我不确定您所说的代码变形等是什么意思,但它非常适合DSL。它满足您所有其他要求-与Java一样编译,强类型,并且具有相当数量的自己的库以及Java的所有库。我还是一个初学者,但到目前为止我很喜欢它。


Java被编译成字节码,而不是本地代码。据我所知,Scala也是这样。 - Loki
1
这个想法和 Lisp 是解释型语言一样老套了。现代的 JVM 可以进行 JIT 编译。 - The Archetypal Paul
JIT仍然不同于预编译为本机代码。 - Loki
运行AOT编译器。那么你想从本地代码编译中获得什么? - The Archetypal Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接