Rich Hickey and Brian Beckman – Inside Clojure (2009) [video]
channel9.msdn.com
channel9.msdn.com
I noticed before I left (2016) that he didn't have any projects running with clojure anymore...at least within the Amazon repos. I wonder if he's still using it at all.
I'm pretty sure he was the one that pitched drone delivery to Bezos, and he had worked on it the entire time I was there. As far as clojure goes, I have no clue why he seemed to stop using it, although I have my suspicions. I think common lisp was probably a better fit for what he was doing, and he seemed to be quite the expert with it, although I think I recall him talking fondly of Scala and F# as well.
Maybe someday I'll be responsible for writing a system back end from scratch and I can take off on a flight of fancy like this.
https://jobs.apple.com/en-us/details/200231079/apple-media-p...
My gut feeling is the language is well subscribed and growing at a flat rate. That's fine by me.
> but then I haven't had a project in ten years where it even makes sense to introduce it into operations
You don't really need a reason, if you want too and like the language and working with it makes you happier and more productive go for it. Because there's also no reason not too.
Evidence for this statement?
How many years of Clojure programming experience do you have?
Rich Hickey and Brian Beckman - Inside Clojure (54 minute video interview) - https://news.ycombinator.com/item?id=866872 - Oct 2009 (4 comments)
$ youtube-dl $url
$ youtube-dl --extract-audio $url
https://youtube-dl.org/I will be watching this video again...thanks for linking it!
It's pretty cool
That said, the idea of conj bring an extended cons sounds really nice. Are there examples where the "you can change the fundamental data structure and the algo still works" pans out?
I fear this will be a lot like our industry's love of tries. Mostly impractical and more likely to cause bugs. :(
Clojure was designed to, as seamlessly as possible, Trojan a Lisp into the enterprise world where the JVM rules. It succeeded at that narrow task.
http://www.kylheku.com/cgit/txr/tree/share/txr/stdlib/compil...
Notice how there is a method to take a snapshot of the compiler state, which includes making copies of several hash tables, and a corresponding restore method to put it back. Hey, isn't there some GoF Design Pattern for this? Memento or something.
The thing is, if hash tables and objects were immutable, the whole code would be a shitshow, and perform badly too.
It would just not have that one problem: it would never have to copy a hash table in order to have a copy of the old one.
Immutable HAMT hash tables that I could conj to and then assign back into the original location would be a reasonable middle ground. Then I would still need he snapshot method; but it wouldn't have to do anything beyond returning (copy me).
It occurs to me I could implement a shallow hash table copy function, such that the original and new table share chains. Mutating either table (overwriting an existing key/value pair with a new value) would show up in the other, but deletions and insertions would not.
Then as a developer you are looking into a certain piece of that tree depending on what bit of the "mutated value" you are viewing
I assume this is to help ensure memory usage doesn't balloon but if you need to do mutation there are non-default features for doing that: https://clojure.org/reference/transients with all the pros and cons of mutation
What makes Clojure worth it is the pervasive reduction of mutable state across your program without the cost and rigidity of creating types everywhere. Also great sharing of code across Clojure and ClojureScript:
- You want your dates to behave the same on client and server? You got it: https://github.com/juxt/tick
- You want your logging/debugging code to be the same? You got it: https://github.com/ptaoussanis/timbre
- You want good async primitives? No problem: https://github.com/clojure/core.async
- And many more...
I haven't seen another language that is as good as Clojure(Script) at this. Nowadays .cljc (.clj + .cljs) files really rock.