为什么没有C语言的虚拟机?

既然java是虚拟机运行的,为什么不做一个运行C的虚拟机呢,这样C的代码也可以跨平台了,或者说怎么没有一个跨平台的虚拟机用的编程语言是C而不是java…
关注者
139
被浏览
35,282

10 个回答

其实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

C 语言本身就是跨平台的,而且是跨平台方面做得最好的,干嘛要搞虚拟机?