On Sat, 23 Jan 2021 19:04:08 +0900 Inada Naoki firstname.lastname@example.org wrote:
On Sat, Jan 23, 2021 at 10:47 AM Chris Angelico email@example.com wrote:
Highly dubious. I'd rather focus on just moving to UTF-8 as the default, rather than bringing in a new function - especially with such a confusing name.
What exactly are the blockers on making open(fn) use UTF-8 by default?
Backward compatibility. That's what PEP 597 tries to solve.
- Add optional warning for `open()` call without specifying
`encoding` option. (PEP 597) 2. (Several years later) Make the warning default. 3. (Several years later) Change the default encoding.
When (2) happens, users are forced to write `encoding="utf-8"` to suppress the warning.
But note that the default encoding is "utf-8" already in (most) Linux including WSL, macOS, iOS, and Android. And Windows user can read ASCII text files without specifying `encoding` regardless default encoding is legacy codec or "utf-8". So adding `, encoding="utf-8"` everywhere `open()` is used might be tedious job.
On the other hand, if we add `open_text()`:
- Replacing open with open_text is easier than adding `,
How is it easier, if "open_text" exists only in imagination, while encoding="utf-8" has been there all this time?
The only easier thing than adding 'encoding="utf-8"' would be:
1. Just go ahead and switch the default encoding to utf-8 right away. 2. For backward compatibility, add "python3 --backward-compatibility" switch. Perhaps even tell users to use it straight in the UnicodeDecodeError backtrace.
- Teachers can teach to use `open_text` to open text files. Students
can use "utf-8" by default without knowing about what encoding is.
Let's also add max_int(), min_int(), max_float(), min_float() builtins. Teachers can teach that if you need to min ints, then to use min_int(), if you need to min floats, then to use min_float(), and otherwise, use min(). Bonus point: max_int(), min_int(), max_float(), min_float() are all easier to annotate.
So `open_text()` can provide better developer experience, without waiting 10 years.
Except that in 10 years, when the default encoding is finally changed, open_text() is a useless function, which now needs to be deprecated and all the fun process repeated again.