我正在开发一种新语言。我最初的目标是为Windows平台编译为原生x86,但现在我有疑问。
我见过一些新语言针对JVM(最着名的Scala和Clojure)。当然,不可能将每个语言轻松地移植到JVM;这样做可能会导致语言和设计的微小变化。
在提出这个问题后,我甚至怀疑这个决定。我现在知道一些“专业”JVM参数。最初的问题是:在为新语言创建编译器时,目标JVM是一个好主意吗?
更新了问题:在Windows上定位JVM而不是x86有什么缺点?
答案 0 :(得分:7)
您可能希望查看定位LLVM而不是JVM。 LLVM可用于定位多种体系结构,包括x86。
可移植性比简单的CPU支持更多,但LLVM可以提供很多帮助,如果您愿意,仍然可以为您提供本机代码。
答案 1 :(得分:5)
定位JVM是一种非常经过实践检验的方法。 Clojure,Scala,JRuby和many other languages这样做的事实应该会给你一些保证。
我的观点是,JVM可能是目前新/实验语言的最佳目标,特别是如果您希望在利用真正出色的JIT编译器和大量非常强大的库的同时实现跨平台功能。
话虽如此,我认为针对JVM的主要缺点是:
在字节码级别缺少尾递归支持。有很多方法可以解决这个问题(例如,参见Clojure的“复现”特殊形式),但对于某些语言实现,尤其是函数式语言来说,它很烦人。最终可能会在未来的Java版本中修复。
有点明显,但您需要在客户端上安装JVM。现在通常不是问题,但仍有一些情况可能会很棘手。
Java中的基元(int,long,float等)的行为与对象系统的其余部分不同。您可以再次解决这个问题,但这对语言实施者来说是一些额外的麻烦。
一些可能有用/有趣的链接:
ASM bytecode analysis and manipulation framework。这是一个很棒的工具, 我相信这就是Clojure在幕后使用的内容。
答案 2 :(得分:3)
如果您为JVM创建一种语言,那么您还可以获得巨大的优势,即可以在您的语言中轻松使用大型库。如果您为x86编译,则很可能不是这种情况。我认为你不可能包括例如没有C解析器的语言的C-header。
出于这个原因,Scala,Groovy和其他人都是如此成功。
在JVM的当前开发阶段,以及支持脚本语言的新增强功能,我只是针对JVM,因为你的语言将被执行得更快,然后你可以为自己创建的每个运行时库
答案 3 :(得分:1)
如果您希望代码的运行时部分完全依赖于第三方代码并且要求用户安装和,那么您应该只定位JVM,JVM将提供大量的JVM您无法合理开发或要求人们为此目的进行扩展的功能(例如C ++中的OS头文件),和,您对JNI作为本机代码的接口感到满意(因此,其他托管代码,如.NET)。
最终,它完全取决于您可用的资源以及您如何描绘语言互操作。如果你打算使用JVM来提供很多功能,并且你很高兴互操作很糟糕,那么就使用它。否则,我认为你应该重新考虑。