Platforms
Narwhal is a standard library and tools for multiple JavaScript engines; each engine has its own “platform” library. Use tusk platform {name}
to select an engine, or edit narwhal.conf
. The following engines are presently in development:
rhino
: is the default and most complete platform, based on Mozilla Rhino for Java, used for out-of-the-box functionality.k7
: is av8
based engine, in development by Sébastien Pierre.helma
: is based on Rhino with extensions, being developed by Hannes Wallnöefer.xulrunner
: is in development for Firefox extensions and XULRunner applications on the Spidermonkey platform by Irakli Gozalishvili, Christoph Dorn, and Zach Carter.jaxer
: is an engine based on Mozilla SpiderMonkey, for deploying web pages with both server and client side scripts, being developed by Nathan L Smith.v8cgi
: is based on the work of Ondrej Zara, and has not been updated in a long while.default
: is a catchall platform that implements modules that can be shared among platforms.browser
: will eventually be available for client side loading of modules with various techniques.secure
: will eventually be available for dependency injection sandboxed module systems within some other platforms.
Creating new Platform Adapters
We have a template for new platforms at “platforms/template” that you can copy to “platforms/{name}” and fill in the blanks. These consist of:
-
An executable (shell script or binary) at “platforms/{name}/bin/platform-{name}” that executes the interpreter engine of choice and causes it to load a bootstrap script. This script will be loaded by “bin/narwhal” with the environment variable
NARWHAL_HOME
set to the Narwhal project directory andNARWHAL_PLATFORM_HOME
set to the platform directory. This script will be run ifNARWHAL_PLATFORM
is set to your platform name. You can setNARWHAL_DEFAULT_PLATFORM
orNARWHAL_PLATFORM
in a “narwhal.conf” in your Narwhal project directory (template provided). -
A “thunk”, at
platforms/{name}/bootstrap.js
that evaluatesnarwhal.js
and passes the returned function a preliminarysystem
object with a few required properties (global
,evalGlobal
,platform
,platforms
,print
,evaluate
,prefix
,fs.read
, andfs.isFile
). This should be enough to get to an interactive console. -
Platform implementations for core modules, such as
file
andsystem
located inplatforms/{name}/lib/
. You can implementfile-platform
instead offile
if you implement the subset of the ServerJS file API used bylib/file.js
(and similar forio
,os
,binary
, etc). The next steps are:-
system: You must implement
system.args
to be able to pass command line options to Narwhal. -
file: To enable the package system you must implement
list
,canonical
,mtime
,isDirectory
,isFile
.
-