Live data from Hacker News

Clojure Turns 15 panel discussion video

youtube.com

71–80 of 226 posts

Re: Clojure Turns 15 panel discussion video

#71

I love Clojure (and have touted such in past comments), but it suffers from a glaring problem: every library is half done and/or abandoned. What happens is you end up modifying an existing library to fit your particular problem space. I needed a web framework. None of them just did things in a "simple way". I ended up branching an existing one and have altered it (very heavily) to fit what I need. It's now my go-to f…

Every early ecosystem suffers from lack of mature libraries. It is a chicken and egg problem.

I think your contribution would be very welcome, especially with a bit of docs or minimal examples.

Re: Clojure Turns 15 panel discussion video

#72
post #58

Rich Hickey’s talks may outlive Clojure itself. In some sense, the principles he taught and aimed for were the ideal. Clojure today wasn’t necessarily the ideal. I think there could be room for a better Clojure than Clojure, so to speak

Based on my analysis of Rosetta Code samples, Clojure is the most popular language with its compactness.

https://danuker.go.ro/programming-languages.html#non-math-ma...

Also, it has a low frequency of bugfix commits (which may or may not be related to bugs also). (but it might be the dev experience, I have not adjusted for it).

https://danuker.go.ro/frequency-of-bugfix-commits.html

In addition, the JVM gives it great performance, and it has actual CPU multithreading (while Python or other scripting languages have a GIL). This makes it relevant in today's environment where Moore's law continues through number of cores.

Therefore I don't think Clojure will die too soon.

Re: Clojure Turns 15 panel discussion video

#73

Earlier quoted context omitted.

The C language is extremely well-documented. It's still helpful to see other people's C code to understand common/useful patterns.

I don't know. I saw tutorials mixing clj -A, -X and -M flags, but what's the difference between them? When do I use each? What's the -r flag do and how do I use it? How do I update my dependencies? How do I build a jar and deploy it? It just always felt like I was running into things that felt basic and the docs didn't have an answer for them. I would see so many elaborate deps.edn files in people's configs and when…

> I saw tutorials mixing clj -A, -X and -M flags, but what's the difference between them?

That depends how you define your build targets (called aliases) in deps.edn. And there is also -T to call (public) functions in a namespace (file/program), e.g. when using build.clj - that's for building your jar.

-X calls a function that you can define using :exec-fn, :exec-args has it's arguments (usually a map) -M calls the main function ('executes a program', if you will), it's 'normal' (command-line) arguments are passed using :main-opts

And btw. `clj` is just a wrapper around `clojure` that runs `clojure` in rlwrap. No need to use this if you do not use the REPL.

Here is a (big) template I've just finished yesterday: deps.edn: https://github.com/Release-Candidate/Clojure-Template/blob/m...

and it's usage: https://github.com/Release-Candidate/Clojure-Template#build-...

build.clj - build a jar and run mkdocs https://github.com/Release-Candidate/Clojure-Template/blob/m...

Re: Clojure Turns 15 panel discussion video

#74

I love Clojure the language but I’ve never seen a more fragmented ecosystem. There seems to be a pattern in the language of “a problem emerges > a community solution gains traction > Cognitect develops their own solution but its weird and undocumented”, like deps.edn over leiningen, spec over malli, pedestal over ring, etc. Many prominent clojurists recommend deps.edn over leiningen and socket repl over nrepl, but I’…

I think the bottom line with Clojure is it's not an ecosystem well-suited for non-veteran programmers. For as simple as the language is, effectively using Paredit, navigating partially documented libraries, diving into source code to see how things interact—it's tough as a new developer. I don't believe Clojure is overtly hostile to newcomers; it's just crafted by veterans, for veterans. And this is the result.

I don't agree.

I consider myself something akin to a veteran. I've been coding for over two decades. Not sure if that qualifies, but anyway.

My point is: it's been with experience that I've come to value ergonomics the most.

And that for me includes having a thriving and focused ecosystem, extensive industry penetration, good and stable tooling, lots of well known codebases learn from, etc.

It was when I was young and inexperienced that I didn't see those as the important bits. I was happy hacking on any half assed editor exploring undocumented APIs and trying to discover patterns and idioms by myself. I was happy to waste time.

I'm not anymore. That's why, while a love Clojure as a language, I don't really use it that much nowadays.

Too much friction.

Re: Clojure Turns 15 panel discussion video

#75
Lisp has ruined me forever. I'm not sure how I can go back to other languages.

I basically started out with Allegro Common Lisp on Sparc's, went to Java because it was the shiny new thing, and then in 2017 finally took the plunge and have been addicted to Clojure ever since.

Don't get me wrong: the learning curve can be steep, but the steepness - at least in my case - came from un-learning all the object-oriented stuff.

Once you understand the value of values and the simplicity it brings, it becomes such a joy to code in Clojure.

For the people on here disgusted by the JVM ecosystem: There are many alternatives for Clojure.

There's Clojure for .NET, ClojureScript in at least two flavors that compile down to JavaScript, there's a fast interpreter called babashka for scripting, there's Clojerl for the Erlang VM, there's jank - which adds gradual typing on a C++ runtime.

Oh, and there's jobs that pay really well ;)

Re: Clojure Turns 15 panel discussion video

#76
I was writing a longer comment and deleted everything after it started to look like bragging.

All I'll say is that I'm extremely grateful to Clojure for the life I've been able to live and what it's allowed me to accomplish. This is truly a language for beating the averages.

Re: Clojure Turns 15 panel discussion video

#77
post #52

Earlier quoted context omitted.

Clojure user here since 2010(my earliest Clojure project on Github), and while I agree with the fun point, the iceberg wart for me at this point is the inelegance of the interface hierarchy and its structure behind the scenes. Clojure's forward-facing interface (a hundred functions that operate on one data structure) ended up breaking down for me at some point and became 10 functions on 10 data structures and those d…

Lets say that someone wants to improve on Clojure and make a better functional, immutable LISP! What should they start with ? Some things I miss is type support (for easy refactoring, auto documentation and performance), (small) native compilation, support for mobile platforms and their UI's, first-class web-assembly support, real structs and misc things like performant implementations for `first`, `last` and other c…

If you want an easy win, one thing Rich mentioned in a talk is - if he had to do Clojure all over again today - he would put transducers at the 'bottom'. For data transformation this makes the underlying collection type largely immaterial.

> real structs

I'm not even sure if value types are conducive towards immutable, persistent data structures. I'm certainly excited for project Valhalla but I'm not sure if Clojure, nor any Clojure-like JVM language, written in an idiomatic fashion, would really benefit from it.

> light-weight concurrency like Go

Project loom is already in preview mode. Lightweight concurrency is nearly here for any JVM language, and once it's fully released I will likely have zero reason to use core.async.

> type support

Static typing is A Thing you can choose to do, but I doubt you would get many daily Clojure users agreeing that it is "better". I think it's different and better in some circumstances but not necessarily others. It definitely feels trendy these days, sorta like how dynamic typing felt trendy 15 years ago.

Re: Clojure Turns 15 panel discussion video

#78

I love Clojure the language but I’ve never seen a more fragmented ecosystem. There seems to be a pattern in the language of “a problem emerges > a community solution gains traction > Cognitect develops their own solution but its weird and undocumented”, like deps.edn over leiningen, spec over malli, pedestal over ring, etc. Many prominent clojurists recommend deps.edn over leiningen and socket repl over nrepl, but I’…

I think most programming communities experience fragmentation as they grow. I would say the javascript ecosystem has had an order of magnitude more fragmentation at every layer: package management, server, client, module specification. IMO this is the cost of progress.

Re: Clojure Turns 15 panel discussion video

#79
post #52

Earlier quoted context omitted.

Clojure user here since 2010(my earliest Clojure project on Github), and while I agree with the fun point, the iceberg wart for me at this point is the inelegance of the interface hierarchy and its structure behind the scenes. Clojure's forward-facing interface (a hundred functions that operate on one data structure) ended up breaking down for me at some point and became 10 functions on 10 data structures and those d…

Lets say that someone wants to improve on Clojure and make a better functional, immutable LISP! What should they start with ? Some things I miss is type support (for easy refactoring, auto documentation and performance), (small) native compilation, support for mobile platforms and their UI's, first-class web-assembly support, real structs and misc things like performant implementations for `first`, `last` and other c…

> But what is your take on what needs fixing ?

I appreciate that it's a bit frustrating to have someone vaguely identify an area of concern and clarification and actionable suggestions are much more valuable.

There's two things. One is that the data structure ontology[1] is difficult to internalize because of its complexity. When I write Clojure code, I consider the capabilities of the data structures being passed to the function. I think we have some implicit understanding of this early on. You expect the type of such and such to support seq-ing or deref-ing or something else. You're thinking in terms of capabilities and that's good. But if you want to be exacting, at some point you'll have to be able to point to an interface or several in the diagram and say, "yes, I really do expect something that conforms to IPersistentVector or IMeta or something else. In order to preserve backwards compatibility, this is more confusing than it needs to be. Moreover, at that point, you're not in Clojure-land anymore.

My second point is that at this step in the narrative, you're reading Java code and the illusion of 100 functions is broken. I ask myself, "Why, aren't Clojure data structures implemented in terms of protocols?" There's a perfectly good way of abstracting functionality that seems good enough for users, but not good enough for standard library implementers? It feels like the answer is, "We don't want to break Clojure1.x and we don't want to deal with the Python3 problem." Which is fair, admirable even, but it still leaves me left wanting. I think there's a simpler, more consistent Clojure hiding in there, waiting to be let out.

Apologies for the awkward way this reads; I simply wanted to get it out before lunch time.

1. https://raw.githubusercontent.com/jafingerhut/clojure-classe...

Re: Clojure Turns 15 panel discussion video

#80

I love Clojure (and have touted such in past comments), but it suffers from a glaring problem: every library is half done and/or abandoned. What happens is you end up modifying an existing library to fit your particular problem space. I needed a web framework. None of them just did things in a "simple way". I ended up branching an existing one and have altered it (very heavily) to fit what I need. It's now my go-to f…

I think every clojure dev that sticks long enough and feels the need for a framework ends up publishing one. The reason none of them stands out much imo is that library composition is pretty easy to do and the building blocks libraries out there do their thing pretty well. So with a bit of experience even on a new project it feels much easier to adopt your known set of building blocks, maybe throw a few new ones into the mix or replace one and you are good to go. At the end of the day it doesn't take more time than learning a framework yet it gives you a lot more flexibility.
Post reply on HN