优点/缺点:
CLR:
- pro:CLR环境一应俱全;很多东西要绑定
- con: 绑定到 CLR (;-); 针对某些系统将很难或不可能(嵌入式、大型机等。CLR impl。在非 MS 系统上可能不太成熟)
LLVM:
- pro:独立于MS。
- 缺点:针对某些系统可能涉及移植 LLVM(?);与 DOT-net、Java 等接口可能很麻烦(可能需要 FFI)
C 作为目标语言:
- pro:几乎所有可能的目标;简单的代码生成
- 缺点:您将不得不将一些 VM 东西实现为运行时库(GC、dynload、dyn 编译等);有些事情在 C 中很难做到(延续、回溯、堆栈跟踪、异常);在 C 语言中,有些事情很难高效且可移植(GC、动态类型、堆栈布局依赖)。
Java ByteCode 作为目标:
- pro:可能是最大的一组可能的目标平台(甚至是手机和嵌入式产品);周围有很多现有的工具;与现有库的轻松接口
- 缺点:有些事情很难实现或很难有效地实现(动态类型、延续、回溯)
综上所述,我认为以 Java ByteCode 为目标可能最适合您。
编辑:实际上是对评论的回答,但 300chars 是不够的。
JByteCode 不确定 - 我同意(作为 Smalltalker,JBytecode 对我来说太有限了)。
在 VM 方面,我认为作为 JVM 可以获得相对广泛的性能,从纯慢字节码解释器到高端复杂的 JITting VM (IBM)。我想,CLR VM 会迎头赶上,因为 MS 迟早会窃取和整合所有创新,并且发布了加速动态翻译的技术(例如,阅读 Self 论文)。LLVM 的进展可能会慢一些,但谁知道呢。使用 C,您将免费受益于更好的编译器,但是动态重新翻译等内容很难以 C 作为目标来实现。我自己的系统混合使用了预编译代码和动态编译代码(在一个内存空间中包含所有:慢速字节码解释器、JITter 和预编译静态 C 代码)。