我注意到一些不太老的VM语言,比如用C语写的Lua,NekoVM和Potion.
看起来他们正在重新实现许多C++功能.
用C而不是C++编写它们有什么好处?
我对Lua有所了解.
Lua是用纯ANSI标准C编写的,可以在任何ANSI平台上编译,没有错误也没有警告.因此,Lua几乎可以在世界上任何平台上运行,包括Canon PowerShot相机等.让C++在奇怪的小嵌入式平台上运行要困难得多.
Lua是一个高性能的VM,因为C不能表达方法调用(可能是虚拟的或可能不是)和运算符重载,所以只需查看代码就可以更容易地预测C代码的性能.C++,尤其是模板库,使得在不了解资源的情况下刻录资源有点太容易了.(Lua的完整实现不仅包括VM,而且库适用于145K的x86目标代码.整个语言甚至适用于256K高速缓存,你可以在Intel i7上的L2和旧芯片上的L1上找到它们.除非你真的知道什么你正在做的事情,编写C++并编译成这么小的东西要困难得多.)
这是在C中编写VM的两个很好的理由.
看起来他们正在重新实现许多C++功能.
你是否建议在C++而不是C中实现多态?我觉得你错了.
如果用C++编写VM,就不会在C++的多态性方面实现多态.您将滚动自己的虚拟表,将函数名称映射到指针或类似的东西.
人们已经习惯了C.我必须承认,我更有可能为自己的项目编写C语言,尽管我从cfront 1.0开始编写C++.
如果你想完全控制事物,C会更容易一些.
一个明显的答案是互操作性.每当语言X必须调用语言Y中定义的函数时,通常要确保X或Y是C(语言C,即)
C++没有定义ABI,因此从另一种语言调用C++代码有点棘手.但是调用C代码几乎是微不足道的.这意味着至少部分VM可能必须用C语言编写,然后为什么不能保持一致并用C语言编写整个内容?
C的另一个优点是它很简单.每个人都可以阅读它,并且有很多程序员可以帮助你编写它.无论好坏,C++都是专家语言.你可以在C++中做很多令人印象深刻的事情,它可以为你节省大量的工作,但也有更少的程序员真正擅长它.