
Shen is a portable functional programming language - curtis
http://shenlanguage.org/
======
616c
Is anyone using this, despite the license?

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.

~~~
ZenoArrow
"And are there any more open alternatives built on CL?" Shen's predecessor Qi
runs on CL, and the first version was released under the GPL...
[http://en.wikipedia.org/wiki/Qi_%28programming_language%29](http://en.wikipedia.org/wiki/Qi_%28programming_language%29)

~~~
616c
I am aware of Qi but the fact that the second version went completely
commerical kind of sounded like a non-starter to me.

Have you used it?

------
erikb
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.

~~~
nightcracker
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.

~~~
groovy2shoes
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.

------
prodigal_erik
Prior discussion, mostly of the restrictive license:
[https://news.ycombinator.com/item?id=4730535](https://news.ycombinator.com/item?id=4730535)

------
moron4hire
What are the functional languages that are in common usage that are not
portable?

~~~
chc
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.

~~~
CMCDragonkai
Can shen be embedded in the host language?

~~~
tizoc
That depends on the port. The Clojure port allows this:

[https://github.com/hraberg/shen.clj#神-define-prolog-and-
defp...](https://github.com/hraberg/shen.clj#神-define-prolog-and-defprolog-
macros)

------
mp8
Looks interesting. However, does the following not mean that it's not
portable?

> Note that if Shen is not running on a Lisp platform, then function may be
> needed to disambiguate those symbol arguments that denote functions.

~~~
tizoc
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".

Portable:

(foldl (function +) 0 [1 2 3])

May work depending on the backend:

(foldl + 0 [1 2 3])

------
p4bl0
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.

[http://www.shenlanguage.org/learn-
shen/tutorials/shen_in_15m...](http://www.shenlanguage.org/learn-
shen/tutorials/shen_in_15mins.html#shen-in-15mins)

------
igl
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?

~~~
jtmoulia
You can add erlang/elixir to the list of paren-free functional languages.

~~~
fenollp
No you cannot.

~~~
jtmoulia
Mind expanding?

edit: wait, are we talking about no parentheses at all? If so, I'm wrong. I
meant lisp-like.

------
__Joker
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.

------
fithisux
But the question remains, has anyone used this language?

------
jopython
Does the language support concurrency primitives as part of the core?

