用C实现的干净,独立的VM以及100-200K以下的编译代码大小?

soz*_*oze 21 c scripting-language vm-implementation

我正在寻找具有以下功能的VM:

  • 小编译代码占用空间(低于200K).
  • 没有外部依赖.
  • Unicode(或原始)字符串支持.
  • 清洁代码 /组织良好.
  • C(99)代码,非C++.
  • C /类似Java的语法.
  • 运算符/按位:AND/OR等
  • 线程支持.
  • 通用/可移植字节码.字节码应该在不同的机器上工作,即使它是在具有不同字节序的不同架构上编译的.
  • 准系统,没什么必要的.只有基本的语言支持.
  • Lexer /解析器和编译器与VM分离.我将VM嵌入程序中,然后独立编译字节码.

到目前为止,我已经回顾了Lua,Squirrel,Neko,Pawn,Io,AngelScript ......并且唯一一个有点接近规范的是Lua,但语法很糟糕,它没有按位支持,而且代码风格一般很糟糕.松鼠和IO都很庞大.Pawn是有问题的,它很小,但是字节码不是跨平台的,并且实现有一些严重的问题(ex字节码根本没有验证,甚至没有标题AFAIK).

我很乐意找到合适的选择.

谢谢!

更新: Javascript解释器是...解释器.这是基于字节码的VM的VM问题,因此编译器/字节码vm分离要求.JS被解释,很少被JIT编译.我不一定要JIT.此外,所有当前的ECMAScript解析器都很小.

eph*_*ent 6

你说你已经评论过NekoVM,但是没有提到它为什么不适合你.

它是用C语言编写的,而不是C++,VM在10kLOC以下,编译大小约为100kB,编译器是一个独立的可执行文件,可生成可移植的字节码.语言本身具有类C语法,按位运算符,并且它不是线程敌对的.


小智 3

最后,过了这么久,没有一个答案真正做到了。我最终分叉了 LUA。截至目前,还不存在满足上述要求的独立虚拟机……很遗憾;(

尽管如此,如果代码没有问题的话,Pawn 还是相当不错的。

  • 你的 Lua 分支可以免费使用吗?或者可以分享一下你制作的mod吗? (5认同)