Hacker News new | ask | show | jobs
by rowanG077 1764 days ago
Isn't that the case for the vast majority of languages though? The python,c,Haskell,js,language x code from 2015 works the same now as it did 5 years ago.
3 comments

python 2 -> 3 was not easy (aka a total nightmare).

By 3.6 it was pretty good though and even migrations and dual code bases were easier because they went back and allowed things like u"" for unicode strings to continue to mean unicode strings in python 3 - before that they'd actually blocked unicode in 3 that was working well in 2.x code bases! It was a total in your face move to break the ecosystem even though supporting u"" would have been almost no cost in terms of improving compatibility with existing code. ASCII handling (important for things like web tech stacks header handling etc) also improved thankfully. 3.x made things a lot harder initially (and slower too).

Also a lot of code doesn't look the same over time - the conventions (formatting) are either very poorly defined or change. Go seems to have pretty much one format from fmt

etc

Python was a unique shit show.
Python 3 should be considered a different language from Python 2, pretty much.
The level on intentional compatibility breaking was crazy.

The fact that they went out of their way to break python 2 unicode when running on python 3 was just totally nuts. Especially after making such a big deal about unicode!

I've never seen anything like it I don't think? Maybe the new Perl that never really landed?

> The fact that they went out of their way to break python 2 unicode when running on python 3 was just totally nuts. Especially after making such a big deal about unicode!

Imo it's infinitely worse than that.

The big deal about Unicode is its nature, as defined in the "Summary Narrative" from 1991[0]. To wit:

> The Unicode character encoding derives its name from three main goals:

* universal (addressing the needs of world languages)

* uniform (fixed-width codes for efficient access), and

* unique (bit sequence has only one interpretation into character codes)

The Unicode folk realized that it would take decades to shift developers worldwide to doing that properly, so they adopted a three stage plan for software (eg the string types of programming languages) to get from where things were, to where they needed to be:

* Stage #1: Character = byte

* Stage #2: Character = code point

* Stage #3: Character = what a user thinks of as a character[1]

Python 1 was a Stage #1 language -- Character = byte -- like most others of its time.

In Python 2 there were tweaks to try move toward Stage #2 -- Character = code point, again, like most other PLs of its time.

In Python 3, they dictated a full switch to Stage #2 --- Character = code point. That was an unnecessarily painful break relative to Python 2. But -- and this is what really matters -- they entirely ignored Stage #3, which is the whole point of Unicode in the final analysis.

[0] https://www.unicode.org/history/summary.html

[1] https://unicode.org/glossary/#grapheme

They’re still working on Raku, it just isn’t branded “Perl 6” anymore.
That "new" Perl landed in 2015 as "Perl 6". It has been renamed to The Raku Programming Language in 2019 (https://raku.org #rakulang).
Well, there were good reasons to change the way py2 worked with Unicode, and I don't think this could have been made right without severe breakage either way. The only thing that should have happened sooner is support for u"" literals.
I had developed with unicode in mind using u"".

For some reason this was not good enough for the python 3 folks - they actively broke this code which was from folks who had SPECIFICALLy addressed unicode in their apps.

And yes, they could have supported u"" (and a number of other things).

They went - unicode is so critical we will break the world, and then for folks who had already supported unicode well or wanted to dual target a library they said your u"" approach to unicode is so bad we will break it.

Total BS in my book.

Ive had a number of python libraries (and Im not talking small, lesser known ones) that would depend on (and break in the absence of) specific quirks in Python versions that made upgrading python an unnecessary hassle.
For JS, es6/ecma2015 -> ecma2021, lots of language changes.
Of course changes but afaik it's backwards compatible.
I don't think the OP was making a point about backwards compatibility, but how the language itself has remained stable (sign of good design?). That is not the case for the majority of languages, except for maybe Ruby. Javascript in particular looks nothing like code from 6 years ago.
Furthermore, you rarely just plain JS. It's always another behemoth framework such as React or Angular.

I challenge anyone to upgrade a project from Angular ver 5 to the latest. It's possible but you'll also question whether its possible for you to quit software engineering and learn woodworking.