当前位置:  开发笔记 > 编程语言 > 正文

为什么许多虚拟机在看起来像是具有C++功能时用C编写?

如何解决《为什么许多虚拟机在看起来像是具有C++功能时用C编写?》经验,为你挑选了4个好方法。

我注意到一些不太老的VM语言,比如用C语写的Lua,NekoVM和Potion.

看起来他们正在重新实现许多C++功能.

用C而不是C++编写它们有什么好处?



1> Norman Ramse..:

我对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的两个很好的理由.


STL非常出色(而且性能卓越).由于您正在实施解释语言,因此担心虚拟方法似乎很奇怪.但是,第一个是一个好点.并非每个平台都有一个C++编译器,但你很难找到一个没有C的编译器.
我想诺曼所追求的是你无法知道发生了什么.模板的灵活性将适用于大范围的可能性能,具体取决于您提供的模板参数以及如何选择特化.在C中,我认为典型的图书馆会裸露出你的方式,你会看到什么是好的,什么是不好的.当然,这不是反对C++的论据.如果你愿意,你也可以用C++编写C代码

2> hasen..:

看起来他们正在重新实现许多C++功能.

你是否建议在C++而不是C中实现多态?我觉得你错了.

如果用C++编写VM,就不会在C++的多态性方面实现多态.您将滚动自己的虚拟表,将函数名称映射到指针或类似的东西.



3> Charlie Mart..:

人们已经习惯了C.我必须承认,我更有可能为自己的项目编写C语言,尽管我从cfront 1.0开始编写C++.

如果你想完全控制事物,C会更容易一些.



4> jalf..:

一个明显的答案是互操作性.每当语言X必须调用语言Y中定义的函数时,通常要确保X或Y是C(语言C,即)

C++没有定义ABI,因此从另一种语言调用C++代码有点棘手.但是调用C代码几乎是微不足道的.这意味着至少部分VM可能必须用C语言编写,然后为什么不能保持一致并用C语言编写整个内容?

C的另一个优点是它很简单.每个人都可以阅读它,并且有很多程序员可以帮助你编写它.无论好坏,C++都是专家语言.你可以在C++中做很多令人印象深刻的事情,它可以为你节省大量的工作,但也有更少的程序员真正擅长它.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有