This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-06-11
Channels
- # announcements (8)
- # babashka (6)
- # beginners (19)
- # biff (2)
- # clerk (3)
- # clojure (13)
- # clojure-europe (4)
- # clojure-norway (27)
- # clojure-spec (3)
- # clojuredesign-podcast (3)
- # clojurescript (36)
- # conjure (4)
- # core-typed (4)
- # cursive (2)
- # fulcro (8)
- # gratitude (1)
- # hyperfiddle (4)
- # off-topic (34)
- # re-frame (4)
- # sci (11)
- # scittle (1)
- # squint (7)
- # xtdb (5)
I don't even use Python anymore but my disdain for it keeps on growing.
This https://docs.python.org/3/whatsnew/3.10.html#removed has so many entries... And of course software breaks, as I just witnessed when trying to use subuser
for the first time.
It's a low bar but JS is worse... or at least its ecosystem is... 🙂
I went to PyCon back in 2013 as it was local to me (so no travel/hotel, hence I paid out of pocket). I was very excited about all the Python 3.x stuff and the core Python folks were all "Yeah, the transition from 2.7 to 3.x is a bit rough but within a few years, everyone will have switched to 3.x everywhere!" And here we are a decade later and there are still huge amounts of 2.7 code out there and it's still the default version of Python on many systems so you have to choose to run 3.x and deal with the whole env/multi-version thing. We had seriously considered adopting Python 3.x for all our scripting needs but abandoned that idea by the end of 2013 😞
I had mostly avoided JS all my long career until recently -- due to resource constraints at work, I'm now splitting my time between the all-Clojure backend and the all-JS frontend, so I've had to come up to speed real quick on npm/yarn/jest and hundreds of tiny libraries that all break your code if you even update a patch level version 😞
Around 7 years ago or so I was fairly active in the Python community and at some point I got to ask Guido why there are still some inconsistencies in the stdlib that could seemingly be easily fixed by adding aliases and without removing anything. He answered something along the lines of "not worth it - it'll create a rift, and I don't want to repeat the 2->3 situation". Well, look at them now, without the BDFL, renaming and removing stuff to make things neater and creating rifts every minor version.
I wonder if he would do things differently regarding 2->3 if he had the chance to do over? (and I wonder what he thinks of the churn in 3.x these days?)
Yeah...
I myself still can't get over the "walrus operator", :=
, which was a syntax-level change to add teeny-tiny affordance that only a tiny fraction of people really need (and I'm questioning how real is that "really").
When I first got involved with Clojure and took over the maintenance of clojure.java.jdbc
, I was pretty aggressive about breaking changes because it was what I was used to, and I was also learning what was idiomatic... these days, I would never do some of the stuff I used to do back then! It's why both next.jdbc
and HoneySQL introduced new namespaces and new coordinates rather than break stuff -- and why I'm really careful about changes to those libraries now...
That approach is fantastic to work with, especially given that I can use all of the libraries side-by-side and migrate piece by piece, or not at all.
me looks up "walrus operator" ... 👀 ... pounds head against desk!
And without block scope, a walrus deep inside an expression introduces a new variable for the rest of the code below... 😞
I spent quite a long time in and around the CFML (ColdFusion) community and that has a lot of non-programmers and self-taught programmers -- and the Adobe team that maintain the product are Java devs, and the open source Lucee team are CFML devs (even tho' that is also written in Java). So there's no real concept of language design/architecture around either product -- and so they get all sorts of bizarre requests from community (who often only use CFML and no other languages) and they often just go ahead and implement them... ...so you get constructs in CFML that look like stuff in other languages but has different semantics(!) and you often get different implementations of the same construct in the commercial (Adobe) product and the supposedly-compatible open source (Lucee) product, because none of them know how to specify programming languages properly. It's horrific 😞
For a while, Adobe formed a Language Design Committee -- and announced it at a conference, telling everyone I was going to be the committee chair (without actually discussing it with me before!)... and then when "my" committee drew up feature designs and recommendations, they pretty much said "Oh, that's too hard to implement (properly), we're going to do this half-assed thing instead!" so I disbanded the committee after one release cycle.
That said, I made a lot of good friends in that community and still hang out in the main Slack and Discord fo it 🙂
> look like stuff in other languages but has different semantics
Ah, Apple also comes to mind here. :D Inventing their own labels for existing things or using existing labels for something different. From keyboard shortcuts to software patterns.
"So much to do hate, so little time."
> without actually discussing it with me before
LOL, wonderful.
I've been writing a little python because a lot of microcontrollers now can run micropython/circuitpython (speaking of splits) and it seems like so much weirdness is the fruit of insisting on anonymous functions only being a single statement
Like the original pep for the with statement starts modeling things as generators that yield a single value
The walrus operator is actually something I would have used recently in some code because I couldn't have an assignment and a return in a single expression
You know what's worse on all of this? Python have breaking changes, JS have even more breaking changes, Node.JS have less breaking changes that JS itself, but npm
have A LOT of breaking changes, and Electron have more breaking changes than JS....
Now, Node uses Python to build native modules - meaning that, sometimes, you can't install a native module because your Python is too recent
So, imagine my chaos with Pulsar, that uses Node, Electron, and native modules 😱
> JS have even more breaking changes What are some of the most recent breaking changes in the language itself? I can neither recall nor find anything quickly (and if I were to list everything Python has done in this regard, we'd spend the whole day here.)
Strict mode is now the default and it can't be disabled, there's some weird Metadata that "async function" provides that's essentially different than just returning a promise, WASM compilation changed, and classes are not exactly the same as the old prototype approach which sometimes cause problems - these were only on JS itself.
But on the ecosystem, lots of other things - the tooling is almost 100% different, NPM upgrades can (and do) break module installation, resolution, and require, the whole ESM that's incompatible with CommonJS, upgrading the tooling usually means breaking changes in the config files, web components API is completely different from the original prototype, node.js native modules' apis are completely unstable, and then there's WASM
Please correct me if I'm wrong but I don't think any of those should be considered a breaking change. Strict mode is the default only in modules - which are new and shouldn't break existing code outside of modules. Async functions and classes are new as well - they shouldn't have broken any existing code unless it was relying on implementation details. And unless I'm mistaken, WASM changes were made when it was at the proposal level and not a part of the established standard. Yeah, I'm not talking about the ecosystem and standard proposals, only what has been standardized at the language level.
It all depends - these indeed are not breaking changes by themselves, but unfortunately the JS ecosystem is... weird. Meaning that while these don't break, a single "test library version update" will do, for example. The same with the strict mode - if we wrote JS and published to Node/Browser and that's it, nothing would break; unfortunately, most JS code is compiled/bundled and these tools can (and most of the time, will) transform things that are CommonJS to ESM by default, meaning that a completely valid JS is now invalid on a newer node/browser (but that's because that new node/browser now applies this strict check).
Yeah, sorry that I wasn't that clear on what I meant - it's mostly friction like "I bumped a node version and now things are breaking" but that's because the tooling was generating things that were tolerated on older versions, but are invalid on newer JS.
just saw the https://github.com/intel/intel-one-mono font released. Using it now, does seem easier on my old eyes, and I especially appreciate the ridiculous braces, which I can mistake for parens.
There was a recent thread about fonts here https://clojurians.slack.com/archives/C03RZGPG3/p1684894689513419 which included Intel One Mono near the end...
I tried it for an hour or so but went back to FiraCode. I used Hack for a while too but still prefer FiraCode.
(and my eyes will be 61 in four weeks 👓 )