
Python 3.8 Makes me Sad Again - ilyash
https://ilya-sher.org/2020/08/16/python-3-8-makes-me-sad-again/
======
nightcracker
So the author is sad because Python 3.8 fixes things... too late for their
taste? And they, "as an author of another programming language" would've known
better and never made these "mistakes" to begin with? Get off your high horse.

------
mrweasel
I don’t get the part about unordered maps. Python never promised ordered dicts
(until 3.7) it wasn’t a secret nor did you have any reason to believe that
they would be ordered.

I mean they’re ordered now and that provide some benefit in terms of simpler
code in some cases, but it was never a problem as such.

~~~
swinglock
Besides, Python already had OrderedDict in the standard library for a decade.

------
timonoko

        “Somebody” ignored the wisdom of Lisp, which was 
        “everything is an expression and evaluates to a value” 
        (no statements vs expressions), and made assignment a 
         statement in Python years ago.
    

This was the philosophy of Algol. That is why ":=" was invented there. From
Lex Fridman interview I understood that Guido was not educated enough to
understand some issues, and tried to fix them afterwards. :-)

~~~
yodelshady
Funny, a very similar sentiment, but inverted was expressed in a rant about c#
shared on here a couple of days ago - typing `foo.bar()` and implicitly
discarding the result, because you assumed foo.bar() was a statement.

My first though was "that's the single largest cause of avoidable bugs in my
python code".

------
rbanffy
There is some valid criticism but, as pointed out, fixing language
inconsistencies when there is a corpus of programs already running is not
trivial.

Maybe when we decide to make Python 4.

/me ducks

~~~
smitty1e
I would sure love it if the packaging folks could come to some conclusion.

The fragmented packaging scene is not a core language problem, but a real
source of dismay nonetheless.

~~~
rbanffy
As PyPI is not a curated repository, I don't see how that could be done.

------
wodenokoto
I don't understand the parameter section. What fundamental mistake is python
trying to remedy with the must-be-positional parameter?

I don't get why you would want to force people to not name a parameter.

Like, why is it so bad that I write:

    
    
        myval = mydict.get(mykey, default=mydefault)
    

Who does it help that this throws an error?

~~~
makecheck
In many languages you can do whatever you want with parameter names because
they’re an implementation detail. In Python it’s always been frustrating that
perhaps a less experienced developer can rename a parameter “inside the
function” and break calling code that happened to refer to the name. (And
since it isn’t static/compiled, how long after the change will you see this
break?)

------
xrisk
Is the author sad because Python 3.8 is fixing things? What would he rather
have them do? Not fix things?

Or is he sad because millions of people around the world use Python instead of
his shiny new esolang where he’s managed to get all the things right™?

Hindsight is always 20/20\. This kind of snark achieves nothing.

------
anonymoushn
Why is it useful for maps to be sorted by insertion order?

~~~
lightgreen
However the author did not mention stable order does not come for free. It is
not a trivial decision to make, between ordered and unordered dicts.

~~~
arijun
Actually in this case I believe it did come for free due to a change in the
way dict was implemented in 3.6:

[https://mail.python.org/pipermail/python-
dev/2016-September/...](https://mail.python.org/pipermail/python-
dev/2016-September/146327.html)

~~~
lightgreen
It is not as simple as that. It might looks "free" in this particular
implementation, but it obviously prevents further optimizations.

~~~
cb321
To follow up on lightgreen's comment, in arijun's own linked-to URI they
specifically mention the new level of indirection right away. Indirection is
not "free" at all. For very large dict()s in main memory/DRAM it could be 2X
slower. A hot loop benchmark where the CPU can perfectly predict its near
future work and its prefetcher can mask DRAM latency may not reveal this, but
a less "simple" benchmark would.

The primary point of the ordering feature (and insertion ordering) is because
Python uses that very same dict implementation for language features such as
keyword args {def foo(\ _\_ kwargs)}. Changing to hash-order from "source
code"-order can be confusing.

~~~
arijun
The reason for the change for more compact dicts. Thus the fact that it also
preserved insertion order was a happy accident with no additional cost; what I
called "free".

------
samaxe
> My perspective is biased towards correctness and “WTF are you doing?”

What an arrogant and pompous thing to say.

That tells everything you need to know, the author thinks of themselves as
some sort of intellectual God.

------
pella
Q: Python 3.9 is better ?

[https://docs.python.org/3.9/whatsnew/3.9.html](https://docs.python.org/3.9/whatsnew/3.9.html)

~~~
cardamomo
If you're a teapot, it's definitely better.

> HTTP status codes 103 EARLY_HINTS, 418 IM_A_TEAPOT and 425 TOO_EARLY are
> added to http.HTTPStatus. (Contributed by Dong-hee Na in bpo-39509 and Ross
> Rhodes in bpo-39507.)

------
badrabbit
I get why a CI/CD approach is taken with modern languages but you can't revert
changes with programmimg languages like you can with APIs. My view is, long-
term supported new features are fine but deprecation of existing features and
code breaking changes should be constrained to a major version change (like
2.7 -> 3) and that should happen at most once in a decade.

I wish more programmers that work outside of the tech industry would
contribute to these discussions.

------
ilyash
Clarification: NGS sucks differently. That's it.

Don't know how you guys get from "From my perspective, all languages suck,
while NGS aims to suck less than the rest for the intended use cases" to how
NGS is generally good or generally better than other languages or did/would
avoid mistakes.

Note "aims to suck less", not even "sucks less".

Thanks, OP

------
Grue3
>This works because regular dicts have guaranteed ordering since Python 3.7

But the API is different! OrderedDict has more methods that have to do with
order, and `reverse` works on its `.keys()` and `.values()`. Or did they fix
this in 3.8?

------
icebraining
PHP also had ordered maps from the start.

~~~
gus_massa
I think the problem is that a lot of people get used to ordered maps in PHP
and then expected the maps to be ordered in other languages.

------
aoowii
This is fairly low effort, and it doesn't even take much effort to find flaws
with Python.

------
komuher
Meh another shit-post for some clout.

~~~
lightgreen
Disagreement with post doesn’t make it shit. Diversity of opinions is great.

But calling the post shit instead of providing any arguments definitely does
not make a constructive helpful discussion. Such comments are just noise.

~~~
sealjam
I think parent is using “shit-post” to describe a negative post.

Like this:
[https://en.m.wikipedia.org/wiki/Shitposting](https://en.m.wikipedia.org/wiki/Shitposting)

~~~
lightgreen
Does not look obviously negative to me.

Thank you for the link though.

