language | fungw plugin | state | 3rd party software dependency | binding doc, comments |
---|---|---|---|---|
C | c | works | C89 and newer | n/a |
fawk | fawk | works | none | (an AWK dialect) |
BASIC | fawk (fbas) | works | none | (a modern BASIC dialect) |
pascal | fawk (fpas) | works | none | (a pascal script dialect) |
awk | mawk | works | libmawk (svn r1206) | license warning: libmawk is GPL |
lua | lua | works | liblua (5.1) | available |
tcl | tcl | works | libtcl (8.5) | n/a |
picol (tcl) | picol | works | picol (0.6.0) | available |
javascript | duktape | works | libduktape (2.0.2) | n/a |
javascript | mujs | works | mujs (1.1.1) | n/a |
ruby | mruby | works | libmruby (1.0.0) | n/a |
perl | perl | works | libperl (5.24.1) | available |
lisp/scheme | estutter | works | estutter (1.0.0) | available |
POSIX shell | cli | works | bash (4.3) or dash (0.5.7) | available |
lisp | funlisp | works | funlisp (1.1.0) | available |
python | python | works | libpython (2.6) | available |
python3 | python3 | BUGGY | libpython (3.7.3) | available |
Note: a version number in the dependency column is only the version of the package fungw last worked with - other versions may work as well. Exception is when the version number is bold, in which case other versions will NOT work.
language | last evaluated | reason |
---|---|---|
scheme/guile | 2018-05 | guile is a major pain to configure and compile; the API is not friendly either; use estutter instead |
sigscheme | 2018-05 | use estutter instead |
chibi-scheme | 2021-04 | probably usable, but we have enough lisp/scheme variants for now (use estutter instead) |
chicken-scheme | 2021-04 | probably usable, but we have enough lisp/scheme variants for now (use estutter instead) |
janet | 2021-04 | probably usable, but we have enough lisp/scheme variants for now (use estutter instead) |
s7 | 2021-04 | probably usable, but we have enough lisp/scheme variants for now (use estutter instead) |
Jim (tcl) | 2021-04 | probably usable, but we have enough TCL variants for now (use stock tcl or picol) |
jerryscript | 2021-04 | probably usable, but we have enough JavaScript variants for now (use mujs or duktape instead) |
jsi/jsish | 2021-04 | probably usable, but we have enough JavaScript variants for now (use mujs or duktape instead) |
espruino | 2021-04 | probably usable, but we have enough JavaScript variants for now (use mujs or duktape instead) |
njs | 2021-04 | probably usable, but we have enough JavaScript variants for now (use mujs or duktape instead) |
quickjs | 2021-04 | probably usable, but we have enough JavaScript variants for now (use mujs or duktape instead) |
little-lang | 2022-08 | probably usable, but it comes with a full tcl source (old version) that conflicts with official tcl both on lib file name and symbol levels; project not maintained since 2016 |
Some of these could be supported through the cli engine but they can not be supported natively for various reasons, described below.
language | last evaluated | reason |
---|---|---|
php | 2018-05 | could not figure how to set up multiple instances of php script with php7.0 (see work/php); probably could be done with PH7, but that doesn't come with an installable lib |
erlang | 2018-05 | does not have a C embeddable lib |
go | 2018-05 | not interpreted, compiled |
haskell | 2018-05 | not interpreted, compiled (would need FFI) |
Clojure | 2018-05 | depends on JVM? |
Scala | 2018-05 | depends on JVM |
Groovy | 2018-05 | depends on JVM? |
Rust | 2018-05 | not interpreted, compiled |
F# | 2018-05 | not interpreted, compiled |
Boo | 2018-05 | does not have a C embeddable lib |
rep (lisp) | 2018-05 | does not support multiple instances |
ecl (lisp) | 2018-05 | does not support multiple instances |
gambc (lisp) | 2018-05 | does not support multiple instances |
elk (lisp) | 2018-05 | does not support multiple instances |
scm (lisp) | 2018-05 | does not support multiple instances |
scheme9 | 2018-05 | does not support multiple instances |
ixion | 2018-05 | C++ |
rexx | 2018-05 | rexxsaa.h does not offer multiple script contexts, that would be mt.h (included from rexx.h) with tsd_t; but it seems rexx.h is usually not installed (from .deb or .rpm) |
pike7.8 | 2019-02 | stand alone interpreter, does not seem to have an API for embedding |
red | 2021-04 | official download page broken: can not download source release tarballs |
rebol | 2021-04 | bootstrap fail: requires rebol binary to build from source; no binary available in Debian; no proper source release tarballs, just an abandoned github project |
PascalScript | 2021-04 | bootstrap fail: remobject's PascalScript: no source release tarballs, only a github project; not clear how to compile outside of delphi (no Makefile or shell script or anything with e.g. fpc commands, no documentation) |
ici 4.1.0 | 2021-04 | bootstrap fail: fails to compile (posix thread problems, non-standard vararg copy) |
dart | 2021-04 | bootstrap fail: no proper source release tarball; there are development snapshots from git, containing a 300 megabytes sdk |
Kotlin | 2021-04 | depends on JVM? |
Pony | 2021-04 | doesn't look like a scripting language with an API for embedding |
Matlab | 2021-04 | octave is the free implementation; liboctave: the API is largely C++; example for embedding: embedded.cc; no C API for parse or execute |
Atlas | 2021-04 | not reentrant (can run only one script at a time) |
pawn | 2021-04 | does not compile a reusable lib, does not have an installation process |
umka | 2021-04 | API too weak, no email address to the author |
hashlink | 2021-04 | dependencies are too extensive, no email address to the author |
Io | 2021-04 | overcomplicated build process; cmake fails to create Makefile using the last release (2019.05.22-alpha) |
my_basic | 2021-04 | no release tarballs available |
lily | 2021-04 | API too weak (for script->C function dispatching); no email contact information, dead IRC channel |
never-lang | 2021-04 | API too weak (no dynamic registered C function callback), no contact information, insufficient docs/examples on embedding |
pforth | 2021-04 | no release tarballs, no contact email |
ring | 2021-04 | just too huge: the source release tarball is 1.2 gigabytes - bigger than the typical operating system image fungw is developed on |
sgscript | 2021-04 | abandoned project; no make install (ctx in function: sgs_DFunc; ctx in script: *OutputFunc, MsgFunc, ScriptFSFunc) |
picoc | 2021-04 | does not compile into a library out of the box - probably could be easily modified, tho (no answer from the author) |
wren | 2021-04 | script->C function call: can't figure which function is called (no answer from the author) [fork?] |
gravity | 2021-04 | script->C function call: can't figure which function is called (no answer from the author) [fork?] |
AngelScript | 2022-08 | C++ (no plain C API) |
LambdaChip | 2022-08 | implemented in scheme, no C API |
quirrel | 2022-08 | github master fails to compile, no email address to author |
daScript | 2022-08 | C++ (no plain C API) |
lk | 2022-08 | C++ (no plain C API) |
pocketlang | 2022-08 | no multi-name functions; mailed the author on 2022-08-15 (no answer) |
berry-lang | 2022-11 | installed lib not yet available; can't get the patch in because of github |
These potentially could be supported, but something fails, installation, or some detail of the API. I've contacted the author to see if the problem can be resolved (or the language moved to the unsupported category).
Libfawk provides an extremely small scripting language VM+compiler implementation with support for multiple languages. It is so small that the whole code is a single C file that is simply embedded in the fungw plugin. Libfawk is also pure C89, without any external dependency.
That means the fungw fawk plugin has no external dependency, because it contains both the scripting language code and the fungw binding. Since fungw can also be compiled without any external dependency, this means there is at least one scripting language plugin that will always work, everywhere, wherever fungw can be installed, providing multiple languages.