You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+53Lines changed: 53 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -28,6 +28,7 @@ We use the GSoC project size parameters for estimating the expected time complex
28
28
-[Bootstrap of rustc with rustc_codegen_gcc](#Bootstrap-of-rustc-with-rustc_codegen_gcc)
29
29
-[Refactoring of rustc_codegen_ssa to make it more convenient for the GCC codegen](#Refactoring-of-rustc_codegen_ssa-to-make-it-more-convenient-for-the-GCC-codegen)
30
30
-[ABI/Layout handling for the automatic differentiation feature](#abilayout-handling-for-the-automatic-differentiation-feature)
Improving compiler performance has always been a focus of the Rust community and one of the main tasks of the compiler team. [Parallelization](https://rustc-dev-guide.rust-lang.org/parallel-rustc.html) of rust compiler is an important and effective approach.
303
+
Currently, the backend end (codegen part) of the compiler has been parallelized, which has brought a huge improvement in the performance of the compiler. However, there is still much room for improvement in the parallelization of the rust frontend.
304
+
305
+
The most important and valuable work in this area are two aspects:
306
+
307
+
A) Diagnosing and fixing deadlock [issues](https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3AWG-compiler-parallel+deadlock) caused by the execution order of compiler queries in a multithreaded environment.
308
+
[Queries](https://rustc-dev-guide.rust-lang.org/query.html) is a unique design of the Rust compiler, which is used to achieve incremental compilation process. It divides the compiler
309
+
process into various parts and caches the execution results of each part. However, queries caching dependencies between multiple threads may cause deadlock.
310
+
[`Work-stealing`](https://en.wikipedia.org/wiki/Work_stealing), a method used to improve parallelization performance, is the core reason.
311
+
312
+
To solve these problems, we need to find the part of the compiler process that causes deadlock through diagnosing coredumps in issues, and adjusting the execution order
313
+
of this part of code so that there will be no circular dependencies on the query caches between multiple threads. This [PR](https://github.com/rust-lang/rust/pull/118488) is a good example of solving a deadlock problem.
314
+
315
+
B) Improving the performance of the parallel frontend
316
+
The parallel frontend has implemented parallelization in type checking, MIR borrow checking and other parts of the compiler. However, there is still a lot of room for improvement:
317
+
- HIR lowering. Modifying the array structure of `tcx.untracked.definitions` so that it can be accessed efficiently in multiple threads is likely to be the key.
318
+
- Macro expansion. How to deal with the order problem of name resolution during macro expansion is a difficult problem.
319
+
- Lexing and/or parsing.
320
+
321
+
Achieving the above goals is of big significance to improving the performance of the Rust compiler.
322
+
323
+
The project could choose either one of these two areas, or try to tackle both of them together.
324
+
325
+
**Expected result**
326
+
327
+
Parallel frontend will not cause deadlock issues. We can ensure usability through [UI testing](https://github.com/rust-lang/rust/pull/132051).
328
+
329
+
The performance of the compiler will be improved, ideally at least by a couple of percentage points.
330
+
331
+
**Desirable skills**
332
+
333
+
Intermediate knowledge of Rust. A basic understanding of the implementation of the compiler process (such as typeck, hir_lowering, macro expansion) would be ideal.
334
+
335
+
**Project size**
336
+
337
+
Medium to hard (depending on the chosen scope).
338
+
339
+
**Difficulty**
340
+
341
+
Medium to hard.
342
+
343
+
**Mentor**
344
+
- Sparrow Li ([GitHub](https://github.com/SparrowLii), [Zulip](https://rust-lang.zulipchat.com/#narrow/dm/353056-Sparrow-Li))
345
+
346
+
**Zulip streams**
347
+
- Idea discussion (TODO)
348
+
-[Parallel frontend working group](https://rust-lang.zulipchat.com/#narrow/channel/187679-t-compiler.2Fwg-parallel-rustc)
0 commit comments