Jsish
JavaScript Interpreter SHell (Jsish or Jsi for short) is a scripting language designed for use in embedded systems.
Paradigm | Multi-paradigm: JavaScript, scripting (glue language), imperative (procedural, prototype-based, object-oriented), functional |
---|---|
Developer | Peter MacDonald |
First appeared | 2015 |
Stable release | |
Typing discipline | dynamic, strong, duck |
Implementation language | C99, or C++ |
OS | Cross-platform |
License | MIT License, libraries are various |
Filename extensions | .jsi |
Website | jsish.org/fossil/jsi (archived) github |
Influenced by | |
Tcl, SQLite, Fossil, WebSocket |
It is a language used primarily by applications written in C or C++ using GNU tool-chains. MinGW provides Windows compatibility.
Jsi code compiles as either C99 or C++, with the C++ support being native instead of "extern C".
History
Jsi was created as an embedded application replacement for Tcl and JimTcl.[3] Its main goal is to provide embedded scripting using a mostly standard syntax (JavaScript), as opposed to the idiosyncratic ones used in Tcl, Lua, and Python. A secondary goal is data compatibility with Web browsers using JSON. Speed is not a major goal.
Life for Jsi started as a fork of the quad-wheel interpreter.[4] Eventually, most of the major internal features of Tcl were added. The current implementation is nearly 10 times the size of the original, and very little of the original code remains.
Features
Jsi comes with builtin support for SQLite, WebSocket,[5] and self-hosting ZIP file-systems.
The jsish
executable is unusual in that it integrates a self-mounting file system containing builtin utilities and applications.
These include Debugger and Web-Server; the latter is used to provide web user-interfaces for Debugger and SQLite.
Each of these applications can be accessed via jsish
command-line arguments.
Jsi is highly independent:
- The configuration script for Jsi is itself written in Jsi. To achieve this, a minimal standalone
jsish
is first built to bootstrap configuration. - An amalgamated source file is provided to support trivial integration into existing applications.
- The
jsish
binary can be built and statically linked against musl to produce a standalone with no external dependencies.
Scripts and extensions are unusually robust due to functions that support duck typed-parameters. The implementation is mature and has a rich and resilient development environment that includes integrated logging, asserts and strict mode.
As of version 2.4, released in December 2017, Jsi is considered to be feature-stable.
ECMAScript
Jsi implements version 5.1.[6] of the ECMAScript standard, with the following deviations:
- No automatic semicolon insertion.
- Empty array/object elements are not supported.
- It is an error to use
return
inside of atry
/catch
body. - The
Error
object is unimplemented: the argument tocatch()
is just a string. - The
Date
object is unimplemented: usestrftime
/strptime
. - The value of
typeof []
is "array" instead of "object". - UTF is currently not supported.
There is one major extension: function definitions can use types and defaults.
References
- "Tags". Retrieved 14 November 2018.
- "1 check-in tagged with v2.6". Retrieved 14 November 2018.
- "Jim Tcl". Retrieved 1 December 2017.
- "Quadwheel". Retrieved 1 December 2017.
- "LibWebsockets". Retrieved 1 December 2017.
- "ECMAScript 5.1". Retrieved 1 December 2017.