- Macros can be defined in sibilant and included at compile time.
- Sibilant is entirely written in sibilant and can recompile itself (making it a quine).
- Prefer verbose names to abbreviations by default.
- Avoid line noise. Prefer established punctuation semantics from natural languages and common programming languages (eg commas come after things and mean a pause or separation).
- Allow as much of the language to be modified in-source as possible. This includes the ability to rename/remove/redefine all keywords and macros.
- Add language features slowly, and only when there’s a real use case. Don’t blindly implement Lisp features without reasoning through the need.
- Provide tools to simplify avoidance of repetition.
Try it before you install
sibilantjs.info includes an in-browser as-you-type sibilant compiler and tutorial, so you can get a sense of the language without leaving your browser.
$ npm install sibilant
-v / --version Print out a version string and exit -h / --help This message --repl / [no args] Sibilant interactive command prompt --execute / -x This is a flag. Execute input files in order supplied. --eval [optional STRING] / -e [optional STRING] Evaluate STR if provided, otherwise evaluate standard in. --output DIR / -o DIR Output input files to this dir, replacing .lisp with .js. --input FILE / -i FILE / FILE Add this file to the input files. If the execute flag is set, input files will be executed. If an output dir is specified, each file will be written to that dir. Otherwise, each file will be written to STDOUT. To pass arguments to an executed file, append them after a "--", as follows: $ sibilant -x myfile.lisp -- --arg-for-my-program=stuff myfile.lisp will see process.argv as [ 'sibilant', 'myfile.lisp', '--arg-for-my-program=stuff' ]
To compile sibilant
$ git clone git://github.com/jbr/sibilant.git $ cd sibilant $ npm link . $ sibilant src/*.lisp -o lib $ sibilant -x test/test.lisp # you're now running a sibilant you just compiled.
To compile one file to stdout
$ sibilant test/test.lisp
To compile a file to a directory
$ sibilant test/test.lisp -o . # put test.js here or
$ sibilant --input test/test.lisp --output .
To run a file
$ sibilant -x test/test.lisp
To enter the repl
$ sibilant or
$ sibilant --repl
Learning the language and examples
The most up to date documentation will always be sibilantjs.info which includes an as-you-type in-browser sibilant compiler.
Check out sibilant itself, which is written 100% in sibilant to get a sense of what’s possible.
Also, check out macros.lisp to see how easy it is to write new compiler macros.