|
|
1
7
在编写JIT(“及时”)编译器之前,您至少应该考虑如何编写“提前一步”编译器。 也就是说,给定一个包含虚拟机指令的程序,您将如何生成一个包含x86(或其他)指令的程序,该程序与原始程序相同?如何优化不同指令集和相同体系结构的不同版本的输出?您给出的示例操作码有一个非常复杂的实现,所以您只通过发出执行该任务的代码来实现“内联”哪些操作码,以及通过发出对某些共享代码的调用来实现哪些操作码? JIT必须能够做到这一点,而且它还必须在虚拟机运行时做出决定,决定它执行的代码是什么,何时执行,以及它如何表示虚拟机指令和本机指令的混合结果。 如果你还不是一个集会骑师,那么我不建议你写JIT。这并不是说“永远不要这样做”,但你应该在认真开始之前成为一名集会骑师。 另一种选择是编写一个非JIT编译器,以将VM指令(或原始脚本语言)转换为Java字节码,或LLVM,如杰夫·福斯特所说。然后让该字节码的工具链完成困难的、依赖于CPU的工作。 |
|
|
2
6
虚拟机是一项需要考虑的大任务。你有没有考虑过把虚拟机建立在 LLVM ? LLVM将提供一个良好的基础,并且有很多 example projects 你可以用它来理解。 |
|
|
3
3
SteveJessop有一个观点:JIT编译器比普通编译器要难得多。 而普通的编译器本身就很难实现。 但是,阅读问题的最后一部分,我想知道您是否真的想要一个JIT编译器。 如果您的问题是这样的:
我以前做的是类似的情况:
一些注释:
|