QucikJS
特点
因为 QuickJS 这样的东西没有早出来几年,否则根本没有 Lua 什么事情,归根揭底,Lua 并不是一门好语言:
-
作用域默认是
global
的,不是local
的,但凡最近三十年发明的语言, 变量和函数定义基本都是默认local
的作用域 ,lua 这种默认global
的设计, 强迫你到处写满local
,简直是一口气直追 50 年前的古圣先贤。 - 索引从 1 开始:记忆里只有 Pascal / QBasic 是这么做的,但 pascal 事实上允许索引从任意位置开始(从 0 / 1 / 100 开始都可以)。
-
到处是
nil
,你的代码四处和nil
作斗争,明明可以有更优雅的机制的,却什么都用nil
。 -
到现在都没有 unicode 支持,字符串是
bytes
的别名。 - 到现在都没有 switch/case,只能写几十行 if/else,隔壁 python 都能模式匹配了。
- 到现在都没有 type hint ,隔壁的 python 在 7 年前就有 type hint 和 type check 了。
- 项目更新速度异常缓慢,最近十年尤其如此,作者以出世的态度做入世的项目。
- 前几个版本 table 长度好像还要自己数,现在不用了,但至今打印个 table 内容都没标准方法
- 至少有 5 种方法定义一个模块,3 种方法定义一个类。
- 缺乏基础库,每个项目都重新发明了一套,导致你的脚本很难跨项目复用。
- 一个项目里的代码基本很难不做修改的给第二个项目用,知识无法积累。
- 缺乏妥善的周边工具。
- 更多的选择意味着更多的迷惑与更多的束缚,选择多看似更好,但往往最终带来更多痛苦。
明明是 90 年代才发明的语言,浑身透着一股 60-70 年代的味道。
那么使用 QuickJS 代替 lua 的有哪些好处呢?
- QuickJS 同 Lua 一样小巧,代码就几个文件,运行只需要 200KB 的内存就能跑个简单程序。
- QuickJS 遵从 ES2020标准,可以跑全部 ES2020 测试用例,也能轻松支持 TypeScript。
- 基于 JS 的技术栈有丰富的前人成果供你使用,生态更好。
- JavaScript 的人员很容易招聘。
-
少打字:
{ }
vsbegin end
。 -
JavaScript 有
Uint8Array
,Float32Array
等内建类型,能比 Lua 更高效的处理媒体数据。 - 简单逻辑直接用 JavaScript 撸,复杂业务可以上优雅又安全的 TypeScript 。
- 逻辑可以复用到 Web / Electron 上,向 web 迁移容易很多。
- QuickJS 在众多 JS 虚拟机实现里,性能是比较好的,V8 下来就是它了。
- Lua 在 github 上只有 1 万个开源项目,很多还是用 Lua 的宿主项目和 neovim 配置,非纯 Lua 项目,你复用不了。
- JavsScript 在 github 上有 38 万个项目,大部分是可以用被你复用的纯 js 项目。
- TypeScript 短短几年,在 github 上就有 13 万个项目了。
- 团队在 JavaScript 上积累的知识可复用到:移动应用,桌面应用和 web 开发,不光做游戏。
- JS/TS 有很多优秀的开发环境和丰富的周边工具。
事实上周边一些中型引擎最近两年都完成了 QuickJS 的集成, 用它逐步替代 Lua,架不住 js 的人好招聘,技术生态好, 架不住 js 还可以有 ts 的加持。
所以说,QuickJS 要是早出来几年,根本没 Lua 什么事情了,老项目选 Lua 是没办法, 新项目可以多看看,多比较下,没必要看着继续在 Lua 上面继续浪费时间。
例如用Typescript定义类:
class Persion { private name : string; private age : number; private salary: number; constructor(name: string, age: number, salary: number) { this.name = name ; this.age = age ; this.salary = salary; } toString(): string { return `${this.name} (${this.age}) (${this.salary})`; } } var p = new Persion("skywind", 18, 8000) console.log(p.toString())
当前最新版是 quickjs-2021-03-27版。
Linux平台下的安装很容易,在Linux 直接下载 源码,然后进入安装目录:
make && make install