├── .gitattributes ├── .github └── workflows │ ├── jekyll-gh-pages.yml │ └── rebuild-readme.yml ├── .gitignore ├── CONTRIBUTING.md ├── Makefile ├── README.md ├── README.md.njk ├── _config.yml ├── _includes ├── custom-head.html ├── footer.html ├── head.html └── header.html ├── data └── projects.toml └── render-template.ts /.gitattributes: -------------------------------------------------------------------------------- 1 | _includes/* linguist-vendored 2 | Makefile linguist-vendored 3 | *.njk linguist-vendored 4 | render-template.ts linguist-vendored 5 | -------------------------------------------------------------------------------- /.github/workflows/jekyll-gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Pages 2 | # This configuration file is based on 3 | # https://github.com/actions/starter-workflows/blob/2bb20df369386c3e20630fce032d3ab4915373a1/pages/jekyll-gh-pages.yml 4 | 5 | # Run when the `README.md` rebuild workflow has run and succeeded (see the `if` 6 | # in the `build` job). Borrowed from this example: 7 | # https://github.com/GuillaumeFalourd/poc-github-actions/blob/1e2766ef6f6755edd79562d962c9e2521187419e/.github/workflows/12-run-workflow.yml 8 | 'on': 9 | workflow_run: 10 | workflows: [Rebuild] 11 | types: [completed] 12 | 13 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages. 14 | permissions: 15 | contents: read 16 | pages: write 17 | id-token: write 18 | 19 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 20 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 21 | concurrency: 22 | group: 'pages' 23 | cancel-in-progress: false 24 | 25 | jobs: 26 | build: 27 | runs-on: ubuntu-latest 28 | if: ${{ github.event.workflow_run.conclusion == 'success' }} 29 | steps: 30 | - name: Checkout 31 | uses: actions/checkout@v4 32 | - name: Setup Pages 33 | uses: actions/configure-pages@v4 34 | - name: Build with Jekyll 35 | uses: actions/jekyll-build-pages@v1 36 | with: 37 | source: ./ 38 | destination: ./_site 39 | - name: Upload artifact 40 | uses: actions/upload-pages-artifact@v3 41 | 42 | deploy: 43 | environment: 44 | name: github-pages 45 | url: ${{ steps.deployment.outputs.page_url }} 46 | runs-on: ubuntu-latest 47 | needs: build 48 | steps: 49 | - name: Deploy to GitHub Pages 50 | id: deployment 51 | uses: actions/deploy-pages@v4 52 | -------------------------------------------------------------------------------- /.github/workflows/rebuild-readme.yml: -------------------------------------------------------------------------------- 1 | name: Rebuild 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: denoland/setup-deno@v1 10 | with: 11 | deno-version: v1.x 12 | - uses: actions/checkout@v4 13 | - name: Render template 14 | run: | 15 | make -B 16 | - uses: stefanzweifel/git-auto-commit-action@v4 17 | with: 18 | commit_message: 'README.md: rebuild' 19 | status_options: '--untracked-files=no' 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /attic 2 | /_site 3 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## What and how to contribute 4 | 5 | Please submit a pull request or create an issue to add a new language to the list. 6 | We are looking for language implementations that are either actively maintained or largely "done". 7 | The VM, bytecode compiler, and standard library (if any) must have a free (*libre*) license. 8 | They may have optional add-ons with any license. 9 | A Datalog implementation must be able to parse Datalog source code; 10 | it must not be just an [EDSL](https://en.wikipedia.org/wiki/Domain-specific_language#External_and_Embedded_Domain_Specific_Languages). 11 | 12 | ## Do not edit `README.md` directly 13 | 14 | `README.md` is automatically generated from `README.md.jinja2` and the data in [`data/projects.toml`](data/projects.toml). 15 | Do not edit `README.md` directly. 16 | To add a project or update a project's information, edit `data/projects.toml`. 17 | Edit `README.md.njk` to change information not derived from `data/projects.toml`. 18 | 19 | ## Descriptions 20 | 21 | Avoid marketing language in descriptions. 22 | You are encouraged to list a few of the project's cool standout features in the description, 23 | but don't call the project itself "fast" (relative to what?) or "revolutionary" (a matter of opinion). 24 | Write without adjectives when possible. 25 | If the project is faster than most implementations of the same language, say that. 26 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: README.md 2 | 3 | README.md: README.md.njk render-template.ts Makefile data/projects.toml 4 | ./render-template.ts README.md.njk data/projects.toml > $@ 5 | 6 | .PHONY: all 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Embedded scripting languages 2 | 3 | The following is a list of reasonably mature or actively developed open source [embedded scripting languages](https://en.wikipedia.org/wiki/Scripting_language) to use in your application. Stretching the definition of a scripting language, it also includes [Datalog](https://en.wikipedia.org/wiki/Datalog) implementations. Items with a strong copyleft license (like the GNU GPL) that will apply to the rest of your code are **emphasized** as a warning. 4 | 5 | To sort and filter the list interactively, visit the [webpage](https://dbohdan.github.io/embedded-scripting-languages/). To contribute, go to the [GitHub project](https://github.com/dbohdan/embedded-scripting-languages). 6 | 7 | ## Contents 8 | 9 | - [Embedded scripting languages](#embedded-scripting-languages) 10 | * [List](#list) 11 | * [See also](#see-also) 12 | * [Contributing](#contributing) 13 | * [License](#license) 14 | * [Disclosure](#disclosure) 15 | 16 | ## List 17 | 18 | | Language | Project name/link | Implementated in | GC | License | Notes | 19 | |----------|-------------------|------------------|----|---------|-------| 20 | | Ada | [HAC](https://hacadacompiler.sourceforge.io/) | Ada | None (stack only) | MIT | HAC implements a subset of the Ada language. Thus, it can share sources with the embedding application. | 21 | | AngelScript | [AngelScript](http://www.angelcode.com/angelscript/) | C++ | Ref. counting + cycle-detecting tracing GC | Zlib | A statically typed curly brace language resembling C++ itself. | 22 | | Anko | [Anko](https://github.com/mattn/anko/) | Go | Go's GC | MIT | Scriptable interpreter with syntax similar to Go. | 23 | | ArkScript | [ArkScript](https://github.com/SuperFola/Ark) | C++ | None (resource release is destruction + optional manual MM) | MPL-2.0 | A small functional Lisp-like programming language. Separate bytecode compiler and VM. | 24 | | Asp | [Asp](https://www.asplang.org/) | C | Ref. counting inside a static memory area | MIT | Python-like. Targets embedded systems. Allows making blocking calls in scripts without blocking the main application. Runs compiled bytecode. Not related to Microsoft's Active Server Pages. | 25 | | Awk | [Libmawk](http://repo.hu/projects/libmawk/) | C | Ref. counting | **GPL-2.0** | Implements Awk. A fork of mawk 1.3 restructured for embedding. | 26 | | Awk, Basic, Pascal | [Libfawk](http://repo.hu/projects/libfawk/) | C | Ref. counting | BSD-3-Clause | A multi-language VM. Includes compilers for three languages: Fawk (Awk dialect), Fbas (Basic dialect), and Fpas (Pascal dialect). | 27 | | Basic | [MY-BASIC](https://github.com/paladin-t/my_basic) | C | Ref. counting + cycle-detecting tracing GC | MIT | A Basic dialect with prototype-based OOP. | 28 | | Berry | [Berry](https://github.com/berry-lang/berry) | C | Tracing | MIT | Lightweight dynamically-typed embedded scripting language designed for lower-performance devices with limited memory. | 29 | | Boron | [Boron](http://urlan.sourceforge.net/boron/) | C | Tracing | LGPL-3.0-or-later | An embeddable scripting language similar to Rebol. | 30 | | C | [PicoC](https://github.com/zsaleeba/picoc) | C | None (manual MM) | BSD-3-Clause | Statically typed. Interprets a subset of C. | 31 | | C | [tcc](https://repo.or.cz/tinycc.git/) | C | None | LGPL-2.0-only | A small C compiler that can be used as a library for a C JIT. [libtcc header](https://repo.or.cz/tinycc.git/blob/HEAD:/libtcc.h). [Embedding example](https://repo.or.cz/tinycc.git/blob/HEAD:/tests/libtcc_test.c). | 32 | | C#, other CLR languages | [Mono](http://www.mono-project.com/docs/advanced/embedding/scripting/) | C | Tracing | MIT and other | Implements the [CLR](https://en.wikipedia.org/wiki/Common_Language_Runtime). | 33 | | ChaiScript | [ChaiScript](http://chaiscript.com/) | C++ | Ref. counting | BSD-3-Clause | A header-only C++14 interpreter library. | 34 | | Clojure | [sci](https://github.com/borkdude/sci) | Clojure | host VM's GC | EPL-1.0 | An interpreter for a subset of Clojure for Clojure and ClojureScript. | 35 | | Common Expression Language (CEL) | [cel-go](https://github.com/google/cel-go) | Go | Go's GC | Apache-2.0 | Rust implementation of CEL, a non-Turing-complete expression language. | 36 | | Common Expression Language (CEL) | [cel-python](https://github.com/cloud-custodian/cel-python) | Python | Python's GC | Apache-2.0 | A non-Turing-complete expression language. | 37 | | Common Expression Language (CEL) | [cel-rust](https://github.com/clarkmcc/cel-rust) | Rust | None | MIT | A non-Turing-complete expression language. | 38 | | Common Lisp | [Clasp](https://github.com/drmeister/clasp) | Common Lisp, C++ | MPS GC (Boehm-Weiser also supported) | LGPL-2.0-or-later | Full Common Lisp implementation well-integrated with C++, using LLVM for code generation to integrate closely with C++ applications or libraries. | 39 | | Common Lisp | [Embeddable Common Lisp](https://gitlab.com/embeddable-common-lisp/ecl) | Common Lisp, C | Boehm-Weiser GC | LGPL-2.0-or-later | Full Common Lisp implementation, available as a shared library `libecl.so` embeddable in any C, C++ or other application. | 40 | | daScript | [daScript](https://dascript.org/) | C++ | None (region-based + manual MM?) | BSD-3-Clause | A statically-typed [performance-oriented](https://dascript.org/#performance) scripting language. | 41 | | Datalog | [AbcDatalog](http://abcdatalog.seas.harvard.edu/) | Java | JVM's GC | BSD-3-Clause | Implements Datalog. | 42 | | Datalog | [Cascalog](https://github.com/nathanmarz/cascalog) | Clojure | JVM's GC | Apache-2.0 | Implements Datalog. | 43 | | Datalog | [Datalog (c-cube)](https://github.com/c-cube/datalog) | OCaml | OCaml's GC | BSD-2-Clause | Implements Datalog. | 44 | | Datalog | [Datalog (fogfish)](https://github.com/fogfish/datalog) | Erlang | None (no collection inside interpreter state) | Apache-2.0 | Implements Datalog. | 45 | | Datalog | [Datalog (MITRE Corporation)](http://datalog.sourceforge.net/) | C | Tracing (Lua's GC) | LGPL-2.0-or-later | Implements Datalog. It is implemented on top of Lua 5.3 and can be extended with Lua functions. | 46 | | Dhall | [Dhall](https://dhall-lang.org/) | Haskell | Haskell's GC | BSD-3-Clause | A statically-typed functional configuration language. Not Turing-complete. Untrusted code: can't access the file system, can fetch Dhall libraries over HTTP(S) from static URLs (but libraries aren't allowed to access your data), can use up memory and CPU time for a DoS attack. Has a work-in-progress Clojure and Ruby implementation. | 47 | | DWScript | [DWScript](https://bitbucket.org/egrange/dwscript/) | Object Pascal (Delphi 2009 or later) | Ref. counting + cycle-detecting tracing GC | MPL-1.1, GPL-3.0 (JavaScript code generator) | [Description](https://www.delphitools.info/dwscript). A statically typed Delphi/Free Pascal-like language. Can compile to JavaScript. | 48 | | Dyon | [Dyon](https://github.com/pistondevelopers/dyon) | Rust | None (Rust-style [lifetimes](http://www.piston.rs/dyon-tutorial/lifetimes.html)) | Apache-2.0 or MIT | Features optional, optimistic (succeed-by-default) static type checking. | 49 | | Expr | [Expr](https://github.com/antonmedv/expr) | Go | Go's GC | MIT | Compiles and evaluates statically-typed expressions. | 50 | | Falcon | [Falcon](http://falconpl.org/) | C++ | Tracing | **GPL-2.0** or custom | The GC is pluggable. | 51 | | fe | [fe](https://github.com/rxi/fe) | C | Tracing | MIT | Uses a fixed-size memory region. No `malloc`. | 52 | | Forth | [Atlast](https://www.fourmilab.ch/atlast/) | C | None (manual MM) | Public domain | A dialect of Forth originally developed at Autodesk. | 53 | | Forth | [FTH](http://fth.sourceforge.net) | C | Tracing | BSD-2-Clause | A dialect of Forth with objects, hashes, regular expressions, and other extensions. | 54 | | Forth | [pForth](http://www.softsynth.com/pforth/) | C | None (manual MM) | Public domain | A dialect of Forth. | 55 | | GameMonkey Script | [GameMonkey Script](http://www.gmscript.com/) | C++ | Tracing | MIT | Comes with C bindings. Similar to Lua, multithreaded. | 56 | | Gentee | [Gentee](https://github.com/gentee/gentee/) | Go | Go's GC | MIT | Statically typed. | 57 | | gluon | [gluon](https://github.com/gluon-lang/gluon) | Rust | Tracing | MIT | Statically typed. Inspired by Lua, Haskell, and OCaml. Each executing gluon thread gets a separate heap. | 58 | | Go | [Yaegi](https://github.com/traefik/yaegi) | Go | Go's GC | Apache-2.0 | An embedded complete Go interpreter, on top of the Go runtime. | 59 | | Gravity | [Gravity](https://github.com/marcobambini/gravity) | C | Tracing | MIT | A class-based concurrent scripting language with a Swift-like syntax. | 60 | | Groovy | [Groovy](http://groovy-lang.org/) | Java | JVM's GC | Apache-2.0 | A scripting language for the JVM. A large subset of Java is valid Groovy. [Integrating Groovy into applications](http://groovy-lang.org/integrating.html). | 61 | | Haxe | [HashLink](https://hashlink.haxe.org/) | C | Tracing (lazy sweep) | MIT | A bytecode interpreter and a baseline JIT compiler (x86/x86\_64 only) for [Haxe](https://haxe.org/). | 62 | | Haxe, others | [Neko](http://nekovm.org/) | C | Boehm | MIT | The NekoVM is a target for several compilers, including [Haxe](http://haxe.org/). | 63 | | Interpreter | [Interpreter](https://github.com/Tyill/interpreter) | C++ | None | MIT | A small interpreter in one header and one source code file with optional extensions (arithmetic operations, containers, filesystem, and others). | 64 | | Io | [Io](https://github.com/stevedekorte/io) | C | Tracing | BSD-3-Clause | A prototype-based OO language. | 65 | | Janet | [Janet](https://janet-lang.org/) | C | Tracing | MIT | A functional and imperative language with a Lisp syntax. | 66 | | Java | [BeanShell](https://github.com/beanshell/beanshell/) | Java | JVM's GC | Apache-2.0 | An small, embeddable Java source code interpreter. Understands Java code with certain extensions like method closures. | 67 | | JavaScript | [Duktape](http://duktape.org/) | C | Ref. counting + cycle-detecting tracing GC | MIT | Implements JavaScript E5/E5.1. | 68 | | JavaScript | [Espruino](https://github.com/espruino/Espruino) | C | Tracing | MPL-2.0 | Implements a subset of JavaScript ES5 in a way suitable for embedded hardware with 8+ KiB RAM. | 69 | | JavaScript | [Goja](https://github.com/dop251/goja) | Go | Go's GC | MIT | Implements ECMAScript 5.1. Better standard compliance and performance than otto. | 70 | | JavaScript | [GraalJS](https://github.com/oracle/graaljs) | C++, C, Java | JVM's GC | UPL-1.0 | Implements ECMAScript 2022 for GraalVM (HotSpot JVM) using the Truffle framework. | 71 | | JavaScript | [JerryScript](https://github.com/jerryscript-project/jerryscript) | C | Tracing | Apache-2.0 | A full ECMAScript 5.1 interpreter written in C99 and optimized for low memory consumption. Uses CMake. | 72 | | JavaScript | [jsish](https://github.com/pcmacdon/jsish) | C | Ref. counting | MIT | A JavaScript ES 5.2+ interpreter. Internally structured after Tcl with an extensive C API. Features include subinterpreters, introspection, SQLite bindings, and a web framework with WebSocket support. The code is valid C and C++. | 73 | | JavaScript | [MuJS](https://mujs.com/) | C | Tracing | ISC | Implements JavaScript (ES5). Has a similar C interface to Lua. | 74 | | JavaScript | [njs](https://nginx.org/en/docs/njs/) | C | None (no collection performed) | BSD-2-Clause | Implements a subset of ES5.1 with some ES6 extensions. | 75 | | JavaScript | [otto](https://github.com/robertkrimen/otto) | Go | Go's GC | MIT | Implements ES5 with [some limitations](https://github.com/robertkrimen/otto#caveat-emptor). | 76 | | JavaScript | [QuickJS](https://bellard.org/quickjs/) | C | Ref. counting + cycle-detecting tracing GC | MIT | A small embedded JavaScript interpreter that implements almost all of ES2019 and much of ES2020. | 77 | | Jinx | [Jinx](https://jamesboer.github.io/Jinx/) | C++17 | Ref. counting | MIT | Designed for use in realtime applications such as video games. | 78 | | Jsonnet | [Jsonnet](https://jsonnet.org/) | C++ | Tracing | Apache-2.0 | A functional configuration language that extends JSON. Untrusted code: can't access the file system or network, can use up memory and CPU time for a DoS attack. Has [bindings](https://jsonnet.org/ref/bindings.html) for C, C++, Go, Python, and other languages, as well as a separate native Go implementation. | 79 | | Ketos | [Ketos](https://github.com/murarth/ketos) | Rust | None (no heap allocation)? | Apache-2.0 | A functional Lisp. | 80 | | LIL | [LIL](http://runtimeterror.com/tech/lil/) | C, Object Pascal (separate implementations) | None (no reference support) | Zlib | A Tcl-like language incompatible with mainline Tcl. | 81 | | Lily | [Lily](https://github.com/FascinatedBox/lily/) | C | Ref. counting + tracing GC | MIT | A language focused on expressiveness and safety. | 82 | | ljs | [ljs](https://github.com/mingodad/ljs) | C | Tracing | MIT | Lua 5.3, Lua 5.1, and LuaJIT with a C/C++/Java/JavaScript syntax. Can convert Lua source code to ljs. | 83 | | Lua | [Go-Lua](https://github.com/Shopify/go-lua) | Go | Go's GC | MIT | Implements a subset of Lua 5.2. | 84 | | Lua | [GopherLua](https://github.com/yuin/gopher-lua) | Go | 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. | 85 | | Lua | [Lua](http://lua.org/) | C | Tracing | MIT | The reference implementation of what is likely the world's most popular embedded scripting language. Allows you to precompile scripts to bytecode. Versions 5.1-5.3, which are the ones used today, are not fully compatible with each other. | 86 | | Lua | [LuaJ](https://sourceforge.net/projects/luaj/) | Java | JVM's GC | MIT | A Lua 5.2 spec-compliant interpreter written in Java for JME and JSE. Complies Lua directly to JVM bytecode. | 87 | | Lua | [LuaJIT](http://luajit.org/) | C | Tracing | MIT | Fully compatible with Lua 5.1. Has a built-in C FFI library. [Performance comparison](https://luajit.org/performance.html). | 88 | | Lua | [Lua-ML](https://github.com/lindig/lua-ml) | OCaml | OCaml's GC | BSD-2-Clause | Embeddable Lua 2.5 reimplementation that integrates with OCaml type and module system. It is possible to extend or even replace the standard library with custom modules. | 89 | | Lua | [Luau](https://luau-lang.org/) | C | Tracing | MIT | Roblox [fork of Lua 5.1](https://luau-lang.org/why) as a scripting language for games to support a gradual type system as well as limiting the set of standard libraries exposed to the users and implements extra sandboxing features to be able to run unprivileged code. Whenever possible, Luau aims to be backwards-compatible with Lua 5.1 and at the same time to incorporate features from later revisions of Lua. | 90 | | Lua | [luerl](https://github.com/rvirding/luerl) | Erlang | Tracing | Apache-2.0 | An implementation of Lua 5.2 in pure Erlang with some features like `goto` absent. | 91 | | Lua | [MoonSharp](https://www.moonsharp.org/) | C# | CLR's GC | BSD-3-Clause and other | CLR Based Lua implementation that is 99% compatible with Lua 5.2 | 92 | | Lua | [Ravi](https://github.com/dibyendumajumdar/ravi) | C | Tracing | MIT | “Ravi is a dialect of Lua with limited optional static typing and features a JIT compiler powered by MIR as well as support for AOT compilation to native code.” | 93 | | Moirai | [Moirai](https://github.com/moirai-lang/moirai-kt) | Kotlin | JVM's GC | MIT | A scripting language that calculates the worst-case execution time (WCET) before executing each script. Optimized for multi-tenant microservices and serverless applications. | 94 | | Mond | [Mond](https://github.com/Rohansi/Mond/) | C# | CLR's GC | MIT | A dynamically typed scripting language with generators, async, remote debugging, and a binding API. | 95 | | Never | [Never](https://github.com/never-lang/never) | C | Tracing | MIT | A statically typed functional programming language. | 96 | | Nickel | [Nickel](https://nickel-lang.org/) | Rust | Ref. counting | MIT | A configuration language with gradual typing and contracts. [Python bindings](https://github.com/tweag/nickel/tree/master/pyckel). | 97 | | Pascal | [Pascal Script](http://www.remobjects.com/ps.aspx) | Object Pascal | None (manual MM) | modified zlib/libpng-License with mandatory attribution | Statically typed. Implements "most of Object Pascal". Can't define new classes. | 98 | | Pawn | [Pawn](http://www.compuphase.com/pawn/pawn.htm) | C | None (no heap allocation) | Apache-2.0 with a clause to explicitly permit static linking | A curly-brace language with a small-footprint VM. Represents data as 4/8-byte "cells". Compiles to CPU-specific bytecode. [More](https://wiki.alliedmods.net/Pawn_Tutorial#Language_Paradigms). | 99 | | Perl | [Perl](https://www.perl.org/) | C | Ref. counting | Artistic-2.0 or GPL-3.0 | [Embedding Perl in Another Application](https://perldoc.perl.org/perlembed) | 100 | | PHP | [ephp](https://github.com/bragful/ephp) | Erlang | None (no collection inside interpreter state) | LGPL-2.1-or-later | Implements a subset of PHP 5.5. | 101 | | PHP | [PH7](https://github.com/symisc/PH7) | C | Ref. counting | **Symisc Public License** or proprietary | Implements a subset of PHP 5.3 with some changes like native UTF-8 support. | 102 | | Pluto | [Pluto](https://github.com/PlutoLang/Pluto) | C++ | Tracing | MIT | A superset of Lua 5.4 (outside of incompatibilies caused by new syntax). Adds syntax like `!=`, `break`, and string interpolation; expands the standard library; somewhat improves performance. | 103 | | pocketlang | [pocketlang](https://github.com/ThakeeNathees/pocketlang) | C | Tracing | MIT | A small language syntactically similar to Ruby. [Embedding examples](https://github.com/ThakeeNathees/pocketlang/tree/master/tests/native/). [Performance comparison](https://github.com/ThakeeNathees/pocketlang#performance). | 104 | | Prolog | [Erlog](https://github.com/rvirding/erlog) | Erlang | None () | Apache-2.0 | Interprets a subset of standard Prolog. | 105 | | Prolog | [Golog](https://github.com/mndrix/golog) | Go | Go's GC | MIT | Implements a subset of standard Prolog. | 106 | | Python | [CircuitPython](https://github.com/adafruit/circuitpython) | C | Tracing | MIT | A fork of MicroPython, designed for API uniformity across many microcontrollers. | 107 | | Python | [gpython](https://github.com/go-python/gpython) | Go | Go's GC | BSD-3-Clause | Implements a subset of Python 3.4. | 108 | | Python | [GraalPy](https://github.com/oracle/graalpython) | C, Java | JVM's GC | UPL-1.0 | Implements Python 3 for GraalVM (HotSpot JVM) using the Truffle framework. | 109 | | Python | [Jython](http://www.jython.org/) | Java | JVM's GC | PSFL (BSD-like) | An implementation of Python 2 for the JVM. | 110 | | Python | [MicroPython](https://github.com/micropython/micropython) | C | Tracing | MIT | Implements Python 3.4 syntax and some of the core datatypes. | 111 | | Python | [PikaPython](https://github.com/pikasTech/PikaPython) | C | Ref. counting | MIT | Implements a variant of Python 3. The degree of compatibility with Python seems to be undocumented. Runs in as little as 4 KiB of RAM. Targets microcontrollers and Linux. | 112 | | Python | [pocketpy](https://github.com/blueloveTH/pocketpy) | C++ | Tracing | MIT | Implements a subset of Python 3 (with [some differences](https://pocketpy.dev/features/differences/#different-behaviors)) in a single C++17 header file. | 113 | | Python | [Python](https://www.python.org/) | C | Ref. counting + cycle-detecting tracing GC | PSFL (BSD-like) | ["Embedding Python in Another Application"](https://docs.python.org/3/extending/embedding.html). | 114 | | QuakeC | [gmqcc/qcvm](https://github.com/graphitemaster/gmqcc) | C++ | None (no dynamic memory allocation) | MIT | A QuakeC compiler and VM. | 115 | | Quirrel | [Quirrel](https://github.com/GaijinEntertainment/quirrel) | C++ | Ref. counting | MIT | A fork of Squirrel with [new features](https://quirrel.io/doc/reference/diff_from_original.html). | 116 | | Rebol | [Rebol](https://github.com/Oldes/Rebol3) | C | Tracing | Apache-2.0 | Relative Expression Based Object Language | 117 | | Red | [Red](https://github.com/red/red) | Rebol, Red, Red/System | Tracing | BSD-3-Clause, BSL-1.0 | A descendant of Rebol. Embeddable via [libRed](https://github.com/red/docs/blob/master/en/libred.adoc). Features a cross-platform native GUI system. Intended to have low memory usage. | 118 | | Rexx | [NetRexx](http://www.netrexx.org/) | Java | JVM's GC | ICU (BSD-like) | | 119 | | Rexx | [ooRexx](http://www.oorexx.org/) | C++ | Tracing | CPL | Implements Rexx extended with objects. | 120 | | Rhai | [Rhai](https://github.com/jonathandturner/rhai) | Rust | None (Rust-style lifetimes) | MIT or Apache-2.0 | An embedded scripting language for Rust inspired by ChaiScript. | 121 | | Ring | [Ring](https://github.com/ring-lang/ring) | C | Tracing | MIT | An embeddable applications programming language with a large standard library and GIL-less multithreading. | 122 | | Ruby | [JRuby](http://www.jruby.org/) | Java | JVM's GC | Choice of EPL, GPL, and LGPL | An implementation of Ruby on the JVM. | 123 | | Ruby | [mruby](https://github.com/mruby/mruby) | C | Tracing | MIT | A lightweight implementation of Ruby. Has a compile-time package manager. | 124 | | Ruby | [mruby/c](https://github.com/mrubyc/mrubyc) | C | Ref. counting | BSD-3-Clause | An even smaller implementation of Ruby for microcontrollers with limited memory. | 125 | | Ruby | [Ruby](https://www.ruby-lang.org/en/) | C | Tracing | Choice of BSD-2-Clause, Ruby license, GPL-2.0 | An embeddable object-oriented scripting language. [Running Ruby in C](https://silverhammermba.github.io/emberb/embed/). | 126 | | Ruby | [TruffleRuby](https://github.com/oracle/truffleruby) | C, Java | JVM's GC | UPL-1.0 | Implements Ruby for GraalVM (HotSpot JVM) using Truffle. | 127 | | Rune | [Rune](https://github.com/rune-rs/rune) | Rust | Ref. counting | MIT or Apache-2.0 | An embeddable dynamic programming language. Asynchronous-first and [const-evaluation](https://rune-rs.github.io/#const-evaluation). | 128 | | Scheme | [Animula](https://gitlab.com/hardenedlinux/animula) | C | Tracing | Compiler: **GPL-3.0-or-later**, VM: LGPL-3.0-or-later | An optimizing compiler and VM for embedded systems. R7RS. | 129 | | Scheme | [Chibi Scheme](https://github.com/ashinn/chibi-scheme) | C | Tracing | BSD-3-Clause | Implements R7RS small. | 130 | | Scheme | [CHICKEN Scheme](https://call-cc.org/) | C | Tracing | BSD-3-Clause | Implements R5RS (with some [changes](http://wiki.call-cc.org/man/4/Supported%20language)). R7RS support is a work in progress. See [examples of embedding CHICKEN](https://wiki.call-cc.org/embedding). | 131 | | Scheme | [GNU Guile](https://www.gnu.org/software/guile/) | C | [Boehm](https://www.gnu.org/software/guile/manual/html_node/Conservative-GC.html) | LGPL-3.0-or-later | ["Guile mostly implements R6RS."](https://www.gnu.org/software/guile/manual/guile.html#R6RS-Support) | 132 | | Scheme | [Kawa](https://www.gnu.org/software/kawa/) | Java | JVM's GC | MIT | R7RS. Supports the javax.script API. [Evaluating Scheme expressions from Java](https://www.gnu.org/software/kawa/Evaluating-Scheme-expressions-from-Java.html). | 133 | | Scheme | [s7](https://ccrma.stanford.edu/software/snd/snd/s7.html) | C | Tracing | BSD-3-Clause | Implements a subset of R5RS/R7RS. Descended from TinyScheme. | 134 | | Scheme | [Steel](https://github.com/mattwparas/steel) | Rust | Ref. counting + tracing GC | Apache-2.0 or MIT | Aims for eventual R5RS and R7RS language compliance, with extensions inspired by Racket. | 135 | | Scheme | [TinyScheme](http://tinyscheme.sourceforge.net/) | C | Tracing? | BSD-3-Clause | Implements a subset of R5RS. | 136 | | SGScript | [SGScript](https://github.com/snake5/sgscript) | C | Ref. counting + tracing CG | MIT | [Features](http://www.sgscript.org/pages/advdocs/sgscript.docs.htm#Why-SGScript) include a built-in data serialization format, coroutines, class-based OOP, sandboxed evaluation, a built-in debugger and profiler. | 137 | | shell | [sh](https://github.com/mvdan/sh) | Go | Go's GC | MIT | Implements POSIX shell, Bash, and mksh in pure Go. There are caveats with compatibility. See the [readme](https://github.com/mvdan/sh#caveats) and issues like [mvdan/sh#221](https://github.com/mvdan/sh/issues/221). | 138 | | Shine | [Shine](https://github.com/richardhundt/shine) | C | Tracing | MIT | A language based on Lua with additional safety and expressiveness features implemented as a fork of LuaJIT. | 139 | | simpleeval | [simpleeval](https://github.com/danthedeckie/simpleeval) | Python | Python's GC | MIT | Evaluates expressions in a subset of Python. | 140 | | Snek | [Snek](https://github.com/keith-packard/snek) | C | Tracing | **GPL-3.0-or-later** | A Python-inspired language. Targets "processors too small to run MicroPython". | 141 | | SquiLu | [SquiLu](https://github.com/mingodad/squilu) | C++ | Ref. counting | MIT, some extensions LGPL or GPL | A fork of [Squirrel](http://squirrel-lang.org/). Changes the syntax to accept a subset of JavaScript and C/C++. Implements Lua's features like string pattern matching and global table manipulation functions. It adds extensions for database access (SQLite3, MySQL, PostgreSQL), sockets, and other features. | 142 | | Squirrel | [Squirrel](http://squirrel-lang.org/) | C++ | Ref. counting | MIT | A language inspired by Lua and JavaScript/Python. Has a Lua-like C++ API. Differentiates itself from Lua with the use of reference counting in place of Lua's tracing GC, a curly-brace syntax, built-in class-based OOP, and zero-indexed arrays. | 143 | | Starlark | [Starlark (Go)](https://github.com/google/starlark-go/) | Go | Go's GC | BSD-3-Clause | A small dialect of Python for configuration. Not Turing-complete. Untrusted code: can't access the file system and network, can use up memory and CPU to perform a DoS attack. [Spec](https://github.com/bazelbuild/starlark). [Python bindings](https://github.com/caketop/python-starlark-go). | 144 | | Starlark | [Starlark (Java)](https://github.com/bazelbuild/bazel/tree/master/src/main/java/net/starlark/java) | Java | JVM's GC | Apache-2.0 | Starlark for the JVM. The original implementation. | 145 | | Starlark | [Starlark (Rust)](https://github.com/facebookexperimental/starlark-rust) | Rust | ? | Apache-2.0 | Starlark in Rust. [Python bindings](https://github.com/inducer/starlark-pyo3). | 146 | | Tcl | [Jim Tcl](http://jim.tcl-lang.org/) | C | Tracing | BSD-2-Clause | Largely compatible with Tcl 8.5 with its own additions. | 147 | | Tcl | [JTcl](https://github.com/jtcl-project/jtcl) | Java | Ref. counting | Various BSD-like | Tcl 8.4 with some 8.5 features for the JVM. | 148 | | Tcl | [Molt](https://github.com/wduquette/molt) | Rust | Ref. counting | BSD-3-Clause | A minimal Tcl implementation designed for Rust applications and libraries. | 149 | | Tcl | [Picol](https://chiselapp.com/user/dbohdan/repository/picol/) | C | None (no reference support) | BSD-2-Clause | A header-only library interpreter for a limited dialect of Tcl. | 150 | | Tcl | [Tcl](http://tcl-lang.org/) | C | Ref. counting | Tcl license (BSD-like) | An embeddable general-purpose scripting language with a rich C API. Includes a cross-platform GUI toolkit called [Tk](https://wiki.tcl-lang.org/477). See ["How to embed Tcl in C applications"](https://wiki.tcl-lang.org/2074). | 151 | | Toy | [Toy](https://github.com/Ratstail91/Toy) | C | Ref. counting | Zlib | Has an optional type system. [Embedding Toy](https://toylang.com/deep-dive/embedding-toy). | 152 | | Umka | [Umka](https://github.com/vtereshkov/umka-lang) | C | Ref. counting | BSD-2-Clause | Statically typed. | 153 | | Wirefilter | [Wirefilter](https://github.com/cloudflare/wirefilter) | Rust | None (no dynamic memory allocation) | MIT | An expression language for Wireshark-like filters. | 154 | | Wren | [Wren](https://github.com/munificent/wren) | C | Tracing | MIT | A small class-based performance-oriented scripting language. [Performance comparison](https://wren.io/performance.html). | 155 | | ZetScript | [ZetScript](https://zetscript.org) | C++ | Ref. counting | MIT | Comes with an API for C++ interop. | 156 | | zygomys | [zygomys](https://github.com/glycerine/zygomys) | Go | Go's GC | BSD-2-Clause | An embedded Lisp for Go. Inspired by Clojure, but more oriented towards imperative programming. Has an infix syntax layer that looks like a subset of Go. | 157 | 158 | ## See also 159 | 160 | - [cwal: Scripting Engine Without A Language](https://fossil.wanderinghorse.net/r/cwal/home). 161 | - [Game scripting languages benchmarked](https://github.com/r-lyeh/scriptorium). 162 | - [Languages that compile to JavaScript](https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS). 163 | - [Languages that compile to Lua](https://github.com/hengestone/lua-languages). 164 | - [miniKanren](http://minikanren.org/#implementations) logic programming language implementations. 165 | - [sol](https://github.com/ThePhD/sol2) — C++ bindings for Lua. 166 | 167 | ## Contributing 168 | 169 | Your contributions are welcome! See [CONTRIBUTING](https://github.com/dbohdan/embedded-scripting-languages/blob/master/CONTRIBUTING.md). 170 | 171 | ## License 172 | 173 | [](https://creativecommons.org/publicdomain/zero/1.0/) 174 | 175 | ## Disclosure 176 | 177 | The curator of this document maintains Picol and has contributed to Jim Tcl. 178 | -------------------------------------------------------------------------------- /README.md.njk: -------------------------------------------------------------------------------- 1 | # Embedded scripting languages 2 | 3 | The following is a list of reasonably mature or actively developed open source [embedded scripting languages](https://en.wikipedia.org/wiki/Scripting_language) to use in your application. Stretching the definition of a scripting language, it also includes [Datalog](https://en.wikipedia.org/wiki/Datalog) implementations. Items with a strong copyleft license (like the GNU GPL) that will apply to the rest of your code are **emphasized** as a warning. 4 | 5 | To sort and filter the list interactively, visit the [webpage](https://dbohdan.github.io/embedded-scripting-languages/). To contribute, go to the [GitHub project](https://github.com/dbohdan/embedded-scripting-languages). 6 | 7 | ## Contents 8 | 9 | {{ toc }} 10 | 11 | ## List 12 | 13 | | Language | Project name/link | Implementated in | GC | License | Notes | 14 | |----------|-------------------|------------------|----|---------|-------| 15 | {% for proj in projects | sort(false, false, "lang") %} 16 | | {{ proj.lang }} | [{{ proj.name }}]({{ proj.url }}) | {{ proj.impl_in }} | {{ proj.gc }} | {{ proj.license }} | {{ proj.notes | safe }} | 17 | {% endfor %} 18 | 19 | ## See also 20 | 21 | - [cwal: Scripting Engine Without A Language](https://fossil.wanderinghorse.net/r/cwal/home). 22 | - [Game scripting languages benchmarked](https://github.com/r-lyeh/scriptorium). 23 | - [Languages that compile to JavaScript](https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS). 24 | - [Languages that compile to Lua](https://github.com/hengestone/lua-languages). 25 | - [miniKanren](http://minikanren.org/#implementations) logic programming language implementations. 26 | - [sol](https://github.com/ThePhD/sol2) — C++ bindings for Lua. 27 | 28 | ## Contributing 29 | 30 | Your contributions are welcome! See [CONTRIBUTING](https://github.com/dbohdan/embedded-scripting-languages/blob/master/CONTRIBUTING.md). 31 | 32 | ## License 33 | 34 | [](https://creativecommons.org/publicdomain/zero/1.0/) 35 | 36 | ## Disclosure 37 | 38 | The curator of this document maintains Picol and has contributed to Jim Tcl. 39 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: minima 2 | 3 | title: 'Embedded scripting languages' 4 | description: 'A list of embedded scripting languages' 5 | 6 | defaults: 7 | - scope: 8 | path: "" 9 | values: 10 | title: "" 11 | layout: home 12 | -------------------------------------------------------------------------------- /_includes/custom-head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dbohdan/embedded-scripting-languages/13cf30d62feeaac68748c9c094380cca89c69c19/_includes/footer.html -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | {%- seo -%} 6 | 7 | {%- feed_meta -%} 8 | {%- if jekyll.environment == 'production' and site.google_analytics -%} 9 | {%- include google-analytics.html -%} 10 | {%- endif -%} 11 | {%- include custom-head.html -%} 12 | 13 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dbohdan/embedded-scripting-languages/13cf30d62feeaac68748c9c094380cca89c69c19/_includes/header.html -------------------------------------------------------------------------------- /data/projects.toml: -------------------------------------------------------------------------------- 1 | [AbcDatalog] 2 | url = "http://abcdatalog.seas.harvard.edu/" 3 | lang = "Datalog" 4 | impl_in = "Java" 5 | gc = "JVM's GC" 6 | license = "BSD-3-Clause" 7 | notes = "Implements Datalog." 8 | 9 | [AngelScript] 10 | url = "http://www.angelcode.com/angelscript/" 11 | lang = "AngelScript" 12 | impl_in = "C++" 13 | gc = "Ref. counting + cycle-detecting tracing GC" 14 | license = "Zlib" 15 | notes = "A statically typed curly brace language resembling C++ itself." 16 | 17 | [Animula] 18 | url = "https://gitlab.com/hardenedlinux/animula" 19 | lang = "Scheme" 20 | impl_in = "C" 21 | gc = "Tracing" 22 | license = "Compiler: **GPL-3.0-or-later**, VM: LGPL-3.0-or-later" 23 | notes = "An optimizing compiler and VM for embedded systems. R7RS." 24 | 25 | [Anko] 26 | url = "https://github.com/mattn/anko/" 27 | lang = "Anko" 28 | impl_in = "Go" 29 | gc = "Go's GC" 30 | license = "MIT" 31 | notes = "Scriptable interpreter with syntax similar to Go." 32 | 33 | [ArkScript] 34 | url = "https://github.com/SuperFola/Ark" 35 | lang = "ArkScript" 36 | impl_in = "C++" 37 | gc = "None (resource release is destruction + optional manual MM)" 38 | license = "MPL-2.0" 39 | notes = "A small functional Lisp-like programming language. Separate bytecode compiler and VM." 40 | 41 | [Asp] 42 | url = "https://www.asplang.org/" 43 | lang = "Asp" 44 | impl_in = "C" 45 | gc = "Ref. counting inside a static memory area" 46 | license = "MIT" 47 | notes = "Python-like. Targets embedded systems. Allows making blocking calls in scripts without blocking the main application. Runs compiled bytecode. Not related to Microsoft's Active Server Pages." 48 | 49 | [Atlast] 50 | url = "https://www.fourmilab.ch/atlast/" 51 | lang = "Forth" 52 | impl_in = "C" 53 | gc = "None (manual MM)" 54 | license = "Public domain" 55 | notes = "A dialect of Forth originally developed at Autodesk." 56 | 57 | [BeanShell] 58 | url = "https://github.com/beanshell/beanshell/" 59 | lang = "Java" 60 | impl_in = "Java" 61 | gc = "JVM's GC" 62 | license = "Apache-2.0" 63 | notes = "An small, embeddable Java source code interpreter. Understands Java code with certain extensions like method closures." 64 | 65 | [Berry] 66 | url = "https://github.com/berry-lang/berry" 67 | lang = "Berry" 68 | impl_in = "C" 69 | gc = "Tracing" 70 | license = "MIT" 71 | notes = "Lightweight dynamically-typed embedded scripting language designed for lower-performance devices with limited memory." 72 | 73 | [Boron] 74 | url = "http://urlan.sourceforge.net/boron/" 75 | lang = "Boron" 76 | impl_in = "C" 77 | gc = "Tracing" 78 | license = "LGPL-3.0-or-later" 79 | notes = "An embeddable scripting language similar to Rebol." 80 | 81 | [Cascalog] 82 | url = "https://github.com/nathanmarz/cascalog" 83 | lang = "Datalog" 84 | impl_in = "Clojure" 85 | gc = "JVM's GC" 86 | license = "Apache-2.0" 87 | notes = "Implements Datalog." 88 | 89 | ["cel-go"] 90 | url = "https://github.com/google/cel-go" 91 | lang = "Common Expression Language (CEL)" 92 | impl_in = "Go" 93 | gc = "Go's GC" 94 | license = "Apache-2.0" 95 | notes = "Rust implementation of CEL, a non-Turing-complete expression language." 96 | 97 | ["cel-python"] 98 | url = "https://github.com/cloud-custodian/cel-python" 99 | lang = "Common Expression Language (CEL)" 100 | impl_in = "Python" 101 | gc = "Python's GC" 102 | license = "Apache-2.0" 103 | notes = "A non-Turing-complete expression language." 104 | 105 | ["cel-rust"] 106 | url = "https://github.com/clarkmcc/cel-rust" 107 | lang = "Common Expression Language (CEL)" 108 | impl_in = "Rust" 109 | gc = "None" 110 | license = "MIT" 111 | notes = "A non-Turing-complete expression language." 112 | 113 | [CircuitPython] 114 | url = "https://github.com/adafruit/circuitpython" 115 | lang = "Python" 116 | impl_in = "C" 117 | gc = "Tracing" 118 | license = "MIT" 119 | notes = "A fork of MicroPython, designed for API uniformity across many microcontrollers." 120 | 121 | [ChaiScript] 122 | url = "http://chaiscript.com/" 123 | lang = "ChaiScript" 124 | impl_in = "C++" 125 | gc = "Ref. counting" 126 | license = "BSD-3-Clause" 127 | notes = "A header-only C++14 interpreter library." 128 | 129 | ["Chibi Scheme"] 130 | url = "https://github.com/ashinn/chibi-scheme" 131 | lang = "Scheme" 132 | impl_in = "C" 133 | gc = "Tracing" 134 | license = "BSD-3-Clause" 135 | notes = "Implements R7RS small." 136 | 137 | ["CHICKEN Scheme"] 138 | url = "https://call-cc.org/" 139 | lang = "Scheme" 140 | impl_in = "C" 141 | gc = "Tracing" 142 | license = "BSD-3-Clause" 143 | notes = "Implements R5RS (with some [changes](http://wiki.call-cc.org/man/4/Supported%20language)). R7RS support is a work in progress. See [examples of embedding CHICKEN](https://wiki.call-cc.org/embedding)." 144 | 145 | [Clasp] 146 | url = "https://github.com/drmeister/clasp" 147 | lang = "Common Lisp" 148 | impl_in = "Common Lisp, C++" 149 | gc = "MPS GC (Boehm-Weiser also supported)" 150 | license = "LGPL-2.0-or-later" 151 | notes = "Full Common Lisp implementation well-integrated with C++, using LLVM for code generation to integrate closely with C++ applications or libraries." 152 | 153 | [daScript] 154 | url = "https://dascript.org/" 155 | lang = "daScript" 156 | impl_in = "C++" 157 | gc = "None (region-based + manual MM?)" 158 | license = "BSD-3-Clause" 159 | notes = "A statically-typed [performance-oriented](https://dascript.org/#performance) scripting language." 160 | 161 | ["Datalog (c-cube)"] 162 | url = "https://github.com/c-cube/datalog" 163 | lang = "Datalog" 164 | impl_in = "OCaml" 165 | gc = "OCaml's GC" 166 | license = "BSD-2-Clause" 167 | notes = "Implements Datalog." 168 | 169 | ["Datalog (fogfish)"] 170 | url = "https://github.com/fogfish/datalog" 171 | lang = "Datalog" 172 | impl_in = "Erlang" 173 | gc = "None (no collection inside interpreter state)" 174 | license = "Apache-2.0" 175 | notes = "Implements Datalog." 176 | 177 | ["Datalog (MITRE Corporation)"] 178 | url = "http://datalog.sourceforge.net/" 179 | lang = "Datalog" 180 | impl_in = "C" 181 | gc = "Tracing (Lua's GC)" 182 | license = "LGPL-2.0-or-later" 183 | notes = "Implements Datalog. It is implemented on top of Lua 5.3 and can be extended with Lua functions." 184 | 185 | [Dhall] 186 | url = "https://dhall-lang.org/" 187 | lang = "Dhall" 188 | impl_in = "Haskell" 189 | gc = "Haskell's GC" 190 | license = "BSD-3-Clause" 191 | notes = "A statically-typed functional configuration language. Not Turing-complete. Untrusted code: can't access the file system, can fetch Dhall libraries over HTTP(S) from static URLs (but libraries aren't allowed to access your data), can use up memory and CPU time for a DoS attack. Has a work-in-progress Clojure and Ruby implementation." 192 | 193 | [Duktape] 194 | url = "http://duktape.org/" 195 | lang = "JavaScript" 196 | impl_in = "C" 197 | gc = "Ref. counting + cycle-detecting tracing GC" 198 | license = "MIT" 199 | notes = "Implements JavaScript E5/E5.1." 200 | 201 | [DWScript] 202 | url = "https://bitbucket.org/egrange/dwscript/" 203 | lang = "DWScript" 204 | impl_in = "Object Pascal (Delphi 2009 or later)" 205 | gc = "Ref. counting + cycle-detecting tracing GC" 206 | license = "MPL-1.1, GPL-3.0 (JavaScript code generator)" 207 | notes = "[Description](https://www.delphitools.info/dwscript). A statically typed Delphi/Free Pascal-like language. Can compile to JavaScript." 208 | 209 | [Dyon] 210 | url = "https://github.com/pistondevelopers/dyon" 211 | lang = "Dyon" 212 | impl_in = "Rust" 213 | gc = "None (Rust-style [lifetimes](http://www.piston.rs/dyon-tutorial/lifetimes.html))" 214 | license = "Apache-2.0 or MIT" 215 | notes = "Features optional, optimistic (succeed-by-default) static type checking." 216 | 217 | ["Embeddable Common Lisp"] 218 | url = "https://gitlab.com/embeddable-common-lisp/ecl" 219 | lang = "Common Lisp" 220 | impl_in = "Common Lisp, C" 221 | gc = "Boehm-Weiser GC" 222 | license = "LGPL-2.0-or-later" 223 | notes = "Full Common Lisp implementation, available as a shared library `libecl.so` embeddable in any C, C++ or other application." 224 | 225 | [ephp] 226 | url = "https://github.com/bragful/ephp" 227 | lang = "PHP" 228 | impl_in = "Erlang" 229 | gc = "None (no collection inside interpreter state)" 230 | license = "LGPL-2.1-or-later" 231 | notes = "Implements a subset of PHP 5.5." 232 | 233 | [Erlog] 234 | url = "https://github.com/rvirding/erlog" 235 | lang = "Prolog" 236 | impl_in = "Erlang" 237 | gc = "None ()" 238 | license = "Apache-2.0" 239 | notes = "Interprets a subset of standard Prolog." 240 | 241 | [Espruino] 242 | url = "https://github.com/espruino/Espruino" 243 | lang = "JavaScript" 244 | impl_in = "C" 245 | gc = "Tracing" 246 | license = "MPL-2.0" 247 | notes = "Implements a subset of JavaScript ES5 in a way suitable for embedded hardware with 8+ KiB RAM." 248 | 249 | [Expr] 250 | url = "https://github.com/antonmedv/expr" 251 | lang = "Expr" 252 | impl_in = "Go" 253 | gc = "Go's GC" 254 | license = "MIT" 255 | notes = "Compiles and evaluates statically-typed expressions." 256 | 257 | [Falcon] 258 | url = "http://falconpl.org/" 259 | lang = "Falcon" 260 | impl_in = "C++" 261 | gc = "Tracing" 262 | license = "**GPL-2.0** or custom" 263 | notes = "The GC is pluggable." 264 | 265 | [fe] 266 | url = "https://github.com/rxi/fe" 267 | lang = "fe" 268 | impl_in = "C" 269 | gc = "Tracing" 270 | license = "MIT" 271 | notes = "Uses a fixed-size memory region. No `malloc`." 272 | 273 | [FTH] 274 | url = "http://fth.sourceforge.net" 275 | lang = "Forth" 276 | impl_in = "C" 277 | gc = "Tracing" 278 | license = "BSD-2-Clause" 279 | notes = "A dialect of Forth with objects, hashes, regular expressions, and other extensions." 280 | 281 | ["GameMonkey Script"] 282 | url = "http://www.gmscript.com/" 283 | lang = "GameMonkey Script" 284 | impl_in = "C++" 285 | gc = "Tracing" 286 | license = "MIT" 287 | notes = "Comes with C bindings. Similar to Lua, multithreaded." 288 | 289 | [Gentee] 290 | url = "https://github.com/gentee/gentee/" 291 | lang = "Gentee" 292 | impl_in = "Go" 293 | gc = "Go's GC" 294 | license = "MIT" 295 | notes = "Statically typed." 296 | 297 | [gluon] 298 | url = "https://github.com/gluon-lang/gluon" 299 | lang = "gluon" 300 | impl_in = "Rust" 301 | gc = "Tracing" 302 | license = "MIT" 303 | notes = "Statically typed. Inspired by Lua, Haskell, and OCaml. Each executing gluon thread gets a separate heap." 304 | 305 | [Goja] 306 | url = "https://github.com/dop251/goja" 307 | lang = "JavaScript" 308 | impl_in = "Go" 309 | gc = "Go's GC" 310 | license = "MIT" 311 | notes = "Implements ECMAScript 5.1. Better standard compliance and performance than otto." 312 | 313 | [Golog] 314 | url = "https://github.com/mndrix/golog" 315 | lang = "Prolog" 316 | impl_in = "Go" 317 | gc = "Go's GC" 318 | license = "MIT" 319 | notes = "Implements a subset of standard Prolog." 320 | 321 | [Go-Lua] 322 | url = "https://github.com/Shopify/go-lua" 323 | lang = "Lua" 324 | impl_in = "Go" 325 | gc = "Go's GC" 326 | license = "MIT" 327 | notes = "Implements a subset of Lua 5.2." 328 | 329 | [GopherLua] 330 | url = "https://github.com/yuin/gopher-lua" 331 | lang = "Lua" 332 | impl_in = "Go" 333 | gc = "Go's GC" 334 | license = "MIT" 335 | notes = "Implements Lua 5.1 with the added support for Go's channels. Lacks the debug hooks and several functions from the C version." 336 | 337 | [gpython] 338 | url = "https://github.com/go-python/gpython" 339 | lang = "Python" 340 | impl_in = "Go" 341 | gc = "Go's GC" 342 | license = "BSD-3-Clause" 343 | notes = "Implements a subset of Python 3.4." 344 | 345 | [GraalJS] 346 | url = "https://github.com/oracle/graaljs" 347 | lang = "JavaScript" 348 | impl_in = "C++, C, Java" 349 | gc = "JVM's GC" 350 | license = "UPL-1.0" 351 | notes = "Implements ECMAScript 2022 for GraalVM (HotSpot JVM) using the Truffle framework." 352 | 353 | 354 | [GraalPy] 355 | url = "https://github.com/oracle/graalpython" 356 | lang = "Python" 357 | impl_in = "C, Java" 358 | gc = "JVM's GC" 359 | license = "UPL-1.0" 360 | notes = "Implements Python 3 for GraalVM (HotSpot JVM) using the Truffle framework." 361 | 362 | 363 | [Gravity] 364 | url = "https://github.com/marcobambini/gravity" 365 | lang = "Gravity" 366 | impl_in = "C" 367 | gc = "Tracing" 368 | license = "MIT" 369 | notes = "A class-based concurrent scripting language with a Swift-like syntax." 370 | 371 | [Groovy] 372 | url = "http://groovy-lang.org/" 373 | lang = "Groovy" 374 | impl_in = "Java" 375 | gc = "JVM's GC" 376 | license = "Apache-2.0" 377 | notes = "A scripting language for the JVM. A large subset of Java is valid Groovy. [Integrating Groovy into applications](http://groovy-lang.org/integrating.html)." 378 | 379 | ["GNU Guile"] 380 | url = "https://www.gnu.org/software/guile/" 381 | lang = "Scheme" 382 | impl_in = "C" 383 | gc = "[Boehm](https://www.gnu.org/software/guile/manual/html_node/Conservative-GC.html)" 384 | license = "LGPL-3.0-or-later" 385 | notes = "[\"Guile mostly implements R6RS.\"](https://www.gnu.org/software/guile/manual/guile.html#R6RS-Support)" 386 | 387 | [HAC] 388 | url = "https://hacadacompiler.sourceforge.io/" 389 | lang = "Ada" 390 | impl_in = "Ada" 391 | gc = "None (stack only)" 392 | license = "MIT" 393 | notes = "HAC implements a subset of the Ada language. Thus, it can share sources with the embedding application." 394 | 395 | [HashLink] 396 | url = "https://hashlink.haxe.org/" 397 | lang = "Haxe" 398 | impl_in = "C" 399 | gc = "Tracing (lazy sweep)" 400 | license = "MIT" 401 | notes = "A bytecode interpreter and a baseline JIT compiler (x86/x86\\_64 only) for [Haxe](https://haxe.org/)." 402 | 403 | [Interpreter] 404 | url = "https://github.com/Tyill/interpreter" 405 | lang = "Interpreter" 406 | impl_in = "C++" 407 | gc = "None" 408 | license = "MIT" 409 | notes = "A small interpreter in one header and one source code file with optional extensions (arithmetic operations, containers, filesystem, and others)." 410 | 411 | [Io] 412 | url = "https://github.com/stevedekorte/io" 413 | lang = "Io" 414 | impl_in = "C" 415 | gc = "Tracing" 416 | license = "BSD-3-Clause" 417 | notes = "A prototype-based OO language." 418 | 419 | [Janet] 420 | url = "https://janet-lang.org/" 421 | lang = "Janet" 422 | impl_in = "C" 423 | gc = "Tracing" 424 | license = "MIT" 425 | notes = "A functional and imperative language with a Lisp syntax." 426 | 427 | [JerryScript] 428 | url = "https://github.com/jerryscript-project/jerryscript" 429 | lang = "JavaScript" 430 | impl_in = "C" 431 | gc = "Tracing" 432 | license = "Apache-2.0" 433 | notes = "A full ECMAScript 5.1 interpreter written in C99 and optimized for low memory consumption. Uses CMake." 434 | 435 | ["Jim Tcl"] 436 | url = "http://jim.tcl-lang.org/" 437 | lang = "Tcl" 438 | impl_in = "C" 439 | gc = "Tracing" 440 | license = "BSD-2-Clause" 441 | notes = "Largely compatible with Tcl 8.5 with its own additions." 442 | 443 | [Jinx] 444 | url = "https://jamesboer.github.io/Jinx/" 445 | lang = "Jinx" 446 | impl_in = "C++17" 447 | gc = "Ref. counting" 448 | license = "MIT" 449 | notes = "Designed for use in realtime applications such as video games." 450 | 451 | [JRuby] 452 | url = "http://www.jruby.org/" 453 | lang = "Ruby" 454 | impl_in = "Java" 455 | gc = "JVM's GC" 456 | license = "Choice of EPL, GPL, and LGPL" 457 | notes = "An implementation of Ruby on the JVM." 458 | 459 | [jsish] 460 | url = "https://github.com/pcmacdon/jsish" 461 | lang = "JavaScript" 462 | impl_in = "C" 463 | gc = "Ref. counting" 464 | license = "MIT" 465 | notes = "A JavaScript ES 5.2+ interpreter. Internally structured after Tcl with an extensive C API. Features include subinterpreters, introspection, SQLite bindings, and a web framework with WebSocket support. The code is valid C and C++." 466 | 467 | [Jsonnet] 468 | url = "https://jsonnet.org/" 469 | lang = "Jsonnet" 470 | impl_in = "C++" 471 | gc = "Tracing" 472 | license = "Apache-2.0" 473 | notes = "A functional configuration language that extends JSON. Untrusted code: can't access the file system or network, can use up memory and CPU time for a DoS attack. Has [bindings](https://jsonnet.org/ref/bindings.html) for C, C++, Go, Python, and other languages, as well as a separate native Go implementation." 474 | 475 | [JTcl] 476 | url = "https://github.com/jtcl-project/jtcl" 477 | lang = "Tcl" 478 | impl_in = "Java" 479 | gc = "Ref. counting" 480 | license = "Various BSD-like" 481 | notes = "Tcl 8.4 with some 8.5 features for the JVM." 482 | 483 | [Jython] 484 | url = "http://www.jython.org/" 485 | lang = "Python" 486 | impl_in = "Java" 487 | gc = "JVM's GC" 488 | license = "PSFL (BSD-like)" 489 | notes = "An implementation of Python 2 for the JVM." 490 | 491 | [Kawa] 492 | url = "https://www.gnu.org/software/kawa/" 493 | lang = "Scheme" 494 | impl_in = "Java" 495 | gc = "JVM's GC" 496 | license = "MIT" 497 | notes = "R7RS. Supports the javax.script API. [Evaluating Scheme expressions from Java](https://www.gnu.org/software/kawa/Evaluating-Scheme-expressions-from-Java.html)." 498 | 499 | [Ketos] 500 | url = "https://github.com/murarth/ketos" 501 | lang = "Ketos" 502 | impl_in = "Rust" 503 | gc = "None (no heap allocation)?" 504 | license = "Apache-2.0" 505 | notes = "A functional Lisp." 506 | 507 | [Libfawk] 508 | url = "http://repo.hu/projects/libfawk/" 509 | lang = "Awk, Basic, Pascal" 510 | impl_in = "C" 511 | gc = "Ref. counting" 512 | license = "BSD-3-Clause" 513 | notes = "A multi-language VM. Includes compilers for three languages: Fawk (Awk dialect), Fbas (Basic dialect), and Fpas (Pascal dialect)." 514 | 515 | [Libmawk] 516 | url = "http://repo.hu/projects/libmawk/" 517 | lang = "Awk" 518 | impl_in = "C" 519 | gc = "Ref. counting" 520 | license = "**GPL-2.0**" 521 | notes = "Implements Awk. A fork of mawk 1.3 restructured for embedding." 522 | 523 | [LIL] 524 | url = "http://runtimeterror.com/tech/lil/" 525 | lang = "LIL" 526 | impl_in = "C, Object Pascal (separate implementations)" 527 | gc = "None (no reference support)" 528 | license = "Zlib" 529 | notes = "A Tcl-like language incompatible with mainline Tcl." 530 | 531 | [Lily] 532 | url = "https://github.com/FascinatedBox/lily/" 533 | lang = "Lily" 534 | impl_in = "C" 535 | gc = "Ref. counting + tracing GC" 536 | license = "MIT" 537 | notes = "A language focused on expressiveness and safety." 538 | 539 | [ljs] 540 | url = "https://github.com/mingodad/ljs" 541 | lang = "ljs" 542 | impl_in = "C" 543 | gc = "Tracing" 544 | license = "MIT" 545 | notes = "Lua 5.3, Lua 5.1, and LuaJIT with a C/C++/Java/JavaScript syntax. Can convert Lua source code to ljs." 546 | 547 | [Lua] 548 | url = "http://lua.org/" 549 | lang = "Lua" 550 | impl_in = "C" 551 | gc = "Tracing" 552 | license = "MIT" 553 | notes = "The reference implementation of what is likely the world's most popular embedded scripting language. Allows you to precompile scripts to bytecode. Versions 5.1-5.3, which are the ones used today, are not fully compatible with each other." 554 | 555 | [LuaJ] 556 | url = "https://sourceforge.net/projects/luaj/" 557 | lang = "Lua" 558 | impl_in = "Java" 559 | gc = "JVM's GC" 560 | license = "MIT" 561 | notes = "A Lua 5.2 spec-compliant interpreter written in Java for JME and JSE. Complies Lua directly to JVM bytecode." 562 | 563 | [LuaJIT] 564 | url = "http://luajit.org/" 565 | lang = "Lua" 566 | impl_in = "C" 567 | gc = "Tracing" 568 | license = "MIT" 569 | notes = "Fully compatible with Lua 5.1. Has a built-in C FFI library. [Performance comparison](https://luajit.org/performance.html)." 570 | 571 | [Lua-ML] 572 | url = "https://github.com/lindig/lua-ml" 573 | lang = "Lua" 574 | impl_in = "OCaml" 575 | gc = "OCaml's GC" 576 | license = "BSD-2-Clause" 577 | notes = "Embeddable Lua 2.5 reimplementation that integrates with OCaml type and module system. It is possible to extend or even replace the standard library with custom modules." 578 | 579 | [Luau] 580 | url = "https://luau-lang.org/" 581 | lang = "Lua" 582 | impl_in = "C" 583 | gc = "Tracing" 584 | license = "MIT" 585 | notes = "Roblox [fork of Lua 5.1](https://luau-lang.org/why) as a scripting language for games to support a gradual type system as well as limiting the set of standard libraries exposed to the users and implements extra sandboxing features to be able to run unprivileged code. Whenever possible, Luau aims to be backwards-compatible with Lua 5.1 and at the same time to incorporate features from later revisions of Lua." 586 | 587 | [luerl] 588 | url = "https://github.com/rvirding/luerl" 589 | lang = "Lua" 590 | impl_in = "Erlang" 591 | gc = "Tracing" 592 | license = "Apache-2.0" 593 | notes = "An implementation of Lua 5.2 in pure Erlang with some features like `goto` absent." 594 | 595 | [MicroPython] 596 | url = "https://github.com/micropython/micropython" 597 | lang = "Python" 598 | impl_in = "C" 599 | gc = "Tracing" 600 | license = "MIT" 601 | notes = "Implements Python 3.4 syntax and some of the core datatypes." 602 | 603 | [Moirai] 604 | url = "https://github.com/moirai-lang/moirai-kt" 605 | lang = "Moirai" 606 | impl_in = "Kotlin" 607 | gc = "JVM's GC" 608 | license = "MIT" 609 | notes = "A scripting language that calculates the worst-case execution time (WCET) before executing each script. Optimized for multi-tenant microservices and serverless applications." 610 | 611 | [Molt] 612 | url = "https://github.com/wduquette/molt" 613 | lang = "Tcl" 614 | impl_in = "Rust" 615 | gc = "Ref. counting" 616 | license = "BSD-3-Clause" 617 | notes = "A minimal Tcl implementation designed for Rust applications and libraries." 618 | 619 | [Mond] 620 | url = "https://github.com/Rohansi/Mond/" 621 | lang = "Mond" 622 | impl_in = "C#" 623 | gc = "CLR's GC" 624 | license = "MIT" 625 | notes = "A dynamically typed scripting language with generators, async, remote debugging, and a binding API." 626 | 627 | [Mono] 628 | url = "http://www.mono-project.com/docs/advanced/embedding/scripting/" 629 | lang = "C#, other CLR languages" 630 | impl_in = "C" 631 | gc = "Tracing" 632 | license = "MIT and other" 633 | notes = "Implements the [CLR](https://en.wikipedia.org/wiki/Common_Language_Runtime)." 634 | 635 | [MoonSharp] 636 | url = "https://www.moonsharp.org/" 637 | lang = "Lua" 638 | impl_in = "C#" 639 | gc = "CLR's GC" 640 | license = "BSD-3-Clause and other" 641 | notes = "CLR Based Lua implementation that is 99% compatible with Lua 5.2" 642 | 643 | [mruby] 644 | url = "https://github.com/mruby/mruby" 645 | lang = "Ruby" 646 | impl_in = "C" 647 | gc = "Tracing" 648 | license = "MIT" 649 | notes = "A lightweight implementation of Ruby. Has a compile-time package manager." 650 | 651 | ["mruby/c"] 652 | url = "https://github.com/mrubyc/mrubyc" 653 | lang = "Ruby" 654 | impl_in = "C" 655 | gc = "Ref. counting" 656 | license = "BSD-3-Clause" 657 | notes = "An even smaller implementation of Ruby for microcontrollers with limited memory." 658 | 659 | [MuJS] 660 | url = "https://mujs.com/" 661 | lang = "JavaScript" 662 | impl_in = "C" 663 | gc = "Tracing" 664 | license = "ISC" 665 | notes = "Implements JavaScript (ES5). Has a similar C interface to Lua." 666 | 667 | [MY-BASIC] 668 | url = "https://github.com/paladin-t/my_basic" 669 | lang = "Basic" 670 | impl_in = "C" 671 | gc = "Ref. counting + cycle-detecting tracing GC" 672 | license = "MIT" 673 | notes = "A Basic dialect with prototype-based OOP." 674 | 675 | [Neko] 676 | url = "http://nekovm.org/" 677 | lang = "Haxe, others" 678 | impl_in = "C" 679 | gc = "Boehm" 680 | license = "MIT" 681 | notes = "The NekoVM is a target for several compilers, including [Haxe](http://haxe.org/)." 682 | 683 | [NetRexx] 684 | url = "http://www.netrexx.org/" 685 | lang = "Rexx" 686 | impl_in = "Java" 687 | gc = "JVM's GC" 688 | license = "ICU (BSD-like)" 689 | notes = "" 690 | 691 | [Never] 692 | url = "https://github.com/never-lang/never" 693 | lang = "Never" 694 | impl_in = "C" 695 | gc = "Tracing" 696 | license = "MIT" 697 | notes = "A statically typed functional programming language." 698 | 699 | [Nickel] 700 | url = "https://nickel-lang.org/" 701 | lang = "Nickel" 702 | impl_in = "Rust" 703 | gc = "Ref. counting" 704 | license = "MIT" 705 | notes = "A configuration language with gradual typing and contracts. [Python bindings](https://github.com/tweag/nickel/tree/master/pyckel)." 706 | 707 | [njs] 708 | url = "https://nginx.org/en/docs/njs/" 709 | lang = "JavaScript" 710 | impl_in = "C" 711 | gc = "None (no collection performed)" 712 | license = "BSD-2-Clause" 713 | notes = "Implements a subset of ES5.1 with some ES6 extensions." 714 | 715 | [ooRexx] 716 | url = "http://www.oorexx.org/" 717 | lang = "Rexx" 718 | impl_in = "C++" 719 | gc = "Tracing" 720 | license = "CPL" 721 | notes = "Implements Rexx extended with objects." 722 | 723 | [otto] 724 | url = "https://github.com/robertkrimen/otto" 725 | lang = "JavaScript" 726 | impl_in = "Go" 727 | gc = "Go's GC" 728 | license = "MIT" 729 | notes = "Implements ES5 with [some limitations](https://github.com/robertkrimen/otto#caveat-emptor)." 730 | 731 | ["Pascal Script"] 732 | url = "http://www.remobjects.com/ps.aspx" 733 | lang = "Pascal" 734 | impl_in = "Object Pascal" 735 | gc = "None (manual MM)" 736 | license = "modified zlib/libpng-License with mandatory attribution" 737 | notes = "Statically typed. Implements \"most of Object Pascal\". Can't define new classes." 738 | 739 | [Pawn] 740 | url = "http://www.compuphase.com/pawn/pawn.htm" 741 | lang = "Pawn" 742 | impl_in = "C" 743 | gc = "None (no heap allocation)" 744 | license = "Apache-2.0 with a clause to explicitly permit static linking" 745 | notes = "A curly-brace language with a small-footprint VM. Represents data as 4/8-byte \"cells\". Compiles to CPU-specific bytecode. [More](https://wiki.alliedmods.net/Pawn_Tutorial#Language_Paradigms)." 746 | 747 | [Perl] 748 | url = "https://www.perl.org/" 749 | lang = "Perl" 750 | impl_in = "C" 751 | gc = "Ref. counting" 752 | license = "Artistic-2.0 or GPL-3.0" 753 | notes = "[Embedding Perl in Another Application](https://perldoc.perl.org/perlembed)" 754 | 755 | [pForth] 756 | url = "http://www.softsynth.com/pforth/" 757 | lang = "Forth" 758 | impl_in = "C" 759 | gc = "None (manual MM)" 760 | license = "Public domain" 761 | notes = "A dialect of Forth." 762 | 763 | [PH7] 764 | url = "https://github.com/symisc/PH7" 765 | lang = "PHP" 766 | impl_in = "C" 767 | gc = "Ref. counting" 768 | license = "**Symisc Public License** or proprietary" 769 | notes = "Implements a subset of PHP 5.3 with some changes like native UTF-8 support." 770 | 771 | [PikaPython] 772 | url = "https://github.com/pikasTech/PikaPython" 773 | lang = "Python" 774 | impl_in = "C" 775 | gc = "Ref. counting" 776 | license = "MIT" 777 | notes = "Implements a variant of Python 3. The degree of compatibility with Python seems to be undocumented. Runs in as little as 4 KiB of RAM. Targets microcontrollers and Linux." 778 | 779 | [PicoC] 780 | url = "https://github.com/zsaleeba/picoc" 781 | lang = "C" 782 | impl_in = "C" 783 | gc = "None (manual MM)" 784 | license = "BSD-3-Clause" 785 | notes = "Statically typed. Interprets a subset of C." 786 | 787 | [Picol] 788 | url = "https://chiselapp.com/user/dbohdan/repository/picol/" 789 | lang = "Tcl" 790 | impl_in = "C" 791 | gc = "None (no reference support)" 792 | license = "BSD-2-Clause" 793 | notes = "A header-only library interpreter for a limited dialect of Tcl." 794 | 795 | [Pluto] 796 | url = "https://github.com/PlutoLang/Pluto" 797 | lang = "Pluto" 798 | impl_in = "C++" 799 | gc = "Tracing" 800 | license = "MIT" 801 | notes = "A superset of Lua 5.4 (outside of incompatibilies caused by new syntax). Adds syntax like `!=`, `break`, and string interpolation; expands the standard library; somewhat improves performance." 802 | 803 | [pocketlang] 804 | url = "https://github.com/ThakeeNathees/pocketlang" 805 | lang = "pocketlang" 806 | impl_in = "C" 807 | gc = "Tracing" 808 | license = "MIT" 809 | notes = "A small language syntactically similar to Ruby. [Embedding examples](https://github.com/ThakeeNathees/pocketlang/tree/master/tests/native/). [Performance comparison](https://github.com/ThakeeNathees/pocketlang#performance)." 810 | 811 | [pocketpy] 812 | url = "https://github.com/blueloveTH/pocketpy" 813 | lang = "Python" 814 | impl_in = "C++" 815 | gc = "Tracing" 816 | license = "MIT" 817 | notes = "Implements a subset of Python 3 (with [some differences](https://pocketpy.dev/features/differences/#different-behaviors)) in a single C++17 header file." 818 | 819 | [Python] 820 | url = "https://www.python.org/" 821 | lang = "Python" 822 | impl_in = "C" 823 | gc = "Ref. counting + cycle-detecting tracing GC" 824 | license = "PSFL (BSD-like)" 825 | notes = "[\"Embedding Python in Another Application\"](https://docs.python.org/3/extending/embedding.html)." 826 | 827 | ["gmqcc/qcvm"] 828 | url = "https://github.com/graphitemaster/gmqcc" 829 | lang = "QuakeC" 830 | impl_in = "C++" 831 | gc = "None (no dynamic memory allocation)" 832 | license = "MIT" 833 | notes = "A QuakeC compiler and VM." 834 | 835 | [QuickJS] 836 | url = "https://bellard.org/quickjs/" 837 | lang = "JavaScript" 838 | impl_in = "C" 839 | gc = "Ref. counting + cycle-detecting tracing GC" 840 | license = "MIT" 841 | notes = "A small embedded JavaScript interpreter that implements almost all of ES2019 and much of ES2020." 842 | 843 | [Quirrel] 844 | url = "https://github.com/GaijinEntertainment/quirrel" 845 | lang = "Quirrel" 846 | impl_in = "C++" 847 | gc = "Ref. counting" 848 | license = "MIT" 849 | notes = "A fork of Squirrel with [new features](https://quirrel.io/doc/reference/diff_from_original.html)." 850 | 851 | [Ravi] 852 | url = "https://github.com/dibyendumajumdar/ravi" 853 | lang = "Lua" 854 | impl_in = "C" 855 | gc = "Tracing" 856 | license = "MIT" 857 | notes = "“Ravi is a dialect of Lua with limited optional static typing and features a JIT compiler powered by MIR as well as support for AOT compilation to native code.”" 858 | 859 | [Rebol] 860 | url = "https://github.com/Oldes/Rebol3" 861 | lang = "Rebol" 862 | impl_in = "C" 863 | gc = "Tracing" 864 | license = "Apache-2.0" 865 | notes = "Relative Expression Based Object Language" 866 | 867 | [Red] 868 | url = "https://github.com/red/red" 869 | lang = "Red" 870 | impl_in = "Rebol, Red, Red/System" 871 | gc = "Tracing" 872 | license = "BSD-3-Clause, BSL-1.0" 873 | notes = "A descendant of Rebol. Embeddable via [libRed](https://github.com/red/docs/blob/master/en/libred.adoc). Features a cross-platform native GUI system. Intended to have low memory usage." 874 | 875 | [Rhai] 876 | url = "https://github.com/jonathandturner/rhai" 877 | lang = "Rhai" 878 | impl_in = "Rust" 879 | gc = "None (Rust-style lifetimes)" 880 | license = "MIT or Apache-2.0" 881 | notes = "An embedded scripting language for Rust inspired by ChaiScript." 882 | 883 | [Ring] 884 | url = "https://github.com/ring-lang/ring" 885 | lang = "Ring" 886 | impl_in = "C" 887 | gc = "Tracing" 888 | license = "MIT" 889 | notes = "An embeddable applications programming language with a large standard library and GIL-less multithreading." 890 | 891 | [Ruby] 892 | url = "https://www.ruby-lang.org/en/" 893 | lang = "Ruby" 894 | impl_in = "C" 895 | gc = "Tracing" 896 | license = "Choice of BSD-2-Clause, Ruby license, GPL-2.0" 897 | notes = "An embeddable object-oriented scripting language. [Running Ruby in C](https://silverhammermba.github.io/emberb/embed/)." 898 | 899 | [Rune] 900 | url = "https://github.com/rune-rs/rune" 901 | lang = "Rune" 902 | impl_in = "Rust" 903 | gc = "Ref. counting" 904 | license = "MIT or Apache-2.0" 905 | notes = "An embeddable dynamic programming language. Asynchronous-first and [const-evaluation](https://rune-rs.github.io/#const-evaluation)." 906 | 907 | [s7] 908 | url = "https://ccrma.stanford.edu/software/snd/snd/s7.html" 909 | lang = "Scheme" 910 | impl_in = "C" 911 | gc = "Tracing" 912 | license = "BSD-3-Clause" 913 | notes = "Implements a subset of R5RS/R7RS. Descended from TinyScheme." 914 | 915 | [sci] 916 | url = "https://github.com/borkdude/sci" 917 | lang = "Clojure" 918 | impl_in = "Clojure" 919 | gc = "host VM's GC" 920 | license = "EPL-1.0" 921 | notes = "An interpreter for a subset of Clojure for Clojure and ClojureScript." 922 | 923 | [SGScript] 924 | url = "https://github.com/snake5/sgscript" 925 | lang = "SGScript" 926 | impl_in = "C" 927 | gc = "Ref. counting + tracing CG" 928 | license = "MIT" 929 | notes = "[Features](http://www.sgscript.org/pages/advdocs/sgscript.docs.htm#Why-SGScript) include a built-in data serialization format, coroutines, class-based OOP, sandboxed evaluation, a built-in debugger and profiler." 930 | 931 | [sh] 932 | url = "https://github.com/mvdan/sh" 933 | lang = "shell" 934 | impl_in = "Go" 935 | gc = "Go's GC" 936 | license = "MIT" 937 | notes = "Implements POSIX shell, Bash, and mksh in pure Go. There are caveats with compatibility. See the [readme](https://github.com/mvdan/sh#caveats) and issues like [mvdan/sh#221](https://github.com/mvdan/sh/issues/221)." 938 | 939 | [Shine] 940 | url = "https://github.com/richardhundt/shine" 941 | lang = "Shine" 942 | impl_in = "C" 943 | gc = "Tracing" 944 | license = "MIT" 945 | notes = "A language based on Lua with additional safety and expressiveness features implemented as a fork of LuaJIT." 946 | 947 | [simpleeval] 948 | url = "https://github.com/danthedeckie/simpleeval" 949 | lang = "simpleeval" 950 | impl_in = "Python" 951 | gc = "Python's GC" 952 | license = "MIT" 953 | notes = "Evaluates expressions in a subset of Python." 954 | 955 | [Snek] 956 | url = "https://github.com/keith-packard/snek" 957 | lang = "Snek" 958 | impl_in = "C" 959 | gc = "Tracing" 960 | license = "**GPL-3.0-or-later**" 961 | notes = 'A Python-inspired language. Targets "processors too small to run MicroPython".' 962 | 963 | [SquiLu] 964 | url = "https://github.com/mingodad/squilu" 965 | lang = "SquiLu" 966 | impl_in = "C++" 967 | gc = "Ref. counting" 968 | license = "MIT, some extensions LGPL or GPL" 969 | notes = "A fork of [Squirrel](http://squirrel-lang.org/). Changes the syntax to accept a subset of JavaScript and C/C++. Implements Lua's features like string pattern matching and global table manipulation functions. It adds extensions for database access (SQLite3, MySQL, PostgreSQL), sockets, and other features." 970 | 971 | [Squirrel] 972 | url = "http://squirrel-lang.org/" 973 | lang = "Squirrel" 974 | impl_in = "C++" 975 | gc = "Ref. counting" 976 | license = "MIT" 977 | notes = "A language inspired by Lua and JavaScript/Python. Has a Lua-like C++ API. Differentiates itself from Lua with the use of reference counting in place of Lua's tracing GC, a curly-brace syntax, built-in class-based OOP, and zero-indexed arrays." 978 | 979 | ["Starlark (Go)"] 980 | url = "https://github.com/google/starlark-go/" 981 | lang = "Starlark" 982 | impl_in = "Go" 983 | gc = "Go's GC" 984 | license = "BSD-3-Clause" 985 | notes = "A small dialect of Python for configuration. Not Turing-complete. Untrusted code: can't access the file system and network, can use up memory and CPU to perform a DoS attack. [Spec](https://github.com/bazelbuild/starlark). [Python bindings](https://github.com/caketop/python-starlark-go)." 986 | 987 | ["Starlark (Java)"] 988 | url = "https://github.com/bazelbuild/bazel/tree/master/src/main/java/net/starlark/java" 989 | lang = "Starlark" 990 | impl_in = "Java" 991 | gc = "JVM's GC" 992 | license = "Apache-2.0" 993 | notes = "Starlark for the JVM. The original implementation." 994 | 995 | ["Starlark (Rust)"] 996 | url = "https://github.com/facebookexperimental/starlark-rust" 997 | lang = "Starlark" 998 | impl_in = "Rust" 999 | gc = "?" 1000 | license = "Apache-2.0" 1001 | notes = "Starlark in Rust. [Python bindings](https://github.com/inducer/starlark-pyo3)." 1002 | 1003 | [Steel] 1004 | url = "https://github.com/mattwparas/steel" 1005 | lang = "Scheme" 1006 | impl_in = "Rust" 1007 | gc = "Ref. counting + tracing GC" 1008 | license = "Apache-2.0 or MIT" 1009 | notes = "Aims for eventual R5RS and R7RS language compliance, with extensions inspired by Racket." 1010 | 1011 | [Tcl] 1012 | url = "http://tcl-lang.org/" 1013 | lang = "Tcl" 1014 | impl_in = "C" 1015 | gc = "Ref. counting" 1016 | license = "Tcl license (BSD-like)" 1017 | notes = 'An embeddable general-purpose scripting language with a rich C API. Includes a cross-platform GUI toolkit called [Tk](https://wiki.tcl-lang.org/477). See ["How to embed Tcl in C applications"](https://wiki.tcl-lang.org/2074).' 1018 | 1019 | [tcc] 1020 | url = "https://repo.or.cz/tinycc.git/" 1021 | lang = "C" 1022 | impl_in = "C" 1023 | gc = "None" 1024 | license = "LGPL-2.0-only" 1025 | notes = "A small C compiler that can be used as a library for a C JIT. [libtcc header](https://repo.or.cz/tinycc.git/blob/HEAD:/libtcc.h). [Embedding example](https://repo.or.cz/tinycc.git/blob/HEAD:/tests/libtcc_test.c)." 1026 | 1027 | [TinyScheme] 1028 | url = "http://tinyscheme.sourceforge.net/" 1029 | lang = "Scheme" 1030 | impl_in = "C" 1031 | gc = "Tracing?" 1032 | license = "BSD-3-Clause" 1033 | notes = "Implements a subset of R5RS." 1034 | 1035 | [Toy] 1036 | url = "https://github.com/Ratstail91/Toy" 1037 | lang = "Toy" 1038 | impl_in = "C" 1039 | gc = "Ref. counting" 1040 | license = "Zlib" 1041 | notes = "Has an optional type system. [Embedding Toy](https://toylang.com/deep-dive/embedding-toy)." 1042 | 1043 | [TruffleRuby] 1044 | url = "https://github.com/oracle/truffleruby" 1045 | lang = "Ruby" 1046 | impl_in = "C, Java" 1047 | gc = "JVM's GC" 1048 | license = "UPL-1.0" 1049 | notes = "Implements Ruby for GraalVM (HotSpot JVM) using Truffle." 1050 | 1051 | [Umka] 1052 | url = "https://github.com/vtereshkov/umka-lang" 1053 | lang = "Umka" 1054 | impl_in = "C" 1055 | gc = "Ref. counting" 1056 | license = "BSD-2-Clause" 1057 | notes = "Statically typed." 1058 | 1059 | [Wirefilter] 1060 | url = "https://github.com/cloudflare/wirefilter" 1061 | lang = "Wirefilter" 1062 | impl_in = "Rust" 1063 | gc = "None (no dynamic memory allocation)" 1064 | license = "MIT" 1065 | notes = "An expression language for Wireshark-like filters." 1066 | 1067 | [Wren] 1068 | url = "https://github.com/munificent/wren" 1069 | lang = "Wren" 1070 | impl_in = "C" 1071 | gc = "Tracing" 1072 | license = "MIT" 1073 | notes = "A small class-based performance-oriented scripting language. [Performance comparison](https://wren.io/performance.html)." 1074 | 1075 | ["Yaegi"] 1076 | url = "https://github.com/traefik/yaegi" 1077 | lang = "Go" 1078 | impl_in = "Go" 1079 | gc = "Go's GC" 1080 | license = "Apache-2.0" 1081 | notes = "An embedded complete Go interpreter, on top of the Go runtime." 1082 | 1083 | [ZetScript] 1084 | url = "https://zetscript.org" 1085 | lang = "ZetScript" 1086 | impl_in = "C++" 1087 | gc = "Ref. counting" 1088 | license = "MIT" 1089 | notes = "Comes with an API for C++ interop." 1090 | 1091 | [zygomys] 1092 | url = "https://github.com/glycerine/zygomys" 1093 | lang = "zygomys" 1094 | impl_in = "Go" 1095 | gc = "Go's GC" 1096 | license = "BSD-2-Clause" 1097 | notes = "An embedded Lisp for Go. Inspired by Clojure, but more oriented towards imperative programming. Has an infix syntax layer that looks like a subset of Go." 1098 | -------------------------------------------------------------------------------- /render-template.ts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env -S deno run --allow-env --allow-read --check 2 | 3 | import markdownTOC from "npm:markdown-toc@1"; 4 | import nunjucks from "npm:nunjucks@3"; 5 | import TOML from "npm:@iarna/toml@3"; 6 | 7 | if (Deno.args.length !== 2) { 8 | console.error("usage: render-template.ts template.njk data.toml"); 9 | Deno.exit(1); 10 | } 11 | const [templatePath, dataPath] = Deno.args; 12 | 13 | interface INamedProject { 14 | name: string; 15 | [key: string]: string; 16 | } 17 | 18 | interface IProjects { 19 | [key: string]: { 20 | [key: string]: string; 21 | }; 22 | } 23 | 24 | const projList = (projects: IProjects): INamedProject[] => 25 | Object.entries(projects) 26 | .map(([name, info]) => 27 | Object.assign({ 28 | name, 29 | }, info) 30 | ); 31 | 32 | try { 33 | const template = (await Deno.readTextFile(templatePath)).trim(); 34 | const data = TOML.parse(await Deno.readTextFile(dataPath)); 35 | 36 | const tocToken = `%TOC-${Math.random()}%`; 37 | const env = new nunjucks.configure({ 38 | lstripBlocks: true, 39 | trimBlocks: true, 40 | }).addGlobal("toc", tocToken); 41 | const doc = env.renderString(template, { 42 | projects: projList(