Oh well continues day job as a Clojure programmer that is actively threatened by an obnoxious python take over
Oh well continues day job as a Clojure programmer that is actively threatened by an obnoxious python take over
Makes sense, I think a lot of developers would want to complect this problem with their runtime type system of choice without considering the set of downsides for the users
It helps that the core language has been incredibly stable
This function you're complaining about looks like 2 virtual threads doing program input reading and output writing for the LSP client given some ArrayBlockingQueues in about 25-30 lines
If I wanted the complete story I could use Clojure's inbuilt test runner to slip some ArrayBlockingQueues in there and run it under record with Flowstorm
Then leisurely seek through the entire state of the program, to get the play-by-play of how this works
There are so many good design choices in this language and a good 30% of colleagues I run into are not even doing the basics of like running a REPL, I think some people just need to clock in with a decade of C# or PHP or TS or JS or Python or whatever to get a taste of a language with next to no inbuilt immutability, statements instead of expressions, no reload-ability in the language semantics and just crapshot debuggers that run in lockstep with the program execution
Clojure electric V3 Missionary Rama
Indeed. Sometimes purely factual (but disliked/"too real") comments get like -200 upvotes, with no chance of redemption, even if it's pretty obvious everything is factual and adds to the topic.
Sometimes that happens on HN as well, but I've noticed that eventually it'll turn around. So saying something "true + unpopular + knee-jerk-inducing" can trigger a flood of 5-10 downvotes, but it eventually turns around as people seem to upvote heavily downvoted comments more, I guess.
So instead, I want you to imagine the sea or a very large bay, the most wide open space available, then I want you to imagine a ferry that can carry 500 people, big yes but there's still plenty of sea and its reasonably tranquil.
Now imagine 500 people on jet skis roaring around, then imagine that the jet skis and ferry are all trying to get somewhere different but that's relatively the same, perhaps commuting between the different sides of the bay.
If I was mayor I would put a stop to 500 jet skis and say look you have to use the ferry, people on jet skis keep colliding with each other, the noise is horrendous for people on the beach and makes swimming dangerous, and it's also wildly power inefficient when you step back - that's even if we ignore the pollution! 1000 spots to store a 500 jet skis on both sides of the bay is perhaps even worse!
If you can make a sea packed and grid locked with just 500 just imagine what it does to a city with thousands, hundreds of thousands, if you then turned to me and said the jet skis drive themselves! I would still think most people should be taking the ferry and there's a upper limit to sustainable jet ski use.
Instead, the world should have seen the light of Hindley-Milner type systems, ML-inspired languages, immutability, or at least not sharing mutable state. Did Haskell fail? Hmm, let's look at Typescript and Rust.
Don't get me wrong, a Lisp is always a great and fun language, and you can write whatever DSL you might like on top of it. But the old joke that "a Lisp programmer knows the value of everything, and the cost of nothing" still has quite a bit of truth to it.
Spec is definitely underrated here considering it's built into the language and has a wider scope but for most people they want the intellisense experience which you can get with clj-kondo + mailli but is not built in so most teams don't use it, fair enough
I'd like to move the goal posts though and say I want flowstorm in every (any other?!) language
I can just run the program and scrub backwards and forwards through the execution and look at all the immutable values frame by frame with a high level UI with plenty of search/autocomplete options
For program understanding there's nothing better
The fact I can program against the timeline of values of my program and create custom UI on top is crazy
One of the most mind blowing demos to me was Bret Victor's inventing on principle and having a programmable reverse debugger for your language makes those demos viable
I built an emulator recently for work that replays what happens on live locally, combined with flowstorm I can go line by line and tell you exactly what happened and why, no print statements no reruns with my own custom UI customised to our apps interesting parts
This is my appeal to anyone outside of Clojure please build flowstorm for JavaScript and or Python
The design of flowstorm is definitely helped by the fact that 95% of Clojure programs are immutable but I don't think it's impossible to replicate just very difficult