Hacker News new | past | comments | ask | show | jobs | submit login
ClojureScript, Lisp's Revenge [video] (youtube.com)
158 points by tosh on Sept 17, 2014 | hide | past | favorite | 34 comments



I happened upon the video through a different source yesterday. Saw it. Didn't really get the title. Sure he quickly ran through the What-Why-How-Perf-Examples of ClojureScript. Had I not already been interested in Clojure/ClojureScript, I would have walked away from the talk thinking whats the big deal? Other languages also compile to JS and vanilla JS isn't all that bad once you get to know it. So yeah, just by watching the video, I didn't understand what the title meant by 'Lisp's Revenge' or even 'Hoare's Revenge'.

EDIT: Before viewing the presentation I wasn't aware who the presenter, David Nolen, was. I was aware of the online persona "SwannOdette" and his blog posts [1] were a major reason for me seriously considering ClojureScript. During the presentation I realized that "SwannOdette" and "David Nolen" are one and the same. His blog posts [2][3][4] are a lot more convincing than this video.

Some day I will write in vanilla Javascript the corresponding code for the examples in those posts. That will truly help me appreciate the advantages Cljs brings to the table. Incase someone else does that, please do reply here.

[1] - http://swannodette.github.io/2013/11/07/clojurescript-101/

[2] - http://swannodette.github.io/2013/07/12/communicating-sequen...

[3] - http://swannodette.github.io/2013/07/31/extracting-processes...

[4] - http://swannodette.github.io/2013/08/31/asynchronous-error-h...


David is a great guy, but sometimes his talks don't get the point across in a powerful way.

Clojurescript uses CSP (same concept as Go channels invented by Tony Hoare) to allow simulated multiple concurrent threads of execution in javascript. How many compile to javascript languages have concurrency? not many.

Clojurescript has powerful immutability at the core of the language, macros that are so powerful they can add concurrency to single threaded javascript via a library.

I admit it's not simple to understand everything clojurescript has from a casual glimpse, but if you learn enough, it can really kick all the other compile to JS languages in the butt.


I am still learning FP and originally I was only looking at server side languages as I felt Javascript already lets me write code in an FP manner. It was after I read SwannOdette's blogs posts on ClojureScript and CSP that I started getting really excited about it. Couple that with Om and Flux, I think I would love writing apps that way. Meaning I was already sold on the potential of ClojureScript/CSP before even watching this presentation.

My dissatisfaction wasn't with ClojureScript but with the presentation. Given that I saw the presentation out of context (I don't know who the audience at the goto; conference was supposed to be - experienced FP developers looking to move to web or existing js web developers looking for something better). Purely from the presentation, I (who belongs the latter) wasn't really sold on anything. Maybe I wasn't the group being targetted.

Finally, I didn't watch the presentation because it was presented by David (I didn't who he was), I watched it for the title. It wasn't till midway through the presentation I realized SwannOdette is actually David. And that surprised me a lot cuz his blog posts are really good, and as I said really sold me on considering ClojureScript. I didn't intend to pick on David, maybe he just had a sub-par day. Especially after knowing David=SwannOdette :)


"macros that are so powerful"

You just made every single Common Lisp programmer who reads your comment cringe.

Clojure is a very nice language and while it has no real innovations it does bundle a few unusual (for mainstream) concepts into a single easy to use package. However, you should wait with calling Clojure macros "powerful" until after you get access to readtable. Or wait, you won't ever, that's a feature, supposedly...


Clojure has something better than CL reader-macros [1]. These are name-space specific, and more composable than CL's reader macros.

And reader-macros can be achieved with a small hack [2].

[1] http://www.infoq.com/interviews/hickey-clojure-reader

[2] http://briancarper.net/blog/449/clojure-reader-macros


That's a just small part of Lisp's reader macros.


Just because its not the most powerful macro systen ever created does not mean that its not powerful, so the sentence is completly ok.


It is definitely more powerful than Javascripts...


You mean it's better than Sweet.js? http://sweetjs.org/


> Sweet.js brings the hygienic macros of languages like Scheme and Rust

So it seams to clojure macro system is more powerful. That said that does not mean its better.


Of course, Sweet.js provides means for breaking hygiene.

Also, Clojure macros are kind-of, a-little-bit hygienic, with their rules for identifiers resolution.

Anyway, I'd say they're rather similar in expressivity and capabilities, but I don't know both macro systems well enough to do detailed comparison.


you can break hygiene in clojure macros using classical anaphoric macros. I guess that holds for clourescript as well.


No, I haven't looked into sweetjs enough. I was just referring to raw javascript macros.. (ie. non existent).


Right, in general languages without any means of syntactic abstraction feel contrived to me now, and after working with several macro-enabled languages I really want to have support for them in more places. JS (Sweet.js), along with Dylan and Nimrod (and others) showed that it's possible to have real macros in non-prefix languages - I wonder how long it will take the "mainstream" to become comfortable with this feature. It looks like it takes anywhere between 20 to 40 years on average for concepts to "enter mainstream", so I think we're going to have to wait quite a long time yet.


You might want to check out the PLOT langauges, its just a spec but a great read if you are into macros.


I really like Clojure (and have enjoyed David Nolen's CLJS tutorials and guides), but I find ClojureScript to have terribly arcane tooling. Despite being familiar with Clojure, it's still 10 minutes of cargo-culting and copy-pasting before I can start actually working on a ClojureScript project. Slightly ironic for a language which places such an emphasis on removing "incidental complexity."


Internalizing exactly what all the ClojureScript build options do definitely takes some time and it's frustrating if all you want to do is quickly try some little thing out. But it's for this reason I created the Leiningen templates mies, mies-om, and mies-node. These can get you up and running in a few seconds. For similar reasons other people have created templates for Ring app + ClojureScript, etc.


If Emacs is your thing, which it should be if you do Clojure, DPPs starter project Spiffy, will give you very decent setup in a couple of minutes. https://github.com/dragonmark/spiffy


Pretty familiar with Emacs, nrepl etc. Just a question of having enough time to familiarize myself with the ins and outs for any given new variety.

I actually did the ClojureScript tuts via LightTable, which was slightly less complex than the alternatives, but still required a bit of fussing.

(Incidentally, modifying my emacs setup in order to work on a project is the very definition of "incidental complexity".)


> If Emacs is your thing, which it should be if you do Clojure,

This is the kind of attitude that keeps people away from your language. The amount of people who shun away from C# simply because they don't like the idea of Windows / Visual Studio should be a hint.


> This is the kind of attitude ...

And it's unfounded. Thanks to Lisps unusually regular syntax adding support for semantic editing features (paredit-like) should be rather straightforward in any editor. And accidentally paredit is also enough to make coding any Lisp way more pleasant than editing raw code in other languages.

See http://emacsrocks.com/e14.html for an overview.

I'm actually kind of disappointed that in the demo I saw adding parens manualy, one at a time, instead of using wrap-sexp etc.


That's more of a Lisp problem than a Clojure problem. All the Expert Lisp Programmers settled on Emacs many moons ago (as in decades past) and no one has bothered to write another (good) Lisp-friendly text editor since. And well, you can't really write Lisp without a suitable text editor, so all the Lisp neophytes either give up or learn to cope with emacs and eventually forget about replacing it.


All the clojure tutorials I've seen recently have been using LightTable. Which is just as well since Emacs is not my thing.


all the Lisp neophytes either give up or learn to cope with emacs and eventually forget about replacing it.

This is really not true any more. LightTable is great for beginners, and there are more options for Clojure now. I'm developing Cursive, which is becoming pretty popular - Vim also seems to work well, Counterclockwise is good too.


Could you explain what you mean by a reasonable text editor? Thanks


I suspect he means one that has paredit.


Even before that, it's shocking how few text editors have basic Lisp indentation and REPL support.

I guess I did forget about Light Table (as AFAIK it doesn't support Scheme or Common Lisp yet), which seems like the right thing to point beginning Clojure programmers to.

Hell, that's probably a big part of why Clojure became more popular than the previous Lisps.


To be fair, I'm on-side with the idea of an environment that adds niceties for your language. However, I agree that you should be able to still have a decent experience without installing or setting up language-specific editors or environments. I've really enjoyed being able to get into Rust with nothing more than Vim and a terminal.


This was only meant as a recommendation, not a command. Lightable, Vim, Eclipse IntelliJ and quite a few others are perfectly viable alternatives. I have just personally found that Emacs to be excellent for Clojure development.


Yeah but once you get it going.. And discovering LightTable's insta REPL for the first time is almost spiritual.


I definitely felt the same but there's quite a few bits of tooling popping up now - lien-mies for a very quick first step, and more powerful bits like figwheel, which makes itterating in the browser with om really shine.


David Nolen is passionate, bright, and brilliant. I watch some of his talks every now and then when I want to get hyped up to get some coding done.


David Nolen inspires me with his grasp of programming concepts & paradigms. Watching his talks and the other clojure geniuses truly inspire me. You are so right about the passionate, bright, and brilliant part. I feel his enthusiasm to iterate the world into a better place to code in.


Goto conference is pretty awesome. Saw this live in DK was really inspiring.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: