@markm made the case to me that rather than reimplementing all the stuff that the Agoric folks are doing in scheme, that I should make some scheme-like syntax that transforms into a valid Jessie program. Ok, let’s think about it. (I’m not committing quite yet!)
I was calling this “Jesscheme” but that’s really a mouthful. Since it would have more elegant syntax, maybe a shorter name is acceptable, so I’ll call it “Jess” for now.
- What to do about symbols? Most lispy hackers will expect them, and that two symbols that “look” the same are the same according to
eq?
(ie, they share the same pointer). I see that Javascript has Symbols, but Jessie does not provide them, presumably because Javascript does not provideeq?
shared uniqueness, and there is no global registry for them (which needs a weakmap). It’s not obvious that there would be a place to coordinate them in Jessie. - Mutable by default stuff everywhere still seems to exist in Jessie? It would be nice if we had some clojure-like immutable primitives, but I suppose these could be added later.
- No tail call elimination, right? I think that Javascript land considered this at some point but it hasn’t been added. This is a major expectation for most lisp’y devs, but I suppose most Clojure folks have managed to get along without it. Could be added possibly by a trampoline but that is highly undesirable and does not result in a “clean mapping” from Jess -> Jessie.
- Macros are not actually too high of priority initially, but eventually will be wanted (it’s part of the appeal of the syntax). I know @markm pointed me at his ideas for doubly hygenic macros.
- However, how on earth are macros exported from a module? What about between a Jess -> Jessie -> Jess passing of modules?
- How should hashmaps be represented? Probably even though a major diversion from scheme syntax, having special curly syntax is worth it.
Just some thoughts for now.