LispyScript
lispyscript.com
lispyscript.com
Now look at: https://github.com/clojure/clojurescript
And try it: http://himera.herokuapp.com/index.html
Lispyscript has the very nice advantage of being able to run directly in the browser. Since it's translated directly to javascript, I expect it won't have problems using other javascript libraries.
That said for non-Web applications or applications where advanced compilation isn't that useful providing a bootstrapped ClojureScript is desirable. We've been working on that slowly for a long time now. In the coming months you'll see changes such that the ClojureScript compiler can itself be compiled into JavaScript.
So, all real-life builds that anyone would care about.
You don't use clojure for performance anyway, it's going to be slower by default (because of immutability/persistent data structures, and yeah I know about react benefits with immutability that's not my point - you're still going trough a lot more memory and stressing GC) - you use it to help you deal with your code because of it's semantics.
But in reality last time I tried CLJS I didn't really feel like it delivers on the productivity part and it's mostly because of implementation issues. IMO the decision to implement CLJS on top of Closure compiler and in Clojure (instead of going for a self hosting compiler) was a mistake - you can't overstate the value of REPL and fast iteration in a language like Clojure - and my last attempt to use CLJS the compiler/REPL environment far from what I would consider fast iteration : compiler took forever to start because of JVM and while it could run as a service it needed to be restarted frequently enough that it mattered, REPL was very unstable it would just die randomly - sometimes you'd need to refresh the page, sometimes you'd need to restart the server process. Oh and don't even get me started on the voodoo needed to get the damn thing running - install piggieback, then install austin and then add this weasel thingy then configure the server process all so you can get a halfworking repl and pray it doesn't break because good luck figuring out what's actually going on. Compare this to JS where I just go in to the devtools panel and test my code.
$ lein new figwheel myproject
$ cd myproject
$ rlwrap lein figwheel
Browse to http://localhost:3449
If you return to the terminal, you should have a connected REPL now running. Along with live code reloading on save of your cljs files.Right now JS has persistent datastructure libraries and TypeScript is a huge productivity boost - tooling is top notch - it makes JS manageable, once it gets async/await (which it should in the next couple of months) I'll be pretty happy with JS development story.
I'll miss some niceties like collection operations, homoiconicity and macros but on the other hand I have working optional type checking, excellent tooling and I don't have to code in AST serialization format with macros :D
No, because of Clojure itself. It is time for people to stop spreading this.
As far as your experiences sounds like a lot of your problems didn't have anything to do with ClojureScript and everything to do with trying to getting overly complicated 3rd party setups going. I've only heard woes from people trying to get piggieback + Cider going. I now recommend that people avoid those entirely for ClojureScript anyway.
I admit ClojureScript did have startup time issues but these were addressed earlier this year. ClojureScript can now compile "Hello, world!" from cold JVM boot in ~1.5 seconds. Of course auto-building has be subsecond for ages. REPL sessions start similarly fast and can go for hours without encountering problems.
ClojureScript may still not be your cup of tea but your complaints are not the sort I hear from users much these days.
Once you have the JavaScript version of the ClojureScript compiler, will it be reasonable to use it for compiling in the browser? That would be great.
This turns out to be invaluable in production because most projects only realistically use a handful of functions from utility libraries that tend to be 10s of KBs in size.
I've been meaning to write up the various approaches to sexpressions+macros in JS. Mine differs from the others (and perhaps is closer to LispyScript) mostly in that it's close to JS in its names and semantics (e.g. "function" defines a function and you're still required to use a "return" statement), but then it lets you write macros to e.g. define "fn" where the return is implicit.
Anyway, here's some sample code from mine (which is itself defining macros used elsewhere in the compiler): https://github.com/martine/pjs/blob/master/lib/macro.pjs
The documentation says:
> LispyScript is not a dialect of Lisp. There is no list processing in LispyScript . LispyScript is Javascript using a Lispy syntax (a tree syntax).
That's about right. It actually uses some kind of s-expressions, but not Lisp syntax.
Sounds like it's extremely well named, then. LispyScript is to Lisp as Javascript is to Java: an entirely different language with different syntax, semantics, standard library and performance characteristics, but with just enough superficial similarity to provide plausible deniability for the name.
TLDR: s-expression syntax for javascript, macros are written in common lisp.
and its awesome FP library inspired by haskell's prelude.hs
I have done all forms of projects using LiveScript - robotics, simple websites, blog, cryptography, computer vision.
Its actually becoming silently fairly mature.
It helps when it doesn't generate any hype like most languages.
The community around is also very helpful !
And LiveScript is awesome with React.js or any other virtual DOM based MVC framework.
LiveScript was Netscape's original name for JavaScript, before Sun asked them to throw in some Java branding.
> Name
>
> LiveScript was one of the original names for JavaScript, so
> it seemed fitting. It's an inside joke for those who know
> JavaScript well.I guess we chalk this one up to "neat if you're a hobbyist or solo dev with no maintenance handover, but generally commercially unviable."
There are macro systems for Javascript, just not native ones.
im actually pretty shocked they are that close together.
For those it may interest, I have made a language with mostly conventional syntax which supports macros: http://breuleux.github.io/earl-grey/
The macro system is modular, so you can easily write and publish macro libraries. I have written some for testing, gulp, and react. It's not super mature but it's getting there.
[1]: http://hylang.org/
Try LispScript | http://ktg.bitbucket.org/lispscript/lispscript.html