生猛!FFmpeg 开发者徒手撸了一个 JS 引擎

论坛 期权论坛 期权     
21CTO   2019-7-14 05:54   4281   0
21CTO导读:这个世界从来不缺天才,只缺乏利用天分坚持理想和信念不断创新的人,这些人用恒心和努力缔造一个又一个传奇。这位老兄就是用javascript写linux的那位。
七月的 12 日(本周二),网站 Hacker News 首页登载了一个热门消息,Fabrice Bellard 在 7 月 9 日发布了他的新作品,一个名叫QuickJS 的JavaScript 引擎。

Fabrice Bellard同时还是FFmpeg和QEMU的创建者以及C语言专家,他与Charlie Gordon宣布QuickJS首次公开发布。产品在MIT开源许可下发布,它是一个“小而完整的JavaScript引擎”,并支持最新的ES2019语言规范。

来看下图:





顾名思义,JavaScript 引擎是执行 JavaScript 代码的程序或解释器,它以某种形式将 JS 代码编译为字节码。有个大家熟知的 JS 引擎是 V8引擎,由 Google 用 C++ 实现的。

下图为QuickJS的官方网站:



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

QuickJS 是一个可嵌入的小巧 Javascript 引擎。它支持 ES2019 规范,包括模块、异步生成器和代理。它还支持数学扩展,比如大整数(BigInt)、大浮点数(BigFloat)和操作符重载。

下面我们总结QuickJS 的主要特性如下:

1、小巧可嵌入:仅公几个 C 文件,没有外部依赖,简单的 Hello World 程序需要 190 KiB 的 x86 代码。;

2、解释器启动时间非常短:在单核的桌面 PC 上,运行ECMAScript 测试套件 56000 个测试大约在 100 秒内。运行时实例的完整生命周期在不到 300 微秒内。

3、几乎完整支持 ES2019 ,包括模块、异步生成器和完整的附录B支持(遗留Web兼容性)。

3、可以100% 通过 ECMAScript 测试套件。

4、可以把 Javascript 源代码编译到可执行文件,没有外部依赖。

5、垃圾回收使用引用计数(减少内存使用并具有确定性行为)和循环删除。

6、数学扩展:BigInt、BigFloat、操作符重载、bigint模式、数学模式。

7、命令行解释器,用 Javascript 实现上下文着色。

8、有一个小型的 C 内置标准库。



QuickJS 遵循 MIT 开源许可证。官网链接为,https://bellard.org/quickjs/



以下是QuickJS 的测评结果:



(分数越高,表示越利害)



Fabrice Bellard 是何人也?


Fabrice是法国人,1972 年出生,著名的计算机程序员,因 FFmpeg、QEMU 等项目而闻名业内。精通 C 和 JavaScript。






在读高中时,就开发了著名的可执行压缩程序 LZEXE,这是当年 DOS 上第一个广泛使用的文件压缩程序。


在 2000 年,这位Fabrice大牛又开发了 FFmpeg。


在 2011 年,Fabrice使用 JavaScript 写了一个 PC 虚拟机 Jslinux,可以在浏览器中直接运行 Linux 或 Windows 操作系统。












上面只是Fabrice的众多作品中少数几个。下面是维基百科上的介绍。






(截图来自维基百科)


国内外的开发者和网友评论如下:




哇。核心是一个1.5MB的文件,非常易读,几乎支持所有最新标准,Bellard甚至还添加了自己的扩展。它具有NaN-boxing或传统标记联合对象表示的编译时选项,因此他不仅采用单一的最小实现,而且还有时间和精力去探索。我喜欢这样的东西,它不是C99,但似乎是基本的C89,意味着非常高的可移植性。
虽然我对JS厌恶主要是因为网站的滥用,但这个项目仍然非常令人印象深刻且非常鼓舞人心,并且人们想知道是否仍然存在“底层空间”,即使是更小但功能更具竞争力的实施。”
另一位说道:“ 我迫不及待地想要解决这个问题,看起来非常酷。我喜欢极简主义的做法。如果它真的符合规范,我将使用它来编译我编写的当前使用节点的一堆CLI脚本。




还有什么东西是 Fabrice 不能做的么?我的意思是,FFmpeg 本身几乎就是一篇博士论文,他仍然设法找到时间来做 TinyC 和 QEMU,现在又还做了 QuickJS。






这家伙真是个奇才。你也可以感谢他的 ffmpeg 和 qemu。我曾经工作过的一家公司试图聘请他做顾问,因为他在软件中实现了 LTE BTS。还有什么是他没法做的吗?

原文:

Introduction
QuickJS is a small and embeddable Javascript engine. It supports the ES2019 specification including modules, asynchronous generators and proxies.
It optionally supports mathematical extensions such as big integers (BigInt), big floating point numbers (BigFloat) and operator overloading.
Main Features:
Small and easily embeddable: just a few C files, no external dependency, 190 KiB of x86 code for a simple hello world program.
Fast interpreter with very low startup time: runs the 56000 tests of the ECMAScript Test Suite in about 100 seconds on a single core of a desktop PC. The complete life cycle of a runtime instance completes in less than 300 microseconds.
Almost complete ES2019 support including modules, asynchronous generators and full Annex B support (legacy web compatibility).
Passes 100% of the ECMAScript Test Suite.
Can compile Javascript sources to executables with no external dependency.
Garbage collection using reference counting (to reduce memory usage and have deterministic behavior) with cycle removal.
Mathematical extensions: BigInt, BigFloat, operator overloading, bigint mode, math mode.
Command line interpreter with contextual colorization implemented in Javascript.
Small built-in standard library with C library wrappers.
说明:21CTO综合自程序员等公众号媒体,在此一并致谢。
来源:https://hub.packtpub.com/introducing-quickjs-a-small-and-easily-embeddable-javascript-engine/


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

下载期权论坛手机APP