4 ms·
Outside of applying the research of persistent immutable data structures (which I think is from the Okasaki paper[0]), I think the most innovative part of Cloju
by hardwaresofton 8y ago
Outside of applying the research of persistent immutable data structures (which I think is from the Okasaki paper[0]), I think the most innovative part of Clojure is the fact that it's actually used -- they've managed to build a community and ecosystem with high quality packages and buzz around lisp.
I don't pick Common Lisp/Scheme/Racket despite desperately wanting to because IMO Haskell has a better package ecosystem in my eyes, which is saying a lot. For example, try and find a HTTP server (by far the most common usecase for new projects IMO) that is both multi threaded and async IO capable (i.e. maximally using every core) -- it's surprisingly difficult, I found decent seeming libraries that did either-or, with varying levels of polish and paradigms involved.
I personally prefer CL to Clojure but I just can't imagine trying to convince an enterprise to use Common Lisp these days especially since I can't even really convince myself... Clojure would have the same problem but the ecosystem + buzz is the differentiator in my mind.
[0]: https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
- kccqzy 8y agoBy the way Okasaki not just has a paper, but a whole book on that topic. It has code examples in ML and Haskell. It's really nice if you want to learn to design persistent data structures.
- bcherny 8y ago+1 Okasaki’s book is a great reference. I’ve personally given out a few as gifts. https://smile.amazon.com/Purely-Functional-Data-Structures-Okasaki/dp/0521663504 https://smile.amazon.com/Purely-Functional-Data-Structures-O...
- hardwaresofton 8y agoI just double checked and I think the link I posted is to the book -- I thought it was just one of the papers but that PDF is the actual 160 page book that was his thesis. Unless I'm misunderstanding, and book != thesis. [EDIT] - Looking through the Amazon listing, it looks the book is certainly not just a republish of the thesis... Looks like I have even more reading to do
- weavie 8y agoYou should also read Phil Bagwells paper on Ideal Hash Trees. I believe they were also highly influential. http://lampwww.epfl.ch/papers/idealhashtrees.pdf http://lampwww.epfl.ch/papers/idealhashtrees.pdf
- nickik 8y agoThe persistent datastructure that clojure used are actually Rich own invention, building on Okasaki and Phil Bagwells. Phil Bagwells then started working in that direction also, see: https://www.youtube.com/watch?v=K2NYwP90bNs https://www.youtube.com/watch?v=K2NYwP90bNs Some of Clojure data structure are pretty much from Okasaki, but Vector or HashMap.
- fulafel 8y agoThere's a talk from Bodil Stokke where she explains (w background) and live-codes the core of Clojure's HashMap algorithm, in TypeScript: https://youtu.be/cUx2b_FO8EQ https://youtu.be/cUx2b_FO8EQ Indeed there's novel stuff there.
- bad_user 8y ago>> “I think the most innovative part of Clojure is the fact that it's actually used” Popularity is not “innovative”.
- hevi_jos 8y agoIMHO It is. It is like Windows. When it appeared it was significantly inferior to Unix options, but it made a hundred or a thousand times more people to experience computers. If a 1 to 10 percent of people is naturally innovative and creative, then the platform with most users ends innovating way more. Lisp use at first was restricted only to Academics, it was so inefficient that you even required a very special(and expensive) purpose computer to run it. Those academics were not paying the machine with their paycheck so they didn't care. More affordable solutions like c became popular and forced Lisp to improve(creating compilation pathways and so on), when it was obvious everyone was using the c toolchain(c++, objc, java).
- lispm 8y ago> Lisp use at first was restricted only to Academics Lisp was spreading in the 60s to everyone who had a mainframe or mini computer. In the 70s first applications were built and companies like BBN, Xerox, IBM started to use Lisp. In the 80s Common Lisp was standardized upon a DARPA initiative to have a single Lisp language for the applications they were prototyping or deploying in the military. The military got huge applications for battle management, battle simulation&training (like SIMNET), planning, design & construction developed by contractors. > it was so inefficient that you even required a very special(and expensive) purpose computer to run it Lisp developers required a personal workstation and thus they co-invented them in the 70s. Machines with 1 Megabyte or more RAM for a single user. Machines where one could develop and work with programs like Macsyma, an early computer algebra system widely used in maths and physics. > creating compilation pathways and so on efficient execution of Lisp on non-special-purpose hardware was available in the 70s for example with Maclisp and in the 80s with Common Lisp.
- bad_user 8y agoDefinition of "innovative": Characterized by the creation of new ideas or things Popularity isn't innovation by its definition. These two issues are orthogonal. >> "It is like Windows ... but it made a hundred or a thousand times more people to experience computers." Right, but that's completely irrelevant and not innovation.
- vindarel 8y agoAn async http server ? What about Woo and Wookie ? https://github.com/orthecreedence/wookie https://github.com/orthecreedence/wookie seen on https://github.com/CodyReichert/awesome-cl#network-and-internet https://github.com/CodyReichert/awesome-cl#network-and-inter... also for reference some companies keep betting on CL today: https://github.com/azzamsa/awesome-lisp-companies https://github.com/azzamsa/awesome-lisp-companies (and I suppose that's just the emerging iceberg)
- hardwaresofton 8y ago> An async http server ? What about Woo and Wookie ? https://github.com/orthecreedence/wookie https://github.com/orthecreedence/wookie Wookie is one of those that does either-or -- the main competency is async io, and it offers multi-threaded perf with some plumbing (see the Threading guide[0]). I don't mean to put down the libraries out there (lack/clack, hutchentoot, wookie, woo, ningle, etc), but for languages that aren't single-core-by-design/circumstance (i.e. node, python, ruby), I don't expect it to be this difficult to find a library that handles both multi-threaded operation and asyncio at the same time, abstracted cleanly so users don't have to think about it or add plumbing. Performant web servers that take advantage of what your language is good at is table stakes these days, if things like this are not standardized/obvious choices at this point it tells me that I won't be able to find other things down the line. It's a circular problem though, someone has to build all the libraries that I'm expecting to find, and it could be me -- I just don't want to join the ranks of those committed to the CL ecosystem, right now at least. > for reference some companies keep betting on CL today: https://github.com/azzamsa/awesome-lisp-companies https://github.com/azzamsa/awesome-lisp-companies (and I suppose that's just the emerging iceberg) I didn't say that companies don't bet on CL, I just personally couldn't imagine recommending it to anyone as the language to do a new project/startup/whatever in. Lisp has value, but for me that value is much more slanted to the way of thinking than for practical usecases, even more than Haskell which is weird. [0]: http://wookie.lyonbros.com/docs/threading http://wookie.lyonbros.com/docs/threading