I checked their home page, and I can't quite seem to find the value proposition of Shen. It looks like it's a Lisp implementation? Why would I want to spend time learning/using this over JS/Go/Java/etc.?
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.
That's weird, because I just checked their home page and found this list of features:
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.
It’s a statically typed functional lisp, which is a rarity and a good opportunity to try out another programming paradigm. At a glance it looks like it uses a lot of Prolog semantics, so that’s also got Logic Programming heritage which is yet another paradigm exploration opportunity.
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.
The main idea is extreme portability. You only need to implement something like 46 basic functions (and, or, xor, +, -, *, /, if,...) and then you can use the language on that platform.
Besides that it has a lisp-2 macro system so you can do everything..
[caveat emptor: my knowledge of WASM stuff is mostly based on blog posts and HN comments, and may be outdated. corrections welcome]
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
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.
I dunt know about Shen, but I looked into doing a wasm implementation of common lisp, and wasm is far too static. You can't, e.g. compile a single function to wasm and then call it from your already existing wasm. On top of that, its stack implementation makes it hard to do GC and any nonlocal transfers if control that aren't anticipated by its C++ support.
Can you explain more? Trampolines can help with non-local returns, but at a significant cost to performance in the case where returns are all local. I don't see how they help with allowing you to arbitrarily (re)define functions, which is something that both Javascript and real world assembly languages allow just fine, but WASM struggles with.
I came across this and had not realised that there are quite a few implementations of Shen now. The ones certified to the latest version are CL, Scheme, Wasp, Erlang and JavaScript
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.