为什么没有C语言的虚拟机?
既然java是虚拟机运行的,为什么不做一个运行C的虚拟机呢,这样C的代码也可以跨平台了,或者说怎么没有一个跨平台的虚拟机用的编程语言是C而不是java…
关注者
139被浏览
35,28210 个回答
其实C的语义通常能靠硬件及操作系统直接支持的功能实现,所以没必要为了跨平台而制作虚拟机——真机就是C的“虚拟机”。
Java走的是二进制跨平台路线,发布的是“跨平台”的二进制可执行文件(Java Class文件),然后依赖每个平台上实现的JVM来执行之;C走的是源码跨平台路线,发布的是“源码”,在每个平台上重新编译一遍就可以使用。两者的取舍有所不同。
那不想发布源码而想发布某种可执行格式,但又想跨平台,怎么办?
其实C能伸能缩,可以在各种平台上运行。
CINT:C解释器 <- 这个可能最接近题主所想像的东西
Emscripten:C -> JavaScript
NestedVM:C -> JVM
.NET:C -> MSIL
JPC:x86 -> JVM(于是可以先把C编译为x86机器码然后用JPC在JVM上模拟)
…数不胜数
简单的实现,C4和《Compiler Design in C》也都算是例子。
关于C4:
有哪些关于c4 - C in four function 编译器的文章? - RednaxelaFX 的回答关于《Compiler Design in C》:
Allen Holub: Training/Consulting/Programming: Agile, Architecture, Swift, Java