查看原文
其他

mJS:适用于C/C++的嵌入式JavaScript引擎

FOSS Lab 2021-09-10
点击蓝字默默关注

整理 | 叶子


一、软件介绍


mJS 是一个用于 C/C++ 的嵌入式 JavaScript 引擎,专为资源有限的微控制器而设计。其主要设计目标是:占用资源小、简单的 C/C++ 互操作性。

mJS 实现了 ES6 的严格子集:
  • 任何有效的 mJS 代码都是有效的 ES6 代码。
  • 任何有效的 ES6 代码不一定是有效的 mJS 代码。

在 32 位 ARM mJS 引擎上,需要大约 50k 的闪存和少于 1k 的 RAM。

此外,mJS 是 Mongoose OS 的一部分,可在其中为 IoT 设备编写脚本。


二、项目地址


https://github.com/cesanta/mjs


三、限制条件


  • 没有标准库。没有字符串,数字,RegExp,日期,函数等。
  • JSON.parse()JSON.stringify()可用。
  • 没有闭包,只有词法作用域(即允许嵌套函数)。
  • 没有例外情况。
  • 没有new。为了使用自定义原型创建对象,请使用 Object.create()。
  • 仅限严格模式。
  • 不能var,只有let
  • 不能for..of=>,析构函数,生成器,代理,承诺。
  • 没有getter,setter,valueOf原型,类,模板字符串。
  • 不能==!=,仅可以===!==
  • MJS字符串是字节的字符串,而不是Unicode字符串:'ы'.length === 2, 'ы'[0] === '\xd1''ы'[1] === '\x8b'。mJS字符串可以代表任何二进制数据块。

四、C / C ++互操作性


mJS不需要粘合代码。mJS的外部函数接口(FFI)允许用户使用任意签名调用现有的C函数。目前,mJS提供了FFI trampoline的简单实现,最多支持6个32位参数,或最多支持2个64位参数:

let floor = ffi('double floor(double)');print(floor(1.23456));

函数的参数应当很简单:只支持intdoublechar *void * 。用途char *为NULL结尾的C字符串,void *其他任何指针。为了导入更复杂的函数(例如,使用结构作为参数的函数),请编写包装器。




往期推荐

一个免费的开源Java 2D游戏引擎

2021-01-20

5.6k Star,一个简单易用的视频游戏编程库

2021-01-19

4.5k Star,一个Java开发中最为流行的数据库持久层框架

2021-01-18


扫码关注最新动态

公众号ID:fosslab

我就知道你“在看”
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存