The GraalVM is a tool used, among other things, to produce native binaries, and Truffle a programming language for implementing programming languages on Graal.
One could expect pretty good performance, possibly at the price of somewhat slow compilation.
Good joke.
"In ISLisp, language specifications are separated from processor specifications. ISLisp forms after macro expansion and other pre-processing are called "prepared form" and ISLisp does not define preparation procedures."
The text you're quoting implies the language has a macro expander. There are arrays and vectors, so you could implement hashmaps, and I think some of the implementations of the language already does.
It looks to me that this "prepared form" is the same as in other traditional Lisps: that the source code of the program is defined in terms of nested lists, but may undergo a transformation into an undocumented form (for instance ARM machine language) in preparation for execution. E.g. in Steel Bank Common Lisp, everything you type into the REPL is first transformed into machine code and then run. Common Lisp doesn't define the details of such a thing, but does have a lot to say about compilation.
The actual ISLisp says:
An object is prepared for execution; this might include transformation or compilation, including macro expansion. The method of preparation for execution and its result are not defined in this document (with exception of the violations to be detected). After successful preparation for execution the result is ready for execution.
Obviously, the macro expansion parts are defined at least to some extent because it interacts with user macro definitions. (Perhaps even when it comes to macro expansion, ISLisp doesn't nail down the exact semantics, like when exactly is it done. It's possible for a pure Lisp interpreter to work with unexpanded code and continuously re-expand any macro call that it encounters, in the latest dynamic environment. That allows for macros to be fixed on-the-fly.)
ISLISP, a spiritually CommonLisp-lite:
Adhoc polymorphism through generic methods;
Dynamic and lexical scoping;
Procedural macros.Imagine if there was an InlineAsmGrub to compete against that other GRUB. It's just that silly a practice.
However, the fact it's based on truffle is the selling point -- truffle enables interop between languages on the framework. So, for example, you can take truffle JS implementation, import express library or whatever, and then as part of the implementation do
````
let fn = Polyglot.eval('islisp', '(lambda (x) (+ x 1))');
fn(1);
````
(toy example. But this interop can happen in all directions, it's not limited to js but can be used from truffle python, ruby, java, etc; and it also isn't limited to just primitive values, you can pass around functions as well).
If you aren't looking for a specifically a truffle lisp, it would make more sense to use one of the established common lisp implementations.
Do you have a suggested naming convention to follow? There's a rich history of alternative language implementations following the convention you dislike, but I think those involved would be open to an alternative.