5 ms·
ShenScript – An Implementation of the Shen Language for JavaScript
- tenaciousDaniel 6y agoAs someone who is not at all familiar with Shen, or transpiling in general...why not create a WASM compiler for Shen instead?
- uryga 6y ago[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
- eyelidlessness 6y ago> also, DOM/window APIs And Node/Deno APIs as well.
- aidenn0 6y agoI 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.
- sitkack 6y agoTrampolines can enable all you seek.
- aidenn0 6y agoCan 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.
- shortercode 6y agoIn an ideal world it probably would! 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.
- asimjalis 6y agoWhere can I find a hello world for this language. I didn’t see it in the docs linked above. Update: I found this link helpful. http://www.shenlanguage.org/shenin15min.htm http://www.shenlanguage.org/shenin15min.htm
- felixr 6y agoI 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 https://shen-language.github.io/#downloads https://shen-language.github.io/#downloads
- FreezerburnV 6y agoI 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.
- Jtsummers 6y agohttp://shenlanguage.org/osmanual.htm http://shenlanguage.org/osmanual.htm Here's a now 4 year old version of the manual that ought to provide you with more detail.
- eyelidlessness 6y agoIt’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.
- travv0 6y agoThat'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.
- smasher164 6y agoFor those who want a good overview of the power of Shen, see this Strange Loop talk: https://youtu.be/lMcRBdSdO_U https://youtu.be/lMcRBdSdO_U.