zlacker

[parent] [thread] 25 comments
1. deafpo+(OP)[view] [source] 2025-12-06 18:12:16
Perl6/Raku killed Perl.

Python 3 almost killed Python.

It's normal. Once a community loses faith, it's hard to stop them from leaving.

replies(5): >>MangoT+T >>symbog+v1 >>ajross+y2 >>o11c+Y3 >>Todd+s5
2. MangoT+T[view] [source] 2025-12-06 18:19:24
>>deafpo+(OP)
> Python 3 almost killed Python.

People were being crybabies; the critics were extremely vocal and few. Python 3 improved the language in every way and the tooling to upgrade remains unmatched.

replies(2): >>symbog+s1 >>raverb+28
◧◩
3. symbog+s1[view] [source] [discussion] 2025-12-06 18:22:24
>>MangoT+T
Python 3 was a disaster and enterprises were still undertaking pointless 2->3 upgrade projects 10 years later
replies(4): >>jordan+b3 >>zihotk+n3 >>MangoT+ve >>bsder+VG
4. symbog+v1[view] [source] 2025-12-06 18:23:27
>>deafpo+(OP)
Agree 100%. We were told to wait for any improvements or new features we wanted and just to wait for Perl 6, which never came
5. ajross+y2[view] [source] 2025-12-06 18:30:16
>>deafpo+(OP)
Python 3 couldn't even kill Python 2!
◧◩◪
6. jordan+b3[view] [source] [discussion] 2025-12-06 18:35:25
>>symbog+s1
It was annoying but if it hadn't happened Python would still be struggling with basic things like Unicode.

Organizations struggled with it but they struggle with basically every breaking change. I was on the tooling team that helped an organization handle the transition of about 5 million lines of data science code from python 2.7 to 3.2. We also had to handle other breaking changes like airflow upgrades, spark 2->3, intel->amd->graviton.

At that scale all those changes are a big deal. Heck even the pickle protocol change in Python 3.8 was a big deal for us. I wouldn't characterize the python 2->3 transition as a significantly bigger deal than some of the others. In many ways it was easier because so much hay was made about it there was a lot of knowledge and tooling.

replies(2): >>xscott+66 >>JoshTr+l6
◧◩◪
7. zihotk+n3[view] [source] [discussion] 2025-12-06 18:36:47
>>symbog+s1
A month ago I had to fix a small bug in Python 2.6 code in one of internal systems. It won't be ever migrated, no capacity and no value
8. o11c+Y3[view] [source] 2025-12-06 18:41:26
>>deafpo+(OP)
I'd take this a step further and say that the design flaws that motivated Perl6 were what really killed Perl. Perl6 just accelerated the timeline.

I do imagine a saner migration could've been done - for example, declaring that regexes must not start with a non-escaped space and division must be surrounded by space, to fix one of the parsing problems - with the usual `use` incremental migration.

9. Todd+s5[view] [source] 2025-12-06 18:51:31
>>deafpo+(OP)
Yep. Perl 6 was a wall that Perl 5 would never move beyond. It’s still Perl 5 25 years later.
◧◩◪◨
10. xscott+66[view] [source] [discussion] 2025-12-06 18:56:13
>>jordan+b3
> It was annoying but if it hadn't happened Python would still be struggling with basic things like Unicode.

They should've just used Python 2's strings as UTF-8. No need to break every existing program, just deprecate and discourage the old Python Unicode type. The new Unicode type (Python 3's string) is a complicated mess, and anyone who thinks it is simple and clean isn't aware of what's going on under the hood.

Having your strings be a simple array of bytes, which might be UTF-8 or WTF-8, seems to be working out pretty well for Go.

replies(1): >>MangoT+Ie
◧◩◪◨
11. JoshTr+l6[view] [source] [discussion] 2025-12-06 18:59:08
>>jordan+b3
With the benefit of hindsight, though, Python 3 could have been done as a non-breaking upgrade.

Imagine if the same interpreter supported both Python 3 and Python 2. Python 3 code could import a Python 2 module, or vice versa. Codebases could migrate somewhat more incrementally. Python 2 code's idea of a "string" would be bytes, and python 3's idea of a "string" would be unicode, but both can speak the other's language, they just have different names for things, so you can migrate.

replies(2): >>MangoT+Be >>kstrau+Mk
◧◩
12. raverb+28[view] [source] [discussion] 2025-12-06 19:11:25
>>MangoT+T
The real problem here was releasing 3.0 as if it was stable, when the real usable version was 3.3/3.4
◧◩◪
13. MangoT+ve[view] [source] [discussion] 2025-12-06 20:05:25
>>symbog+s1
It was not a disaster in any way. People just complained about having to do something to upgrade their codebases.
◧◩◪◨⬒
14. MangoT+Be[view] [source] [discussion] 2025-12-06 20:06:17
>>JoshTr+l6
> With the benefit of hindsight, though, Python 3 could have been done as a non-breaking upgrade.

Not without enormous and unnecessary pain.

replies(2): >>JoshTr+9g >>SoftTa+h51
◧◩◪◨⬒
15. MangoT+Ie[view] [source] [discussion] 2025-12-06 20:07:06
>>xscott+66
I can't say i've ever thought "wow I wish I had to use go's unicode approach". The bytes/str split is the cleanest approach of any runtime I've seen.
◧◩◪◨⬒⬓
16. JoshTr+9g[view] [source] [discussion] 2025-12-06 20:20:49
>>MangoT+Be
It would absolutely have been harder. But the pain of going that path might potentially have been less than the pain of the Python 2 to Python 3 transition. Or, possibly, it wouldn't have been; I'm not claiming the tradeoff is obvious even in hindsight here.
replies(1): >>MangoT+Va1
◧◩◪◨⬒
17. kstrau+Mk[view] [source] [discussion] 2025-12-06 21:07:26
>>JoshTr+l6
That split between bytes and unicode made better code. Bytes are what you get from the network. Is it a PNG? A paragraph of text? Who knows! But in Python 2, you treated them both as the same thing: a series of bytes.

Being more or less forced to decode that series into a string of text where appropriate made a huge number of bugs vanish. Oops, forget to run `value=incoming_data.decode()` before passing incoming data to a function that expects a string, not a series of bytes? Boom! Thing is, it was always broken, but now it's visibly broken. And there was no more having to remember if you'd already .decode()d a value or whether you still needed to, because the end result isn't the same datatype anymore. It was so annoying to have an internal function in a webserver, and the old sloppiness meant that sometimes you were calling it with decoded strings and sometimes the raw bytes coming in over the wire, so sometimes it processed non-ASCII characters incorrectly, and if you tried to fix it by making it decode passed-in values, it start started breaking previously-working callers. Ugh, what a mess!

I hated the schism for about the first month because it broke a lot of my old, crappy code. Well, it didn't actually. It just forced me to be aware of my old, crappy code, and do the hard, non-automatable work of actually fixing it. The end result was far better than what I'd started with.

replies(1): >>JoshTr+st
◧◩◪◨⬒⬓
18. JoshTr+st[view] [source] [discussion] 2025-12-06 22:26:33
>>kstrau+Mk
That distinction is indeed critical, and I'm not suggesting removing that distinction. My point is that you could give all those types names, and manage the transition by having Python 3 change the defaults (e.g. that a string is unicode).
replies(1): >>kstrau+eu
◧◩◪◨⬒⬓⬔
19. kstrau+eu[view] [source] [discussion] 2025-12-06 22:32:37
>>JoshTr+st
I’m a little confused. That’s basically with Python 3 did, right? In py2, “foo” is a string of bytes, and u”foo” is Unicode. In py3, both are Unicode, and bytes() is a string of bytes.
replies(1): >>JoshTr+6V
◧◩◪
20. bsder+VG[view] [source] [discussion] 2025-12-07 00:17:46
>>symbog+s1
Except that Python took the other path when migrating from Python 1 to Python 2 and ... guess what? That was a "disaster" too.

The only difference was that by the time of Python 3, Python programs were orders of magnitude bigger so the pain was that much worse.

◧◩◪◨⬒⬓⬔⧯
21. JoshTr+6V[view] [source] [discussion] 2025-12-07 03:15:39
>>kstrau+eu
The difference is that the two don't interoperate. You can't import a Python 3 module from Python 2 or vice versa; you have to use completely separate interpreters to run them.

I'm suggesting a model in which one interpreter runs both Python 2 and Python 3, and the underlying types are the same, so you can pass them between the two. You'd have to know that "foo" created in Python 2 is the equivalent of b"foo" created in Python 3, but that's easy enough to deal with.

replies(1): >>MangoT+6b1
◧◩◪◨⬒⬓
22. SoftTa+h51[view] [source] [discussion] 2025-12-07 05:52:59
>>MangoT+Be
Pain on whose part? There was certainly pain porting all the code that had to be ported to Python 3 so that the Python developers could have an easier time.
replies(2): >>MangoT+g91 >>MangoT+fb1
◧◩◪◨⬒⬓⬔
23. MangoT+g91[view] [source] [discussion] 2025-12-07 06:48:22
>>SoftTa+h51
> There was certainly pain porting all the code that had to be ported to Python 3

Bitch bitch bitch bitch bitch bitch bitch bitch

Adding parentheses to print isn't that hard, especially with tooling to do it for you. You fucking spoiled brat, you deserved to be beat

◧◩◪◨⬒⬓⬔
24. MangoT+Va1[view] [source] [discussion] 2025-12-07 07:12:29
>>JoshTr+9g
I think you have causation reversed: it would have been at least two orders of magnitude greater to act like moving to python 3 was harder than staying. But you do you boo :emoji-kissey-face:
◧◩◪◨⬒⬓⬔⧯▣
25. MangoT+6b1[view] [source] [discussion] 2025-12-07 07:13:45
>>JoshTr+6V
Ok who would suggest this when the community could take a modicum of responsibility
◧◩◪◨⬒⬓⬔
26. MangoT+fb1[view] [source] [discussion] 2025-12-07 07:14:38
>>SoftTa+h51
Yes, exactly. customers need to stop acting like a bitch if they wanna be taken seriously
[go to top]