Duktape: 새로운 작고 간단 한 내장 형 JavaScript 엔진
5461 단어 djyos 관련
Duktape 는 끼 워 넣 을 수 있 는 자 바스 크 립 트 엔진 으로 주로 휴대 성과 간소화, 치밀 성에 주목한다.
Duktape 는 C / C + 프로젝트 에 쉽게 통합 된다. duktape. c 와 duktape. h 를 build 에 추가 하고 Duktape API 를 사용 하여 C 코드 에서 ECMAScript 코드 를 호출 하 는 기능 을 사용 하 며 반대로 도 마찬가지 입 니 다.
주요 특성:
끼 워 넣 기, 휴대용, 깜찍 함: 200 kB 코드
46KB RAM 시작 (X86, 기본 설정)
22KB RAM 시작 (X86, lowmem 옵션)
42kLoC 원본 (주석 등 제외)
256 kB 플래시 메모리 와 96KB RAM 을 갖 춘 시스템 플랫폼 에서 실행 가능
ECMAScript 의 E5 / E5.1 기준, 일부 기능 은 E6 초안 에서 빌려 온 것 정규 표현 식 엔진 내장 내 장 된 유 니 코드 지원 최소 플랫폼 의존성 '인용 계수' 와 '태그 제거' 를 결합 한 쓰레기 수집 과 회수 메커니즘 사용자 정의 기능, 예 를 들 어 프로 세 스, 로그 프레임 워 크 를 내장 하고 CommonJS 의 기본 모듈 로 딩 프레임 워 크 를 내장 합 니 다 (주: node. js 의 require / export 와 유사) ECMAScript ES6 Proxy 대상 을 사용 하여 구현 되 는 Property virtualization 자유 허가증 (MIT) 현재 상태: 안정시키다
기술 지원:
사용자 커 뮤 니 티 Q & A: stackoverflow duktape 라벨
빈틈 과 새로운 기능 요구 사항: GitHub Issues
일반 토론: IRC \ # duktape on chat. freenode. net
어떻게 사용 합 니까?
1. 편집 시스템 에 추가
build 에 Duktape C 원본 파일 과 헤더 파일 을 추가 합 니 다.모든 build 시스템 은 지원 할 수 있 습 니 다. 발행 가방 에는 Makefile 의 범례 가 있 습 니 다. 다음은 간단 한 예 입 니 다.
$ gcc -std=c99 -o test test.c duktape.c -lm$ ./testHello world!
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;}
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 */}
注册你的函数, 例如,放到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 */