rust-lang / rust-lang/polonius

Extremely slow while compiling pulldown-cmark

Open
#199 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
1.7k
Forks
86
PR merge metrics
No merged PRs in 30d

Description

With cargo new pd && cd pd && cargo add pulldown-cmark && cargo check, it tooks ~10 minutes for finishing checking crate pulldown-cmark.

Test Code

[neutron@3060 pd]$ cargo clean && cargo check --timings && mv target/cargo-timings/cargo-timing.html ./cargo-timing-native.html
     Removed 69 files, 10.1MiB total
   Compiling pulldown-cmark v0.13.0
    Checking unicode-width v0.1.14
    Checking unicase v2.8.1
    Checking bitflags v2.9.0
    Checking pulldown-cmark-escape v0.11.0
    Checking memchr v2.7.4
    Checking getopts v0.2.21
    Checking pd v0.1.0 (/me/pd)
      Timing report saved to /me/pd/target/cargo-timings/cargo-timing-20250306T125131Z.html
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.18s
[neutron@3060 pd]$ vi ~/.cargo/config.toml # adding -Zpolonius
[neutron@3060 pd]$ cargo clean && cargo check --timings && mv target/cargo-timings/cargo-timing.html ./cargo-timing-polonius.html
     Removed 69 files, 10.1MiB total
    Checking unicode-width v0.1.14
   Compiling pulldown-cmark v0.13.0
    Checking bitflags v2.9.0
    Checking memchr v2.7.4
    Checking pulldown-cmark-escape v0.11.0
    Checking unicase v2.8.1
    Checking getopts v0.2.21
    Checking pd v0.1.0 (/me/pd)
      Timing report saved to /me/pd/target/cargo-timings/cargo-timing-20250306T125213Z.html
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 10m 12s

Compiled file and System Informations:

[neutron@3060 pd]$ rustc --version
rustc 1.87.0-nightly (f4a216d28 2025-03-02)
[neutron@3060 pd]$ cat Cargo.toml 
[package]
name = "pd"
version = "0.1.0"
edition = "2024"
publish = ["crates-io"]

[dependencies]
pulldown-cmark = "0.13.0"
[neutron@3060 pd]$ cat ~/.cargo/config.toml 
[cargo-new]
vcs = "none"

[registry]
default = 'crates-io'
token = '(...Omit...)'

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

[source.tuna]
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"

[http]
#multiplexing = false

[net]
retry = 5 # network retries
#git-fetch-with-cli = true

[profile.release]
opt-level = 3
strip = true
codegen-units = 1

[profile.lto]
inherits = "release"
lto = true

[profile.thin]
inherits = "lto"
lto = "thin"

[alias]
rr = "run --release"
rl = "run --profile lto"
rt = "run --profile thin"
br = "build --release"
bl = "build --profile lto"
bt = "build --profile thin"
p = "publish --registry crates-io"

[target.'cfg(all())']
rustflags = ["-C", "link-arg=-fuse-ld=mold", "-C", "target-cpu=native", "-Zpolonius"]

[term]
color = 'auto'
progress.when = 'auto'
progress.width = 160

Native result (generating by cargo check --timings)

Unit Total Codegen Features
1. pulldown-cmark v0.13.0 lib (check) 0.7s 0.0s (2%) default, getopts, html, pulldown-cmark-escape
2. memchr v2.7.4 lib (check) 0.3s 0.0s (3%) alloc, default, std
3. unicode-width v0.1.14 lib (check) 0.2s 0.0s (4%) cjk, default
4. unicase v2.8.1 lib (check) 0.1s 0.0s (5%)
5. bitflags v2.9.0 lib (check) 0.1s 0.0s (6%)
6. getopts v0.2.21 lib (check) 0.1s 0.0s (6%)
7. pulldown-cmark v0.13.0 build script 0.1s default, getopts, html, pulldown-cmark-escape
8. pulldown-cmark-escape v0.11.0 lib (check) 0.1s 0.0s (13%)
9. pd v0.1.0 bin "pd" (check) 0.0s 0.0s (22%)
10. pulldown-cmark v0.13.0 build script (run) 0.0s default, getopts, html, pulldown-cmark-escape

pulldown-cmark result

Unit Total Codegen Features
1. pulldown-cmark v0.13.0 lib (check) 609.7s 0.0s (0%) default, getopts, html, pulldown-cmark-escape
2. memchr v2.7.4 lib (check) 2.5s 0.0s (1%) alloc, default, std
3. unicase v2.8.1 lib (check) 2.3s 0.0s (0%)
4. unicode-width v0.1.14 lib (check) 1.6s 0.0s (0%) cjk, default
5. getopts v0.2.21 lib (check) 0.9s 0.0s (1%)
6. bitflags v2.9.0 lib (check) 0.2s 0.0s (3%)
7. pulldown-cmark-escape v0.11.0 lib (check) 0.1s 0.0s (4%)
8. pulldown-cmark v0.13.0 build script 0.1s default, getopts, html, pulldown-cmark-escape
9. pd v0.1.0 bin "pd" (check) 0.0s 0.0s (21%)
10. pulldown-cmark v0.13.0 build script (run) 0.0s default, getopts, html, pulldown-cmark-escape

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the reported cargo check --timings comparison for pulldown-cmark v0.13.0, using the supplied ~/.cargo/config.toml with and without -Zpolonius. Compare the timing reports and trace the slowdown into the Polonius-related compiler entry points; done means identifying the cause and defining a verified fix for the compilation regression.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers, performance
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.