Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 6 pull requests #68254

Merged
merged 23 commits into from
Jan 15, 2020
Merged

Rollup of 6 pull requests #68254

merged 23 commits into from
Jan 15, 2020

Conversation

Dylan-DPC-zz
Copy link

Successful merges:

Failed merges:

r? @ghost

crlf0710 and others added 23 commits January 12, 2020 01:51
…oshtriplett

Optimize size/speed of Unicode datasets

The overall implementation has the same general idea as the prior approach,
which was based on a compressed trie structure, but modified to use less space
(and, coincidentally, be an overall performance improvement).

Sizes | Old | New | New/current
-- | -- | -- | --
Alphabetic | 4616 | 2982 | 64.60%
Case_Ignorable | 3144 | 2112 | 67.18%
Cased | 2376 | 934 | 39.31%
Cc | 19 | 43 | 226.32%
Grapheme_Extend | 3072 | 1734 | 56.45%
Lowercase | 2328 | 985 | 42.31%
N | 2648 | 1239 | 46.79%
Uppercase | 1978 | 934 | 47.22%
White_Space | 241 | 140 | 58.09%
  |   |   |
Total | 20422 | 11103 | 54.37%

This table shows the size of the old and new tables in bytes. The most important
of these tables is "Grapheme_Extend", as it is present in essentially all Rust
programs due to being called from `str`'s Debug impl (`char::escape_debug`). In
a representative case given by this [blog post] for the embedded world, the
shrinking in this PR shrinks the final binary by 1,604 bytes, from 14,440 to
12,836.

The performance of these new tables, based on the (rough) benchmark of linearly
scanning the entire valid set of chars, querying for each `is_*`, is roughly
~50% better, though in some cases is either on par or slightly (3-5%) worse. In
practice, I believe the size benefits of this PR are the main concern. The new
implementation has been tested to be equivalent to the current nightly in terms
of returned values on the set of valid chars.

A (relatively) high-level explanation of the specific compression scheme used
can be found [in the generator].

This is split into three commits -- the first adds the generator which produces
the Rust code for the tables, the second adds support code for the lookup, and
the third actually swaps the current implementation out for the new one.

[blog post]: https://jamesmunns.com/blog/fmt-unreasonably-expensive/
[in the generator]: https://github.com/Mark-Simulacrum/rust/blob/unicode-tables/src/tools/unicode-table-generator/src/raw_emitter.rs
Add some regression tests

Closes rust-lang#64848 (fixed by rust-lang#67631)
Closes rust-lang#65918 (ICE is hidden by rust-lang#67000, no longer ICE)
Closes rust-lang#66473 (fixed by rust-lang#68084)
Closes rust-lang#67550 (set mir-opt-level to 3)

r? @Centril
Account for `Path`s in `is_suggestable_infer_ty`

Fix rust-lang#68162.
…i-obk

remove redundant clones, found by clippy
@Dylan-DPC-zz Dylan-DPC-zz added the rollup A PR which is a rollup label Jan 15, 2020
@Dylan-DPC-zz
Copy link
Author

@bors r+ p=6 rollup=never

@bors
Copy link
Contributor

bors commented Jan 15, 2020

📌 Commit 4ff6195 has been approved by Dylan-DPC

@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Jan 15, 2020
@bors
Copy link
Contributor

bors commented Jan 15, 2020

⌛ Testing commit 4ff6195 with merge 3291ae3...

bors added a commit that referenced this pull request Jan 15, 2020
Rollup of 6 pull requests

Successful merges:

 - #68123 (Implement Cursor for linked lists. (RFC 2570).)
 - #68212 (Suggest to shorten temporary lifetime during method call inside generator)
 - #68232 (Optimize size/speed of Unicode datasets)
 - #68236 (Add some regression tests)
 - #68237 (Account for `Path`s in `is_suggestable_infer_ty`)
 - #68252 (remove redundant clones, found by clippy)

Failed merges:

r? @ghost
@bors
Copy link
Contributor

bors commented Jan 15, 2020

☀️ Test successful - checks-azure
Approved by: Dylan-DPC
Pushing 3291ae3 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Jan 15, 2020
@bors bors merged commit 4ff6195 into rust-lang:master Jan 15, 2020
@rust-highfive
Copy link
Collaborator

📣 Toolstate changed by #68254!

Tested on commit 3291ae3.
Direct link to PR: #68254

🎉 rls on linux: test-fail → test-pass (cc @Xanewok, @rust-lang/infra).

rust-highfive added a commit to rust-lang-nursery/rust-toolstate that referenced this pull request Jan 15, 2020
Tested on commit rust-lang/rust@3291ae3.
Direct link to PR: <rust-lang/rust#68254>

🎉 rls on linux: test-fail → test-pass (cc @Xanewok, @rust-lang/infra).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merged-by-bors This PR was explicitly merged by bors. rollup A PR which is a rollup S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants