Jsish

From HandWiki
Jsi
Jsi Logo.png
ParadigmMulti-paradigm: JavaScript, scripting (glue language), imperative (procedural, prototype-based, object-oriented), functional
DeveloperPeter MacDonald
First appeared2015; 9 years ago (2015)
Stable release
2.6[1] / October 26, 2018; 5 years ago (2018-10-26)[2]
Typing disciplinedynamic, strong, duck
Implementation languageC99, or C++
OSCross-platform
LicenseMIT License, libraries are various [1]
Filename extensions.jsi
Websitejsish.org/fossil/jsi (archived)
{{URL|example.com|optional display text}}
Influenced by
Tcl, SQLite, Fossil, WebSocket

JavaScript Interpreter SHell (Jsish or Jsi for short) is a scripting language designed for use in embedded systems.

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 a try/catch body.
  • The Error object is unimplemented: the argument to catch() is just a string.
  • The Date object is unimplemented: use strftime/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.

See also

References

External links