[HN Gopher] ShenScript - An Implementation of the Shen Language ...
___________________________________________________________________
ShenScript - An Implementation of the Shen Language for JavaScript
Author : felixr
Score : 48 points
Date : 2021-01-02 13:20 UTC (9 hours ago)
(HTM) web link (shenscript.readthedocs.io)
(TXT) w3m dump (shenscript.readthedocs.io)
| felixr wrote:
| 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
|
| https://shen-language.github.io/#downloads
| FreezerburnV wrote:
| 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.
| travv0 wrote:
| 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.
| cwyers wrote:
| So, a Lisp.
| zeugmasyllepsis wrote:
| > static type checking based on sequent calculus, one of
| the most powerful systems for typing in
|
| Not exactly a common characteristic for Lisps
| nerdponx wrote:
| I enjoyed this Strange Loop talk:
| https://www.youtube.com/watch?v=lMcRBdSdO_U
| Jtsummers wrote:
| http://shenlanguage.org/osmanual.htm
|
| Here's a now 4 year old version of the manual that ought to
| provide you with more detail.
| openfuture wrote:
| 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..
| eyelidlessness wrote:
| 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.
| asimjalis wrote:
| Where 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
| smasher164 wrote:
| For those who want a good overview of the power of Shen, see this
| Strange Loop talk: https://youtu.be/lMcRBdSdO_U.
| tenaciousDaniel wrote:
| As someone who is not at all familiar with Shen, or transpiling
| in general...why not create a WASM compiler for Shen instead?
| uryga wrote:
| [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 wrote:
| > also, DOM/window APIs
|
| And Node/Deno APIs as well.
| aidenn0 wrote:
| 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.
| shortercode wrote:
| In 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.
___________________________________________________________________
(page generated 2021-01-02 23:01 UTC)