Pin*_*juh 12 compiler-construction jvm
我正在开发一种新语言.我最初的目标是为Windows平台编译为原生x86,但现在我有疑问.
我见过一些新语言针对JVM(最着名的Scala和Clojure).当然,不可能轻易地将每种语言都移植到JVM上; 这样做可能会导致语言和设计的微小变化.
在提出这个问题之后,我甚至怀疑这个决定.我现在知道一些"专业"JVM参数.最初的问题是:在为新语言创建编译器时,目标JVM是个好主意吗?
更新了问题:在Windows上以JVM而不是x86为目标有哪些缺点?
您可能希望查看目标LLVM而不是JVM.LLVM可用于定位许多体系结构,包括x86.
可移植性比简单的CPU支持更多,但LLVM可以提供很多帮助,如果您愿意,仍然可以为您提供本机代码.
针对JVM是一种非常经过实践检验的方法.Clojure,Scala,JRuby和许多其他语言成功的事实应该给你一些保证.
我的总体观点是,JVM可能是目前新/实验语言的最佳目标,特别是如果您希望在利用真正出色的JIT编译器和大量非常强大的库的同时实现跨平台功能.
话虽如此,我认为针对JVM可能遇到的主要缺点如下:
在字节码级别缺乏尾递归支持.有很多方法可以解决这个问题(例如,参见Clojure的"复现"特殊形式),但对于某些语言实现,尤其是函数式语言来说,它很烦人.最终可能会在未来的Java版本中修复.
显而易见,但您需要在客户端上安装JVM.现在通常不是问题,但仍有一些情况可能会很棘手.
Java中的基元(int,long,float等)的行为与对象系统的其余部分不同.您可以再次解决这个问题,但对于语言实施者来说,这是一些额外的麻烦.
一些可能有用/有趣的链接:
ASM字节码分析和操作框架.这是一个很棒的工具,我相信这就是Clojure在引擎盖下使用的东西.