Duktape is an embeddable Javascript engine, with a focus on portability and compact footprint.
Duktape is easy to integrate into a C/C++ project: add duktape.c and duktape.h to your build, and use the Duktape API to call Ecmascript functions from C code and vice versa.
Main features:
Current status:
Add Duktape C source and header to your build. Any build system can be used. The distributable contains an example Makefile for reference. In the simplest case:
$ gcc -o test test.c duktape.c -lm $ ./test Hello world!
Initialize and use Duktape somewhere in your program:
/* 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; }
To call a C function from Ecmascript code, first declare your C function:
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 */ }
Register your function e.g. into the global object:
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 */
You can then call your function from Ecmascript code:
duk_eval_string(ctx, "print('2+3=' + adder(2, 3));"); duk_pop(ctx); /* pop eval result */