[#107430] [Ruby master Feature#18566] Merge `io-wait` gem into core IO — "byroot (Jean Boussier)" <noreply@...>
Issue #18566 has been reported by byroot (Jean Boussier).
22 messages
2022/02/02
[ruby-core:107531] [Ruby master Feature#18576] Rename `ASCII-8BIT` encoding to `BINARY`
From:
"tenderlovemaking (Aaron Patterson)" <noreply@...>
Date:
2022-02-09 16:52:29 UTC
List:
ruby-core #107531
Issue #18576 has been updated by tenderlovemaking (Aaron Patterson).
First, I agree with this proposal. Second, I think this example should raise an exception:
```ruby
u = (b = "abcde".force_encoding('ASCII-8BIT')).encode('UTF-8')
```
But I can open a different ticket for that. The point I actually want to make is that I've never seen this use case in the wild. 100% of the cases I've seen for `force_encoding('ASCII-8BIT')` are when the developer knows the string is binary (or unknown) data and they want to treat it as binary / unknown data *not* as "might be US-ASCII sometimes". The name "binary" would more accurately reflect real world usage IMO.
----------------------------------------
Feature #18576: Rename `ASCII-8BIT` encoding to `BINARY`
https://bugs.ruby-lang.org/issues/18576#change-96443
* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
### Context
I'm now used to it, but something that confused me for years was errors such as:
```ruby
>> "f辿e" + "\xFF".b
(irb):3:in `+': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
```
When you aren't that familiar with Ruby, it's really not evident that `ASCII-8BIT` basically means "no encoding" or "binary".
And even when you know it, if you don't read carefully it's very easily confused with `US-ASCII`.
The `Encoding::BINARY` alias is much more telling IMHO.
### Proposal
Since `Encoding::ASCII_8BIT` has been aliased as `Encoding::BINARY` for years, I think renaming it to `BINARY` and then making asking `ASCII_8BIT` the alias would significantly improve usability without backward compatibility concerns.
The only concern I could see would be the consistency with a handful of C API functions:
- `rb_encoding *rb_ascii8bit_encoding(void)`
- `int rb_ascii8bit_encindex(void)`
- `VALUE rb_io_ascii8bit_binmode(VALUE io)`
But that's for much more advanced users, so I don't think it's much of a concern.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>