一個新的小巧的超精簡可嵌入式JavaScript引擎:Duktape
Duktape是一個可嵌入的Javascript引擎,主要關注便攜性和精簡及緊湊性。
Duktape很容易集成到C/C++項目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API從C代碼中,調用ECMAScript代碼的功能,反之亦然。
主要特性:
- 嵌入式,便攜,小巧: </ul>
- ECMAScript的E5/ E5.1標準,一些功能從E6草案借來的 </ul>
- 內置正則表達式引擎 </ul>
- 內置的Unicode支持 </ul>
- 最小的平臺依賴性 </ul>
- 結合"引用計數"和"標記清除"的垃圾收集與回收機制 </ul>
- 自定義功能,如協程,內置日志框架,并內置CommonJS的基礎模塊加載框架(注: 類似node.js中的require/export) </ul>
200kB的代碼
46KB RAM啟動(X86,默認選項)
22KB RAM啟動(X86,lowmem選項)
42kLoC源(不包括注釋等)
可以運行在具有256kB的閃存和96KB RAM的系統平臺
$ gcc -std=c99 -o test test.c duktape.c -lm$ ./testHello world!</pre>
2 初始化上下文(context)
初始化并在你的程序中使用Duktape
/* test.c */#include "duktape.h"int main(int argc, char *argv[]) {duk_context *ctx = duk_create_heap_default();duk_eval_string(ctx, "print('Hello world!');");duk_destroy_heap(ctx);return 0;}</pre>
3 添加C語言函數綁定(function bindings)
在Ecmascript(JavaScript)代碼中調用C語言的函數,首先要聲明你的C函數:
int adder(duk_context *ctx) {int i;int n = duk_get_top(ctx); /* #args */double res = 0.0;for (i = 0; i < n; i++) {res += duk_to_number(ctx, i);}duk_push_number(ctx, res);return 1; /* one return value */}</pre>
注冊你的函數, 例如,放到global對象中:
duk_push_global_object(ctx); duk_push_c_function(ctx, adder, DUK_VARARGS); duk_put_prop_string(ctx, -2 /*idx:global*/, "adder"); duk_pop(ctx); /* pop global */
然后你就可以在Ecmascript中調用這個函數:
duk_eval_string(ctx, "print('2+3=' + adder(2, 3));"); duk_pop(ctx); /* pop eval result */
原文地址: duktape.org
來自:http://ourjs.com/detail/548a73b58a34fa3204000005
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!