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

Posted FOSS Lab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mJS:适用于C/C++的嵌入式JavaScript引擎相关的知识,希望对你有一定的参考价值。

点击蓝字
默默关注

整理 | 叶子


一、软件介绍


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 *其他任何指针。为了导入更复杂的函数(例如,使用结构作为参数的函数),请编写包装器。




往期推荐


扫码关注最新动态

我就知道你“在看”

以上是关于mJS:适用于C/C++的嵌入式JavaScript引擎的主要内容,如果未能解决你的问题,请参考以下文章

javascrip

用于嵌入式项目的 C/C++ HTTP 客户端库 [关闭]

《软件工具》手把手教你使用Visual Studio Code开发C/C++(Windows)

《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)

面向(嵌入式 C/C++)开发人员的 Eclipse IDE 2020-12:经典深色主题深黑色背景和菜单中的文本

哪种脚本语言更适合嵌入多线程 C/C++ 应用程序 [关闭]