QuickJS,一个小型并且可嵌入的 Javascript 引擎

llgoer
 llgoer
发布于 2019年07月13日
收藏 39

QuickJS 是一个小型并且可嵌入的 Javascript 引擎,它支持 ES2019 规范,包括模块,异步生成器和代理器。

它可选支持数学扩展,例如大整数 (BigInt),大浮点数 (BigFloat) 以及运算符重载。

主要功能

  • 轻量而且易于嵌入:只需几个C文件,没有外部依赖,一个 x86 下的简单的“hello world”程序只要 180 KiB。
  • 具有极低启动时间的快速解释器: 在一台单核的台式 PC 上,大约在 100 秒内运行 ECMAScript 测试套件 56000 次。运行时实例的完整生命周期在不到 300 微秒的时间内完成。
  • 几乎完整实现 ES2019 支持,包括: 模块,异步生成器和和完整 Annex B 支持 (传统的 Web 兼容性)。
  • 通过 100% 的 ECMAScript Test Suite 测试。
  • 可以将 Javascript 源编译为没有外部依赖的可执行文件。
  • 使用引用计数(以减少内存使用并具有确定性行为)的垃圾收集与循环删除。
  • 数学扩展:BigInt, BigFloat, 运算符重载, bigint 模式, math 模式.
  • 在 Javascript 中实现的具有上下文着色和完成的命令行解释器。
  • 采用 C 包装库构建的内置标准库。

用法

安装

提供 Makefile 可以在 Linux 或者 MacOS/X 上编译。通过使用 MingGW 工具在 Linux 主机上进行交叉编译,可以获得初步的 Windows 支持。

如果要选择特定选项,请编辑Makefile顶部,然后运行make

使用 root 身份执行 make install 可以将编译的二进制文件和支持文件安装到 /usr/local (这不是使用 QuickJS 所必需的).

快速入门

qjs 是命令行解析器 (Read-Eval-Print Loop). 您可以将 Javascript 文件和/或表达式作为参数传递以执行它们:

./qjs examples/hello.js

qjsc 是命令行编译器:

./qjsc -o hello examples/hello.js
./hello

生成一个没有外部依赖的 hello 可执行文件。

qjsbn 和 qjscbn 是具有数学扩展的相应解释器和编译器:

./qjsbn examples/pi.js 1000

显示PI的1000位数字

./qjsbnc -o pi examples/pi.js
./pi 1000

编译并执行PI程序。

下载

Windows 32位

MacOS 64位

Linux 32位

源代码

项目网址

官网:https://bellard.org/quickjs/

中文:https://github.com/quickjs-zh/QuickJS

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:QuickJS,一个小型并且可嵌入的 Javascript 引擎
加载中

精彩评论

LongRaindy
LongRaindy
这个作者真niuB

最新评论(17

梅开源
梅开源
要是可以搞成php或python扩展,做爬虫就真方便了。
f
fateDQ
windows10 64bit提示:
系统错误:
--由于找不到libwinpthread-1.dll,无法继续执行代码。重新安装程序可能会解决此问题。
llgoer
llgoer
请在msys2、MinGW这类环境下运行
x
xdsnet_g
那能不能移植到stm32环境呢?
wjjzzl
wjjzzl
一脸懵逼地进来,一脸懵逼地出去,那么它到底该怎么用呢?
llgoer
llgoer
可以作为C的黏合剂,或许是lua之外的一个更好的选择
J
Jimno
make install 之后 报了这样的错,请问大佬知道为什么吗
Undefined symbols for architecture i386:
"___stdinp", referenced from:
_js_std_init in lto.o
"___stderrp", referenced from:
_main in lto.o
_js_std_init in lto.o
llgoer
llgoer
使用32位编译环境编译
J
Jimno
想知道这个 qjsc是怎么实现的呢,是在可执行文件里面又内嵌了一个解释器吗,这样感觉和electon那种实现方式类似,没啥本质区别
llgoer
llgoer
qjsc将js转为c,再用gcc编译成可执行文件,electron用的nodejs的内核,nodejs基于v8,你应该拿这个跟v8来比,v8属于重量级,这个属于轻量级,本质基本上都一样
J
Jimno
666
wendal
wendal
神乎其技
红薯官方
红薯官方
能不能移植到C51单片机。
小果汁儿
小果汁儿
不能,内存远远不够
y
yuu2lee4
超级大牛
LongRaindy
LongRaindy
这个作者真niuB
半世为仙
半世为仙
先膜拜一下!
返回顶部
顶部