Open CAD97 opened 6 years ago
I modified the name tables to use static
s instead of const
s, and compile time got somewhat worse, moving from const checking to borrow checking.
See https://github.com/rust-lang/rust/issues/48009 for the upstream issue report. Turns out this is only on nightly (I thought my default at the time was stable but it was nightly).
Some people at the miri thread has suggested to use an binary file for storing the items, then loading it with include_bytes!
. This way it should be least stressing to the compiler.
Maybe try using some serde-based format (which doesn't need a separate schema file) or Cap'n Proto (which is mmap-friendly) to store the data?
I decided to work on a PR using Cap'n Proto. Stay tuned.
Giving up for now due to https://github.com/capnproto/capnproto-rust/issues/71 and extensive no_std
usage inside this crate.
....I am so confused. The compile time unregressed on the latest nightly (27a046e93 2018-02-18)
and is fine on stable/beta (~19s) / nightly (~16s) currently...
It's definitely degraded from when it was first merged. I'm trying to make a self-contained case to submit to the rust-lang repository as an issue in compile times.
cargo +nightly rustc --package=unic-ucd-name -- -Z time-passes
Output
``` Compiling unic-ucd-name v0.6.0 (file:///D:/Christopher/Documents/Code/Rust/rust-unic/unic/ucd/name) time: 0.001; rss: 18MB parsing time: 0.000; rss: 18MB recursion limit time: 0.000; rss: 18MB crate injection time: 0.000; rss: 18MB plugin loading time: 0.000; rss: 18MB plugin registration time: 0.000; rss: 18MB background load prev dep-graph time: 0.582; rss: 102MB expansion time: 0.000; rss: 102MB maybe building test harness time: 0.009; rss: 102MB maybe creating a macro crate time: 0.032; rss: 102MB creating allocators time: 0.011; rss: 102MB AST validation time: 0.122; rss: 120MB name resolution time: 0.026; rss: 120MB complete gated feature checking time: 0.000; rss: 120MB blocked while dep-graph loading finishes time: 0.150; rss: 168MB lowering ast -> hir time: 0.064; rss: 168MB early lint checks time: 0.183; rss: 176MB indexing hir time: 0.000; rss: 118MB load query result cache time: 0.000; rss: 118MB looking for entry point time: 0.000; rss: 118MB looking for plugin registrar time: 0.010; rss: 118MB loop checking time: 0.040; rss: 118MB static item recursion checking time: 0.040; rss: 131MB attribute checking time: 0.061; rss: 139MB stability checking time: 0.197; rss: 186MB type collecting time: 0.002; rss: 186MB outlives testing time: 0.001; rss: 186MB impl wf inference time: 0.024; rss: 193MB coherence checking time: 0.001; rss: 193MB variance testing time: 0.286; rss: 233MB wf checking time: 4.539; rss: 306MB item-types checking time: 0.042; rss: 311MB item-bodies checking time: 123.153; rss: 532MB const checking # !!!!!!!!!!!!!!!!!!!! time: 0.183; rss: 533MB privacy checking time: 0.026; rss: 533MB intrinsic checking time: 0.045; rss: 535MB match checking time: 0.011; rss: 535MB liveness checking time: 0.590; rss: 544MB borrow checking time: 0.024; rss: 546MB MIR borrow checking time: 0.007; rss: 546MB MIR effect checking time: 0.048; rss: 547MB death checking time: 0.000; rss: 547MB unused lib feature checking time: 0.164; rss: 548MB lint checking time: 0.000; rss: 548MB resolving dependency formats time: 1.097; rss: 597MB write metadata time: 0.083; rss: 598MB translation item collection time: 0.001; rss: 598MB codegen unit partitioning time: 0.001; rss: 602MB llvm function passes [49a7n47po4ttqjl7] time: 0.001; rss: 604MB llvm module passes [49a7n47po4ttqjl7] time: 0.017; rss: 623MB codegen passes [49a7n47po4ttqjl7] time: 0.000; rss: 642MB llvm function passes [2ny9ynlpevlhfa8x] time: 0.000; rss: 642MB llvm module passes [2ny9ynlpevlhfa8x] time: 0.000; rss: 642MB llvm function passes [16u6js6g0l3k1ic6] time: 0.000; rss: 642MB llvm module passes [16u6js6g0l3k1ic6] time: 0.000; rss: 642MB llvm function passes [2jqywn86b2gsqohu] time: 0.000; rss: 642MB llvm module passes [2jqywn86b2gsqohu] time: 0.000; rss: 644MB llvm function passes [3fh06zvk9bptbvw9] time: 0.000; rss: 644MB llvm module passes [3fh06zvk9bptbvw9] time: 0.000; rss: 644MB llvm function passes [2lyh15q6cjwzy18c] time: 0.000; rss: 644MB llvm module passes [2lyh15q6cjwzy18c] time: 0.000; rss: 644MB llvm function passes [9fcb3syd3ne5k0n] time: 0.000; rss: 644MB llvm module passes [9fcb3syd3ne5k0n] time: 0.000; rss: 644MB llvm function passes [8xzrsc1ux72v29j] time: 0.000; rss: 644MB llvm module passes [8xzrsc1ux72v29j] time: 0.011; rss: 646MB codegen passes [2jqywn86b2gsqohu] time: 0.017; rss: 646MB codegen passes [2ny9ynlpevlhfa8x] time: 0.000; rss: 646MB llvm function passes [4ypvbwho0bu5tnww] time: 0.000; rss: 646MB llvm module passes [4ypvbwho0bu5tnww] time: 0.000; rss: 646MB llvm function passes [9elsx31vb4it187] time: 0.000; rss: 646MB llvm module passes [9elsx31vb4it187] time: 0.015; rss: 647MB codegen passes [2lyh15q6cjwzy18c] time: 0.013; rss: 647MB codegen passes [9fcb3syd3ne5k0n] time: 0.015; rss: 647MB codegen passes [3fh06zvk9bptbvw9] time: 0.000; rss: 647MB llvm function passes [98g0d9x8aw3akpe] time: 0.000; rss: 647MB llvm module passes [98g0d9x8aw3akpe] time: 0.000; rss: 647MB llvm function passes [2xnvmuhjbhd7vxcm] time: 0.000; rss: 647MB llvm module passes [2xnvmuhjbhd7vxcm] time: 0.633; rss: 647MB translate to LLVM IR time: 0.000; rss: 647MB assert dep graph time: 0.000; rss: 647MB llvm function passes [1y16o1qfye96o7m0] time: 0.000; rss: 647MB llvm module passes [1y16o1qfye96o7m0] time: 0.029; rss: 647MB codegen passes [16u6js6g0l3k1ic6] time: 0.010; rss: 648MB codegen passes [9elsx31vb4it187] time: 0.000; rss: 648MB llvm function passes [524bze3gcv99ucga] time: 0.000; rss: 648MB llvm module passes [524bze3gcv99ucga] time: 0.013; rss: 648MB codegen passes [4ypvbwho0bu5tnww] time: 0.000; rss: 648MB llvm function passes [48721dc4k5qxei0u] time: 0.000; rss: 648MB llvm module passes [48721dc4k5qxei0u] time: 0.000; rss: 648MB llvm function passes [4yh8x2b62dcih00t] time: 0.000; rss: 648MB llvm module passes [4yh8x2b62dcih00t] time: 0.010; rss: 648MB codegen passes [98g0d9x8aw3akpe] time: 0.009; rss: 649MB codegen passes [1y16o1qfye96o7m0] time: 0.011; rss: 650MB codegen passes [2xnvmuhjbhd7vxcm] time: 0.011; rss: 650MB codegen passes [524bze3gcv99ucga] time: 0.009; rss: 650MB codegen passes [48721dc4k5qxei0u] time: 0.010; rss: 651MB codegen passes [8xzrsc1ux72v29j] time: 0.009; rss: 651MB codegen passes [4yh8x2b62dcih00t] time: 0.072; rss: 653MB llvm function passes [2iv7jmandrgcbb7e] time: 0.000; rss: 653MB llvm module passes [2iv7jmandrgcbb7e] time: 0.725; rss: 690MB persist query result cache time: 0.167; rss: 746MB persist dep-graph time: 0.892; rss: 746MB serialize dep graph time: 2.750; rss: 746MB translation time: 1.143; rss: 242MB codegen passes [2iv7jmandrgcbb7e] time: 2.453; rss: 206MB LLVM passes time: 0.002; rss: 204MB serialize work products time: 0.433; rss: 205MB linking Finished dev [unoptimized + debuginfo] target(s) in 135.69 secs ```I think we may have stumbled across a quadratic time cost in the string interner, and my playing around with ways of formulating it back in #103/#125 stumbled across a case that at the time didn't do so bad for some reason. (1.25 Nightly)