A little bit off topic: Does anybody else dislike the word "portable [...] language"? I never met a truly portable language. Examples: You can use Java on all platforms, but if you are not on Windows it sucks. You can use Python on all platforms, but if you are on Windows it sucks. It's always that the language might be able to run on different platforms, but as a coder you need more, and most of the standard tooling often is only taken care off well enough on one or two platforms.
What? Java and Python are great portable languages, and they definitely do not suck on Mac or Linux. The only languages that does not suck on Windows (i'm biased, I really hate development on Windows) is the .NET family of languages.
I don't have any experience with Python sucking on Windows? The only thing that's a bit of a hassle is distributing the interpreter, but this is no harder than a VC++ redistributable.
I've had good luck using cx_Freeze to "build" Python applications on Windows (and on Linux, for that matter). It bundles the bytecode of your Python app with a Python interpreter stub and any necessary shared libraries. On Windows, it can even build an MSI package. Users can't tell the difference from other applications.
I think the question is what does portable mean, or is there a better word to use than portable. It clearly doesn't just mean written in C or C++. From the linked page -- "It currently runs under CLisp and SBCL, Clojure, Scheme, Ruby, Python, the JVM and Javascript."
In the sense that they run under CLisp, SBCL, Clojure, Scheme, Ruby, Python, the JVM and Javascript? I can't think of any that are portable in that sense.
Definitely seems to be -- they claim it's been used by a lot of different people (including, notably, the now-famous indie game Papers, Please) and is somewhere deep into version 3.something -- it's been around for quite some time.
From[0], the answer appears to be yes, but it greatly depends on the host. One can write Common Lisp code by using uppercase. Using $native will execute the following code as Scheme code. For Clojure, it looks like Shen provides a FFI for basic interactions.
It means that to be portable you have to wrap symbols that represent functions in (function <the-symbol>) when passing them as arguments. Not doing so will work on some ports but not on others, and should be considered "undefined behaviour".
The "Shin in 15 minutes" tutorial [1] is really nice (I would even say it's more 5 minutes than 15). Once you read the beginning of it you can appreciate the example on the front page.
Interesting but I wish there were more functional languages that omit braces. I only know of F# and the js preprocessor livescript.
Seems like embracing lisp style is a must do for many lang-creators. Or is it just for the sake of parsing simplicity and dislike of whitespace significance?
Parentheses are rarely needed in Haskell. You can even use the $ operator to specify the order of evaluation, eg. concat $ replicate 3 "foo" == concat (replicate 3 "foo").
What is the use case of being portable to other languages ? I can vaguely surmise that being portable to other language might provide more traction for using Shen in existing project.
I have seen this here on HN and elsewhere. The only reason I avoid is the weird not-so-FOSS license and key-to-the-chest mentality.
I would love to hear semi-detailed experiences using it. And are there any more open alternatives built on CL? I am very interested in this idea.