V8 or lua 哪个脚本引擎好?

论坛 期权论坛 期权     
匿名的论坛用户   2020-12-30 12:39   5488   4
需要做个专家系统的基础库,在规则以及事实读取这块儿计划用脚本实现,好的概念主要是以下几个方面
1.稳定性,不能造成外部进程崩溃
2.执行效率,主要是内存占用,以及CPU占用
3.跟C++/C之间的互操作的便利性
4.库的成熟度
分享到 :
0 人收藏

4 个回复

倒序浏览
2#
热心的小回应  16级独孤 | 2020-12-30 12:39:07
赞同 @pansz 的答案。仅对第3,4点稍微做一点补充:

V8可以用C++扩展,Luajit则是C,两者便利程度差不多。但是,Luajit比V8有以下优势:
  • Luajit比V8代码体积小不少,编译时间和编译难度也小很多
  • iOS平台不支持jit,因此V8是无法运行在iOS上的。而Luajit可以选择关闭jit,以顺利运行在iOS上。
  • 每个Javascript引擎都有自己的一套C/C++扩展接口。而Luajit的C接口完全兼容标准Lua的C接口,切换引擎很容易。
至于库的成熟度,javascript完胜Lua。Javascript库大致可分为三类:HTML5相关,Node.js插件,平台无关的纯javascript toolkit。第三类自然可以直接用在你的项目里,而前两类也可以分离出许多平台无关的模块。
3#
热心的小回应  16级独孤 | 2020-12-30 12:39:08
性能上讲,两者没有可比性。脚本引擎带不带 JIT 区别很大。应用场景也不同。而 V8 实际是一个 JIT。要比较性能就只能拿 LuaJIT 跟 V8 比较。

1。稳定性差不多。
2。两者其实具有可相比拟的性能。至少在一个数量级。差距存在,但并不大。评测一般表明 LuaJit 是最快的 Jit ,甚至超越 V8 与 Java。
3。Lua 是以 C 之间互操作性为设计目标的,js 不清楚。
4。Lua 只使用 ANSI C 本身的库,其它的都要靠自己实现,或者外挂,js 似乎也类似。所以库的成熟度无从谈起。他们都是比较轻量级的编程语言而不是整套编程框架,因而几乎没有多少系统库附带。
4#
热心的小回应  16级独孤 | 2020-12-30 12:39:09
笑喷,luajit 到现在还没解决 2GB 地址空间的限制问题,即:即使 64 位版本,LuaJIT 能分配和使用的 GC 内存地址也必须小于 0x80000000。这比每进程只能使用 2GB 内存的堆空间限制还要大的多,大一点的 64bit Server daemon 启动就可能把前 2GB 的低地址空间用光了,基本上可以说就是废了。
这是很著名的问题,这么多年从未解决掉。你见过哪个 64bit App 用了 LuaJIT?

============================================================
看有人不太理解什么叫 “2GB 地址空间限制”,我对前文:
另外,我一开始好像就写的很清楚了:”LuaJIT 能分配和使用的 GC 内存地址也必须小于 0x80000000。这比每进程只能使用  2GB 内存的堆空间限制还要大的多,大一点的 64bit Server daemon 启动就可能把前 2GB  的低地址空间用光了,基本上可以说就是废了。
再详细解释一下:
这意思是说:碰到极端一点的大型 daemon,从进程启动开始,LuaJIT 连 1 个字节的内存都分配不出来也是有可能的。我相信大家都见过不少 daemon 跑起来就能干掉几 GB 甚至更多内存的。这时很有可能就把进程的最低 2GB 地址空间耗尽了。
反之,就算写一个最简单的 "Hello world" test App,LuaJIT 的可用内存也绝对不到 2GB,2GB 只是它支持地址空间的最大值,不是 LuaJIT 能实际使用的尺寸。更不用说  2GB 在高并发环境下撑稍微复杂点的业务逻辑肯定也是不够的。
据作者自己的说法(请自行 google),这个限制主要来自其 GC 算法,支持的内存大了现在的 GC 算法就太低效了(估计是用了不支持分代和迭代,也没有 Reference Counting 的简单 Mark and Sweep)。因此他打算在下一个版本更换 GC 算法,不过这么多年过去了,“下一个版本” 还没见影子呢~
5#
热心的小回应  16级独孤 | 2020-12-30 12:39:10
V8 和 lua比不了。无可比性。
v8带jit,要比也是luajit和v8比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3118703
帖子:623848
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP