Elk是一个小型的可嵌入JavaScript引擎,它实现了ES6的一个小型子集。ELK 是为微控制器开发而设计的,它允许在JavaScript中开发代码,而不是用C/C++编写代码。另一个用例是为客户提供一个安全、受保护的脚本环境,用于产品定制。
特点:
- 跨平台。适用于从8位微控制器到64位服务器
- 零依赖性。通过ISO C或ISO C++编译器干净地构建
- 易于嵌入:只需复制到源代码treeelk.celk.h
- 非常小且简单的嵌入API
- 可以从JavaScript调用本地C/C++函数,反之亦然
- 不使用malloc。仅使用给定的内存缓冲区操作
- 占用空间小:闪存/磁盘约20KB,核心虚拟机约100字节RAM
- 没有字节码。直接解释JS代码
支持的功能
- 操作:除以下外的所有标准JS操作:
- !=, . 使用严格比较,==、!==、===
- 没有三元运算符a?b:c
- 没有计算成员访问
- 类型:typeof('a') === 'string'
- While:While(…){…}
- 条件:if(…)。。。else。。。
- 简单类型:let a, b, c = 12.3, d = 'a', e = null, f = true, g = false;
- 函数:let f = function(x, y) { return x + y; };
- 对象:let obj={f:function(x){return x*2};obj.f(3);
- 每个语句必须以分号结尾;
- 字符串是二进制数据块,而不是Unicode字符串:'Київ'.length === 8
不支持的功能
- 不支持 no。使用var、const、let
- 不支持 , , . 使用 do、switch、for、while
- 没有函数。使用=>let f = function(...) {...};
- 没有数组、闭包、原型、this、new、delete
- 没有标准库:no , , , , Date、Regexp、Function、String、Number
性能
由于Elk会实时解析和解释JS代码,所以它不应该用于性能关键的场景。