es6 混合commjs_嵌入式JavaScript引擎 – mjs
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相关推荐
- Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性. Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用D ...
- es6 混合commjs_es6的模块化文件mjs为什么无法运行呢 | 学步园
javascriptes6的模块化文件mjs为什么无法运行呢? mjs都是在同一目录下: clipboard.png main.mjs import{add,minus}from"./mat ...
- es6 混合commjs_详谈commonjs模块与es6模块的区别
到目前为止,已经实习了3个月的时间了.最近在面试,在面试题里面有题目涉及到模块循环加载的知识.趁着这个机会,将commonjs模块与es6模块之间一些重要的的区别做个总结.语法上有什么区别就不具体说了 ...
- es6 混合commjs_前端模块化——CommonJS、ES6规范
什么叫模块化? 对于一个复杂的程序,将其按照一定的规范封装成几个文件块,每一块向外暴露一些接口,但是块的内部数据是私有的,块与块之间通过接口通信.这个过程称为模块化. 模块化的好处 CommonJS ...
- Java8新特性总结 -8.Nashorn , JavaScript引擎
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...
- java入门---Java 8 新特性之Nashorn JavaScript引擎
Nashorn 一个 javascript 引擎.从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎.Nashor ...
- JDK8系列之JavaScript引擎Nashorn
从JDK1.8开始,Java采用Nashorn作为嵌入式 JavaScript 引擎.JDK1.6和JDK1.7采用Rhino.Nashorn 支持 ECMAScript 5.1 规范,使用基于 JS ...
- Moddable SDK为物联网开发提供JavaScript引擎:不到32KB
Moddable SDK为物联网开发提供了一个JavaScript引擎,支持超过99%的ES2017规范,初始大小不到32KB. Moddable XS7主要针对ES2017,而XS的当前主分支通过了 ...
- JavaScript引擎研究与C、C++与互调用(转)
本文转自:ice6015的专栏.为什么有些招聘需要熟悉JS和C++,这或许就是原因. 1. 概要 JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML ...
- javascript引擎执行的过程的理解--执行阶段
一.概述 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 1.语法分析: 分别对加载完成的代码块进行语法检验 ...
最新文章
- 23. Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】
- 【网络协议】TCP中的四大定时器
- asp IIS部署An error occurred on the server when processing the URL错误提示解决
- HDU1236 排名【排序】
- 基于51单片机直流电机PWM控制器设计
- i.MX283A移植mt7601--小米随身wifi
- 如何用ps做计算机二级报名照片,等级考试照片PS教程
- linux引导文件制作U盘,Linux下制作U盘系统启动盘的方法
- 转-零死角玩转stm32-高级篇之SDIO(4bit + DMA、支持SDHC、带协议分析)
- 怪异盒模型和标准盒模型
- android 定位蓝牙,蓝牙如何定位,简易蓝牙定位系统的实现方法
- Matlab学习笔记(1) - 符号变量及其运算
- IDEA系列:最新IntelliJ IDEA下载地址(社区版和专业版)
- 真王服务器文件,真王——后期快速升级心得
- HTTP 422 状态码
- Java黑皮书课后题第4章:*4.21(检查SSN)编写一个程序,提示用户输入一个社保号码(格式是DDD-DD-DDDD,D是1个数字)你的程序应该判断输入是否合法
- JavaScript-Pink
- 从Web2.0到Web3.0
- python能安装到d盘吗_第一课:python安装
- 遗传算法优化BP神经网络前后的对比