7 ms·
Python 3.8 Makes me Sad Again
- komuher 6y agoMeh another shit-post for some clout.
- mvanbaak 6y agoYups. Couple of items are “$thing got fixed. It was wrong. Im sad” and then state how their own project did it right. Cool story bro
- lightgreen 6y agoDisagreement 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 6y agoI 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 6y agoDoes not look obviously negative to me. Thank you for the link though.
- pella 6y agoQ: 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 6y agoIf 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.)
- icebraining 6y agoPHP also had ordered maps from the start.
- gus_massa 6y agoI 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.
- rbanffy 6y agoThere 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
- anonymoushn 6y agoWhy is it useful for maps to be sorted by insertion order?
- lightgreen 6y agoIt makes execution reproducible.
- anonymoushn 6y agoAlmost any hash table implementation will give the same iteration order for the same sequence of insertions and deletions across program executions. So this would already be true even if the order was not the insertion order. Golang starts iterations in a random position each run to prevent people from relying on the ordering.
- lightgreen 6y agoNot “almost any”. Good hashtables intentionally mix random numbers into hashes to prevent DOS attacks. And also, even if hashtables are stable, the hashes of the objects might not be (depend on the addresses for example).
- arnvald 6y agoI think Go does it very well here (since they don't want to guarantee the order) - getting consistent order in almost every case is the worst of both worlds, because people won't learn about the underlying implementation, they'll notice that it seems ordered and will rely on this behaviour.
- anonymoushn 6y agoAs lightgreen points out in a sibling comment, it's common recently for languages to use a secure randomized hash like siphash and generate different orderings per program execution. It seems like that's the approach more languages should take.
- 6y ago
- aoowii 6y agoThis is fairly low effort, and it doesn't even take much effort to find flaws with Python.
- mrweasel 6y agoI 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 6y agoBesides, Python already had OrderedDict in the standard library for a decade.
- Someone 6y agoI think it refers to the fact that, if dictionaries do not promise to be ordered but have predictable (and consistent between runs) iteration order (e.g. by insertion order), code can start depending on that. Some people think that, if code ‘out there’ starts depending on that, it’s better to update the documented API to promise what it actually does.
- nightcracker 6y agoSo 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.
- deleted 6y ago[deleted]
- timonoko 6y ago“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 6y agoFunny, 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".
- badrabbit 6y agoI 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.
- xrisk 6y agoIs 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.
- wodenokoto 6y agoI 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?
- xrisk 6y agohttps://www.python.org/dev/peps/pep-0570/ https://www.python.org/dev/peps/pep-0570/
- makecheck 6y agoIn 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?)
- ilyash 6y agoClarification: 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
- samaxe 6y ago> 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.
- Grue3 6y ago>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?