ShenScript – An Implementation of the Shen Language for JavaScript
shenscript.readthedocs.io
shenscript.readthedocs.io
I'm not trying to make any statements about the usability or anything, I just literally cannot find enough details about what Shen is beyond some books on Amazon or vague home page claims to make any judgements about this.
Here's a now 4 year old version of the manual that ought to provide you with more detail.
I’m not sure it’s something I’d want to use in production, but I certainly might play around with it at some point to get some brain juices flowing in different directions.
I went from JS -> Clojure/ClojureScript -> TypeScript, and that progression taught me a lot. It probably improved my programming skills many times over. I learned how to much better reason about state (Clojure/FP) and interfaces/contracts (TS/static types), which pays off constantly.
pattern matching,
lambda calculus consistency,
macros for defining domain specific languages,
optional lazy evaluation,
static type checking based on sequent calculus, one of the most powerful systems for typing in functional programming,
an integrated fully functional Prolog,
an inbuilt compiler-compiler,
has a BSD kernel that runs under a host of different languages (Lisp, Python, Javascript, C ...) and operating systems (Windows, Linux, OS/X),
is extensively documented in a book
If those don't interest you, there's probably not a reason for you to spend time learning it. I'm not sure what other info you're expecting to find.Not exactly a common characteristic for Lisps
Besides that it has a lisp-2 macro system so you can do everything..
It sounds like it would make for a Forth replacement for an ultra-minimal first boot up language for hardware bring up for custom ISAs.
Update: I found this link helpful.
in general transpiling to JS lets you reuse the JS runtime (if your language is similar enough), e.g. the garbage collector. also, DOM/window APIs, which are likely why you'd want your language to run in a browser.
with WASM, you have to ship a runtime/interpreter for your language, often adding more than a few MB of overhead to any page using your wasm-compiled-language, and interop with the DOM and other browser stuff is (afaik) still in a pretty rough state. i think C# with Blazor managed to work around it, but it's tough
And Node/Deno APIs as well.
WebAssembly only provides very minimal capabilities, anything more complicated than basic arithmetic and linear memory access require the features to be built. malloc, closures, arrays, error throwing, GC etc. all must be implemented. Some language features like console logs and visual output physically aren't possible, and must call out to the host ( normally JS ). Requiring the compiler to emit 2 languages.
In comparison JS has analogues to many common language features, making it easy to transpile to. There are other advantages to JS as well, but probably not worth listing.
It's complicated, and emitting JS is easier.