# fungw language support

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.

# libs/languages that could be supported but probably won't be

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

# libs/languages that can not be supported

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

# libs/languages that requires some upstream support

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).

# Special languages: embedded interpreters

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.