Hacker News new | past | comments | ask | show | jobs | submit login

Every single language has parts that are a mess, or at least not perfectly designed. But that doesn't mean that languages all have an equal amount of mess. Python clearly has less mess than Perl. Rust clearly has less mess than C++. Zig clearly has less mess than C.

There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.






The fallacy of gray?

https://www.greaterwrong.com/posts/dLJv2CoRCgeC2mPgj/the-fal...

> The Sophisticate: “The world isn’t black and white. No one does pure good or pure bad. It’s all gray. Therefore, no one is better than anyone else.”

> The Zetet: “Knowing only gray, you conclude that all grays are the same shade. You mock the simplicity of the two-color view, yet you replace it with a one-color view . . .”

> —Marc Stiegler, David’s Sling


Ah nice, thanks!

> There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.

I think this falls under splitting (black-and-white thinking), a form of defense mechanism or (I suspect) mere rhetorical tool.

https://en.wikipedia.org/wiki/Black_and_white_thinking


No, black and white thinking is a different thing. It's "the fallacy of grey", linked in a sibling comment.

> There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.

https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good


That's a totally different thing.


Also not the same thing. That would be someone saying "we can't use any language because they all have flaws".

The one I'm talking about is the fallacy of grey, linked from a sibling comment.


In Python, default arguments are mutable. That's the ultimate WTF and footgun.

That's somewhat of misnomer. The root cause is that default arguments are evaluated during function creation rather than when the function called. And... this is invaluable for forcing immediate evaluation of otherwise late-binding closures.

What can be confusing is mixed lifetimes of nested generators using `yield from`. If any outer generator has a shorter lifetime, when it is garbage collected `yield from` will forward `close()` to the inner generator. Attempting to re-use the inner generator will result in a premature `StopIteration`. Iterators do not have `close()` and so are unaffected. This affects only `yield from` and not `for i in gen: yield i`.


Yeah that is definitely a footguns but I think calling it the ultimate footgun is overselling it. Perl implicitly casts between strings and integers. That's a waaaay bigger footgun.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: