The following is a list of reasonably mature open source embedded scripting languages to use in your application.
| Project name/link | Implementation language | GC | License | Notes |
|---|---|---|---|---|
| AngelScript | C++ | Ref. counting | zlib | A curly brace language resembling C++ itself. |
| ChaiScript | C++ | Ref. counting | 3-clause BSD | |
| Chibi Scheme | C | Tracing | 3-clause BSD | Implements R7RS small. |
| CHICKEN Scheme | C | Tracing | 3-clause BSD | Implements R5RS (with some changes). R7RS support is a work in progress. Examples of embedding CHICKEN. |
| Clasp | Common Lisp, C++ | MPS GC (Boehm-Weiser also supported) | LGPL 2+ | Full Common Lisp implementation well integrated with C++, using LLVM for the code generation, to integrate closely with C++ applications or libraries. |
| Duktape | C | Ref. counting + cycle-detecting tracing GC | MIT | Implements JavaScript E5/E5.1. |
| DWScript | Object Pascal (Delphi 2009 or later) | Ref. counting + cycle-detecting tracing GC | MPL 1.1, GPL 3 (JavaScript code generator) | Description. A statically typed Delphi/Free Pascal-like language. Can compile to JavaScript. |
| Embeddable Common Lisp | Common Lisp, C | Boehm-Weiser GC | LGPL 2+ | Full Common Lisp implementation, available as a shared library libecl.so embeddable in any C, C++ or other application. |
| Espruino | C | Tracing | MPL 2.0 | Implements a subset of JavaScript ES5 in a way suitable for embedded hardware with 8+ KiB RAM. |
| Go-Lua | Go | Tracing (Go's GC) | MIT | Implements a subset of Lua 5.2. |
| GopherLua | Go | Tracing (Go's GC) | MIT | Implements Lua 5.1 with the added support for Go's channels. Lacks the debug hooks and several functions from the C version. |
| GNU Guile | C | Boehm | LGPL 3+ | |
| Jim Tcl | C | Tracing | 2-clause BSD | Largely compatible with Tcl 8.5 with its own additions. |
| JTcl | Java | Ref. counting | Various BSD-like | Tcl 8.4 with some 8.5 features for the JVM. |
| LIL | C, Object Pascal (separate implementations) | None (no reference support) | zlib | A Tcl-like language incompatible with mainline Tcl. |
| Lily | C | Ref. counting + GC | MIT | A language focusing on expressiveness and safety. How to embed and extend Lily. |
| Lua | C | Tracing | MIT | |
| luerl | Erlang | Tracing | Apache License 2.0 | An implementation of Lua 5.2 in pure Erlang with some features like goto absent. |
| LuaJ | Java | Tracing (JVM's GC) | MIT | A Lua 5.2 spec-compliant interpreter written in Java for JME and JSE. Complies Lua directly to JVM bytecode. |
| LuaJIT | C | Tracing | MIT | Fully compatible with Lua 5.1. Has a uilt-in C FFI library. Very fast. |
| Mono | C | Tracing | MIT and other | Implements the CLR. |
| mruby | C | Tracing | MIT | |
| otto | Go | Tracing (Go's GC) | MIT | Implements ES5 with some limitations. |
| Pascal Script | Object Pascal | Manual MM | Custom non-copyleft | Statically typed. Implements "most of Object Pascal". Can't define new classes. |
| Pawn | C | None (no heap allocation) | Apache License 2.0 with a static linking clause to explicitly permit static linking | |
| Python | C | Ref. counting + cycle-detecting tracing GC | PSFL (BSD-like) | Embedding Python in Another Application. |
| Squirrel | C++ | Ref. counting | MIT | |
| szl | C | Ref. counting | MIT | A small and simple Tcl-like language, with a set of bindings and FFI. |
| Tcl | C | Ref. counting | Tcl license (BSD-like) | |
| TinyScheme | C | Tracing? | 3-clause BSD | Implements a subset of R5RS. |
| Wren | C | Tracing | MIT | A small class-based performance-oriented scripting language. |
Your contributions are welcome! Please submit a pull request or create an issue to add a new language to the list.
