It's like `Symbol` but for byte strings. The interner is now used for both `Symbol` and `ByteSymbol`. E.g. if you intern `"dog"` and `b"dog"` you'll get a `Symbol` and a `ByteSymbol` with the same index and the characters will only be stored once. The motivation for this is to eliminate the `Arc`s in `ast::LitKind`, to make `ast::LitKind` impl `Copy`, and to avoid the need to arena-allocate `ast::LitKind` in HIR. The latter change reduces peak memory by a non-trivial amount on literal-heavy benchmarks such as `deep-vector` and `tuple-stress`. `Encoder`, `Decoder`, `SpanEncoder`, and `SpanDecoder` all get some changes so that they can handle normal strings and byte strings. This change does slow down compilation of programs that use `include_bytes!` on large files, because the contents of those files are now interned (hashed). This makes `include_bytes!` more similar to `include_str!`, though `include_bytes!` contents still aren't escaped, and hashing is still much cheaper than escaping. |
||
|---|---|---|
| .. | ||
| analyze_source_file | ||
| edit_distance | ||
| source_map | ||
| symbol | ||
| analyze_source_file.rs | ||
| caching_source_map_view.rs | ||
| def_id.rs | ||
| edit_distance.rs | ||
| edition.rs | ||
| fatal_error.rs | ||
| hygiene.rs | ||
| lib.rs | ||
| profiling.rs | ||
| source_map.rs | ||
| span_encoding.rs | ||
| symbol.rs | ||
| tests.rs | ||