HN Theater @HNTheaterMonth

The best talks and videos of Hacker News.

Hacker News Comments on
Zach Tellman - Predictably Fast Clojure

ClojureTV · Youtube · 61 HN points · 1 HN comments
HN Theater has aggregated all Hacker News stories and comments that mention ClojureTV's video "Zach Tellman - Predictably Fast Clojure".
Youtube Summary
Clojure can be as fast as Java, but that doesn't mean it always is. This is an exploration of the abstractions and data structures used by Clojure, their performance characteristics, and when it's appropriate to strike off on your own.
HN Theater Rankings

Hacker News Stories and Comments

All the comments and stories posted to Hacker News that reference this video.
Aug 30, 2017 · 61 points, 15 comments · submitted by tosh
prospero
No idea why this is here, but I'm the speaker and happy to answer any questions.
kimi
While you're here, I'd like to say thanks for Aleph and Manifold - they have been very reliable and powerful workhorses.
prospero
I'm glad you've found them useful.
christophilus
Ha. I was wondering the same thing. I have a somewhat unrelated question for you, though.

You've been using Clojure for a while. Do you still like it? If you were to start your current project(s) over today, would you still use Clojure?

Clojure is on a list of technologies my team is considering using instead of Ruby/Rails. Our goal is to move to a stack that discourages complecting, encourages what we consider to be good practice (immutability, function composition, explicit dependencies, etc), and which has reasonably good performance characteristics. Clojure seems to fit the bill, and has the added benefit of syntactic simplicity which I really like.

Lack of static typing is probably the biggest downside vs some of the other languages we are weighing.

_sdegutis
Not OP, but I've got 5 years experience writing a Clojure web app from scratch. It began as kind of as a knee-jerk reaction to using Rails for a few years. All the reasons you mentioned are reasons we chose Clojure to implement CleanCoders.com: it was a simpler language, immutability caused fewer weird bugs, the community favored transparency over Rails-esque magic, it was fast, and everything felt very composable since mostly it was just functions. Overall it was nicer than using Rails. But honestly I wouldn't say it was much different of an experience than using Sinatra or Express.js. We had to plug a lot of tools together, which was kind of the real benefit over Rails, but it also came with its own cost, namely that you have to plug everything together, even if they don't fit well together, and half the time you just had to write some things yourself that you would have gotten for free in Rails (for better or worse). These days I personally am just fine writing in modern JS. Destructuring, lambda syntax, and object literals almost make it a tie with Clojure's terse syntax. And in practice mutation isn't really something that happens too often now that people have mostly learned that you should generally prefer returning new objects.
Scarbutt
These days I personally am just fine writing in modern JS. Destructuring, lambda syntax, and object literals almost make it a tie with Clojure's terse syntax.

So isn't there anything you wish you had or missed from Clojure? Not even the JVM?

_sdegutis
With how many libs I've been able to find on NPM, I don't miss the libraries of the JVM really. Most (if not all) of them have been rewritten by now. And the speed and concurrency of the JVM itself is great when you want to scale vertically, but there are plenty of decent ways these days to scale horizontally instead. The only thing I kind of miss is REPL-driven development, but for the most part that's only really a crutch for Clojure's slow launch, and it's just as easy in Node to write some experimental code at the top of your main file with an early exit, auto-reloading it using nodemon, and outputting whatever you're trying to see. You lose the ability to have live objects, but 99% of the time that's a non-issue.
prospero
Clojure is the language I'm most productive in. At the beginning of the year I quit my job to write a book about Clojure [1], do some consulting, and build a developer tool I've been talking about for a few years.

For the tool, I'm using a client/server model, and on the client side latency is a huge concern, so I'm using Java. Java is basically assembler for the JVM, and has extremely predictable performance characteristics. Where performance is a non-issue, or I only care about throughput, I'm using Clojure, because it's much more expressive. I think the tradeoffs of the two languages are very complementary, but also much less extreme than, say, Ruby and C.

I find the inertia of the core implementation of the language annoying, even if it's not a huge problem for most applications. Clojure's immutable data structures were world-class when the language was first released ten years ago, but there have been a number of papers which detail improved approaches since then. I've implemented most or all of them [2], but the chance of getting these back into Clojure is effectively nil. That doesn't affect me (I can just use my own data structures), but it does give me some concern as to where the language will be after another ten years.

[1] http://elementsofclojure.com/

[2] https://github.com/lacuna/bifurcan

tensor
From recent discussions on the CHAMP stuff I was under the impression that once clojure equality semantics were matched the performance improvements were fairly minimal. This is why there isn't more urgency around updating the core data structures. Is that not how you see it?
prospero
You probably saw my response in that thread, where I said that the dramatic performance improvements in lookup speed reported by the CHAMP paper were mostly because they were comparing apples to oranges.

However, Clojure's equality semantics only really help in some niche situations (where you want to be able to use ints, floats, and bignums interchangeably, mostly), so making the equality semantics configurable would be a huge win for all sorts of applications.

Also, lookup is not the only performance win that CHAMP offers: https://github.com/lacuna/bifurcan/blob/master/doc/benchmark.... One thing the approach makes possible, which wasn't explored in the paper, is the ability to do union/difference/intersection operations structurally, rather than just iterating over each element in the set.

None of these improvements are so overwhelming that they take priority over everything else. Clojure's data structures are still really well made. Given how data-focused the language is, however, I think these improvements are more compelling than everything that's been added to the language in the last five years other than `clojure.spec`.

christophilus
A. Thanks for the response.

B. Interesting. I saw a recent article on high-performance immutable data-structures[1], and wondered what the odds of Clojure implementing them might be. Sounds like you think the odds are minuscule.

C. I've heard great things about your book, and it is on my reading list! Thanks for writing it.

D. Given your hesitancy about the future of Clojure, what is your opinion of a more future-proof stack that has similar properties to Clojure (functional, simple, data-oriented, etc)? I can't think of many. ReasonML is interesting, but immature and definitely more complex than Clojure. Elixir seems to be promising, but I don't like the language, and I don't like being constrained to doing everything the BEAM way-- JVM is nice for high-perf computing when needed... Anyway, I'd appreciate your thoughts!

[1] https://news.ycombinator.com/item?id=15005569

mercer
What are your main issues with Elixir's syntax?
hnzix
> Elixir seems to be promising, but I don't like the language

Here is an interesting /r/clojure thread about Elixir vs Clojure: https://www.reddit.com/r/Clojure/comments/6wn6t5/new_clojuri...

prospero
The chance of my implementation being folded into Clojure, as opposed to whatever Rich writes himself, is definitely tiny. But there's no telling when he might get around to it, so the best way to stay sane is to assume it will never happen.

Clojure occupies a really nice local maximum, and I don't think any other language is trying to compete for that niche. Since Clojure is just a Java library, it's relatively easy for you to extend or replace any part of it, so I don't think the future is a concern for anyone who enjoys the language and is motivated to use it.

Rather, I worry about the growth of the community, since that's largely predicated on the out-of-the-box experience. As an author and consultant who is focused on Clojure, that affects me far more than a company which builds its product using Clojure (assuming you're willing to hire people with an interest in FP and teach them the rest in their first month). I don't claim expertise in how to grow a community around a language, but it seems to be at best a part-time job for the people at Cognitect, which is not ideal.

reilly3000
I am seeing pretty healthy CLJS adoption, especially as NPM access becomes easier and easier. The things that are happening on the client side seem to be out front of the rest of the industry fairly consistently over the past few years. I think that bodes really well for the Clojure community overall.
All true (I gave a talk on this subject just recently [1]), but the easiest and most provable way to isolate mutation is to not use it at all.

I think most people coming from an imperative background are surprised by how infrequently mutation is actually required. It's worthwhile to explore how far pure functions will take you.

[1] https://www.youtube.com/watch?v=iQwQXVM6oiY

brudgers
From farmer's pen to plate, now I know where sausage comes from. I enjoyed the presentation, thanks.

While I have found it improved my understanding of functional idioms when I explained them to others, I believe I am more helpful if I point people directly toward Hickey and Graham and PLT. I can paraphrase The Value of Values but it's better watched without translation.

HN Theater is an independent project and is not operated by Y Combinator or any of the video hosting platforms linked to on this site.
~ yaj@
;laksdfhjdhksalkfj more things
yahnd.com ~ Privacy Policy ~
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.