_halgari | 2 years ago | on: Tour of our 250k line Clojure codebase (2021)
_halgari's comments
_halgari | 2 years ago | on: Tour of our 250k line Clojure codebase (2021)
But these people are doing this in Clojure, which is quite removed from the JVM bytecode, and talking about how it solves so many distributed problems, which I just don't see happening.
_halgari | 2 years ago | on: Tour of our 250k line Clojure codebase (2021)
They would claim grand things like having solved the issues with continuations and delimited continuations, distributed process migration and a whole host of other very hard problems that haven't been solved in the past. I would ask their founder: "right, so you know that delimited continuations have problems with accidental captured scope, they run poorly on the JVM, how did you solve this, have any papers I can read?", and all I ever got was that Clojure, immutable data, X and Y would fix these issues and you just had to wait and see what they were cooking up.
That's when I knew they had no clue what they were doing. I'm all for pushing the boundaries of tech, but if you're doing something attempted many times before, you at least need a good elevator pitch as to why it's solved now.
I think a great example of this done right is Rich talking about Clojure. People would ask "isn't immutable data expensive to reclaim and allocate". And his reply was always that the JVM's GC was just that good that the benefits to be gained from immutable data outweighed the marginal performance penalty of the amount of garbage collected. What changed since the old lisp days? Well we now have GCs that are super fast and JITs that can optimize dynamic code well.
That's the sort of laser focused vision I never saw from Red Planet labs. You gotta get that problem statement and the solution out early, refine the elevator pitch and be able to articulate to people who know what they're talking about how you're going to succeed where others have failed for decades.
_halgari | 6 years ago | on: What I Want from a Type System (2016)
Firstly, I wrote this about 3.5 years ago. I was wondering why people were suddenly commenting on it and now it all makes sense.
Part of the fun of writing articles about this is watching everyone argue about what language can be forced into representing types in a given way. Yes, I assume in any situation that if I want a feature X in a type system, that somehow Haskell can be forced to give me that feature, but that doesn't necessarily mean it will fit with the ecosystem of the language or that that's the only feature I'm looking for in the language. So saying "someone hasn't done their homework if they think X can't be done" isn't relevant, what is relevant that I'm not aware of a language that provides the type system features I want combined with acceptable set of trade-offs.
So anyways, I'll stick around for awhile and see if I can answer any questions. Thanks for the discussion, all!
_halgari | 7 years ago | on: Why Clojure? I’ll tell you why…
_halgari | 7 years ago | on: Clojure REBL [video]
It's like "how to not get people to use your tool" 101
_halgari | 7 years ago | on: Clojure REBL [video]
> You may not use REBL for commercial use.
_halgari | 7 years ago | on: OOP Is Dead, Long Live OOP
_halgari | 7 years ago | on: Ions: Develop cloud applications by deploying to a running Datomic cluster
Databases are complex programs, and if I ever wrote one, it would be infuriating for someone to pick it up, assume it was "just like MySQL" and then write a blog post crapping on it because it failed to meet their expectations.
_halgari | 7 years ago | on: Robust Clojure: The best way to handle nil
That's exactly what I don't like about some languages, if everything is a function, then it's all a big ball of mud. The only thing you can do with a function is call it.
I'd rather have classes of capabilities. Some things are callable, others are iterable, some are printable. But if it's truely about abstraction generalization, that sounds like a mess.
_halgari | 8 years ago | on: The Eve programming language project is winding down
I wanted to be exited about eve, but it was always too light on details, had too much risk to ever allow it to succeed, and after several pivots it failed.
This story probably been a bit different if only it was a bit less ambitious, and a lot more pragmatic.
_halgari | 8 years ago | on: Clojure 1.9 is now available
_halgari | 8 years ago | on: Nightcoders.net – A Cloud IDE for Clojure
_halgari | 8 years ago | on: Rich Hickey's response to “On whose authority?”
The number of facts like this that at just plain wrong in the OP just add to the offensive tone. Why should I listen to someone who has no respect for they truth?
_halgari | 8 years ago | on: Is Clojure dying, and what has Ruby got to do with it?
Beauty is in the eye, and all that, but CL code still makes me want to claw my eyes out.
_halgari | 9 years ago | on: Category Theory for Programmers (2014)
Let's take something like Clojure. I get immutable data, sane multithreading (I haven't had thread related problems in my code for years), etc. All without monads. Whenever I've started doing things like introducing state monads, or seen code involving applicative and "free" stuff, it basically becomes an opaque blob of functions. Zero ability to have the code self introspect or to leverage that pile of functions.
The better method is immutable data and data-first designs. Data is searchable, introspect-able, and transformable. Most CT stuff is all about composing functions via functions. Making your entire system opaque, at least from the point of view of the program itself.
_halgari | 9 years ago | on: Category Theory for Programmers (2014)
_halgari | 9 years ago | on: Category Theory for Programmers (2014)
_halgari | 9 years ago | on: Category Theory for Programmers (2014)
_halgari | 9 years ago | on: Category Theory for Programmers (2014)
And then there's languages like Eff that completely remove the need for stuff like monads: http://math.andrej.com/eff/
So yeah, for me it's been more-or-less a waste of time reading up on this stuff.
Yeah he took it from Bagwell, and adapted it, but in general there was a whole discussion way back in the day (~2012) questioning how creating this much garbage by boxing and throw away collections could ever be fast. Datomic is another example: making an immutable DB is a dumb idea right? Well what if storage was super cheap, and almost free? Well then maybe it's not such a bad idea.
So a lot of the Clojure community is based on this idea of taking ideas from way back in the 70's and saying "Well everything has changed, what works now that didn't then"