Duktape: 새로운 작고 간단 한 내장 형 JavaScript 엔진

5461 단어 djyos 관련
원본 링크:http://ourjs.com/detail/duktape-%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E5%B0%8F%E5%B7%A7%E7%9A%84%E8%B6%85%E7%B2%BE%E7%AE%80%E5%8F%AF%E5%B5%8C%E5%85%A5%E5%BC%8Fjavascript%E5%BC%95%E6%93%8E
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
$ ./test
Hello 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 */

좋은 웹페이지 즐겨찾기