mJS: 保密的JavaScript引擎

概述

mJS是为有限资源的microcontroller而设计的。主要设计目标是:占用体积小,简单的C/C++互操作。

任何有效的mJS代码始终是一个有效的ES6代码。

任何有效的ES6代码不必是一个有效的mJS代码。

回调

假定你有一个C函数接受一个回调和用户数据void*指针,这应该在签名中被标记为用户数据:

void timer(int seconds, void (*callback)(int, void *), void *user_data);

下面是如何创建一个mJS回调-注意userdata的用法:

let timer = ffi('void timer(int, void (*)(int, userdata), userdata)');

let callback = function(time, data) {

print('Time now: ', time, ' called: ', data.num_calls, ' times');

};

let callback_data = { num_calls: 0 };

timer(1, callback, callback_data);Complete embedding example

Complete embedding example

我们将C函数foo导入到JS环境中并且从JS中调用它。

#include "strings.h"

#include "mjs.h"

void foo(int x) {

printf("Hello %d!

", x);

}

void *my_dlsym(void *handle, const char *name) {

if (strcmp(name, "foo") == 0) return foo;

return NULL;

}

int main(void) {

struct mjs *mjs = mjs_create();

mjs_set_ffi_resolver(mjs, my_dlsym);

mjs_exec(mjs, "let f = ffi('void foo(int)'); f(1234)", NULL);

return 0;

}

编译&运行:

$ cc main.c mjs.c -o /tmp/x && /tmp/x

Hello 1234!

es6 混合commjs_嵌入式JavaScript引擎 – mjs相关推荐

  1. Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎

    Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性. Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用D ...

  2. es6 混合commjs_es6的模块化文件mjs为什么无法运行呢 | 学步园

    javascriptes6的模块化文件mjs为什么无法运行呢? mjs都是在同一目录下: clipboard.png main.mjs import{add,minus}from"./mat ...

  3. es6 混合commjs_详谈commonjs模块与es6模块的区别

    到目前为止,已经实习了3个月的时间了.最近在面试,在面试题里面有题目涉及到模块循环加载的知识.趁着这个机会,将commonjs模块与es6模块之间一些重要的的区别做个总结.语法上有什么区别就不具体说了 ...

  4. es6 混合commjs_前端模块化——CommonJS、ES6规范

    什么叫模块化? 对于一个复杂的程序,将其按照一定的规范封装成几个文件块,每一块向外暴露一些接口,但是块的内部数据是私有的,块与块之间通过接口通信.这个过程称为模块化. 模块化的好处 CommonJS ...

  5. Java8新特性总结 -8.Nashorn , JavaScript引擎

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  6. java入门---Java 8 新特性之Nashorn JavaScript引擎

        Nashorn 一个 javascript 引擎.从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎.Nashor ...

  7. JDK8系列之JavaScript引擎Nashorn

    从JDK1.8开始,Java采用Nashorn作为嵌入式 JavaScript 引擎.JDK1.6和JDK1.7采用Rhino.Nashorn 支持 ECMAScript 5.1 规范,使用基于 JS ...

  8. Moddable SDK为物联网开发提供JavaScript引擎:不到32KB

    Moddable SDK为物联网开发提供了一个JavaScript引擎,支持超过99%的ES2017规范,初始大小不到32KB. Moddable XS7主要针对ES2017,而XS的当前主分支通过了 ...

  9. JavaScript引擎研究与C、C++与互调用(转)

    本文转自:ice6015的专栏.为什么有些招聘需要熟悉JS和C++,这或许就是原因. 1.  概要 JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML ...

  10. javascript引擎执行的过程的理解--执行阶段

    一.概述 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 1.语法分析: 分别对加载完成的代码块进行语法检验 ...

最新文章

  1. 23. Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】
  2. 【网络协议】TCP中的四大定时器
  3. asp IIS部署An error occurred on the server when processing the URL错误提示解决
  4. HDU1236 排名【排序】
  5. 基于51单片机直流电机PWM控制器设计
  6. i.MX283A移植mt7601--小米随身wifi
  7. 如何用ps做计算机二级报名照片,等级考试照片PS教程
  8. linux引导文件制作U盘,Linux下制作U盘系统启动盘的方法
  9. 转-零死角玩转stm32-高级篇之SDIO(4bit + DMA、支持SDHC、带协议分析)
  10. 怪异盒模型和标准盒模型
  11. android 定位蓝牙,蓝牙如何定位,简易蓝牙定位系统的实现方法
  12. Matlab学习笔记(1) - 符号变量及其运算
  13. IDEA系列:最新IntelliJ IDEA下载地址(社区版和专业版)
  14. 真王服务器文件,真王——后期快速升级心得
  15. HTTP 422 状态码
  16. Java黑皮书课后题第4章:*4.21(检查SSN)编写一个程序,提示用户输入一个社保号码(格式是DDD-DD-DDDD,D是1个数字)你的程序应该判断输入是否合法
  17. JavaScript-Pink
  18. 从Web2.0到Web3.0
  19. python能安装到d盘吗_第一课:python安装
  20. 遗传算法优化BP神经网络前后的对比

热门文章

  1. 你的宽带ip地址被100.64了吗?
  2. Java中的Enum的简单使用
  3. DSPE-PEG3-Mal,小分子PEG连接马来酰亚胺基团
  4. 原始股的股份怎么进行分红
  5. win7环境安装ubuntu16.04双系统
  6. centos linux系统日志分析,CentOS 7日志分析详解【二】
  7. 【LSTM实战】股票走势预测全流程实战(stock predict)
  8. C语言入门 函数调用 main函数 int main 是什么
  9. 企业微信小程序-获取员工信息
  10. c# 讯飞语音 sdk