If you call something "stupid" it doesn't really convey anything meaningful, especially not in the way you're using there, it comes across as "I don't actually have a reason I don't like it, I just don't".
The programming languages world is broad/varied enough that any statement like "no other language does this!" is almost certainly wrong (outside of esoteric languages, which python and php most certainly are not)
__add, __sub, __mul, __div, __mod, __pow, __unm, __idiv
__band, __bor, __bxor, __bnot, __shl, __shr
__concat, __len
__eq, __lt, __le
__index, __newindex, __call
__gc, __close, __mode, __namehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
so it settled on having this syntax for similar cases using "Symbol":
class Foo { *[Symbol.iterator]() { yield 1; yield 2; yield 3; } }
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macro...
Now you don't need to write your double-underscore methods ever again, if you don't want to.