Skip to content

Commit fbe8f83

Browse files
committed
Merge remote-tracking branch 'rust-lang/master'
2 parents 40622c7 + b5a2b93 commit fbe8f83

27 files changed

+1696
-560
lines changed

ci/install.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ function cargo_install() {
2020
fi
2121
}
2222

23-
cargo_install mdbook 0.2.3
24-
cargo_install mdbook-linkcheck 0.2.3
23+
cargo_install mdbook 0.3.0
24+
cargo_install mdbook-linkcheck 0.3.0

src/SUMMARY.md

+11
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
- [The HIR (High-level IR)](./hir.md)
4040
- [Lowering AST to HIR](./lowering.md)
4141
- [Debugging](./hir-debugging.md)
42+
- [Closure expansion](./closure.md)
4243
- [The `ty` module: representing types](./ty.md)
4344
- [Kinds](./kinds.md)
4445
- [Type inference](./type-inference.md)
@@ -75,6 +76,12 @@
7576
- [Move paths](./borrow_check/moves_and_initialization/move_paths.md)
7677
- [MIR type checker](./borrow_check/type_check.md)
7778
- [Region inference](./borrow_check/region_inference.md)
79+
- [Constraint propagation](./borrow_check/region_inference/constraint_propagation.md)
80+
- [Lifetime parameters](./borrow_check/region_inference/lifetime_parameters.md)
81+
- [Member constraints](./borrow_check/region_inference/member_constraints.md)
82+
- [Placeholders and universes][pau]
83+
- [Closure constraints](./borrow_check/region_inference/closure_constraints.md)
84+
- [Errror reporting](./borrow_check/region_inference/error_reporting.md)
7885
- [Two-phase-borrows](./borrow_check/two_phase_borrows.md)
7986
- [Constant evaluation](./const-eval.md)
8087
- [miri const evaluator](./miri.md)
@@ -83,11 +90,15 @@
8390
- [Updating LLVM](./codegen/updating-llvm.md)
8491
- [Debugging LLVM](./codegen/debugging.md)
8592
- [Profile-guided Optimization](./profile-guided-optimization.md)
93+
- [Debugging Support in Rust Compiler](./debugging-support-in-rustc.md)
8694

8795
---
8896

8997
[Appendix A: Stupid Stats](./appendix/stupid-stats.md)
9098
[Appendix B: Background material](./appendix/background.md)
9199
[Appendix C: Glossary](./appendix/glossary.md)
92100
[Appendix D: Code Index](./appendix/code-index.md)
101+
[Appendix E: Bibliography](./appendix/bibliography.md)
93102
[](./important-links.md)
103+
104+
[pau]: ./borrow_check/region_inference/placeholders_and_universes.md

src/appendix/bibliography.md

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Rust Bibliography
2+
3+
This is a reading list of material relevant to Rust. It includes prior
4+
research that has - at one time or another - influenced the design of
5+
Rust, as well as publications about Rust.
6+
7+
## Type system
8+
9+
* [Region based memory management in Cyclone](https://www.cs.umd.edu/projects/cyclone/papers/cyclone-regions.pdf)
10+
* [Safe manual memory management in Cyclone](http://www.cs.umd.edu/projects/PL/cyclone/scp.pdf)
11+
* [Typeclasses: making ad-hoc polymorphism less ad hoc](http://www.ps.uni-sb.de/courses/typen-ws99/class.ps.gz)
12+
* [Macros that work together](https://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf)
13+
* [Traits: composable units of behavior](http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf)
14+
* [Alias burying](http://www.cs.uwm.edu/faculty/boyland/papers/unique-preprint.ps) - We tried something similar and abandoned it.
15+
* [External uniqueness is unique enough](http://www.cs.uu.nl/research/techreps/UU-CS-2002-048.html)
16+
* [Uniqueness and Reference Immutability for Safe Parallelism](https://research.microsoft.com/pubs/170528/msr-tr-2012-79.pdf)
17+
* [Region Based Memory Management](http://www.cs.ucla.edu/~palsberg/tba/papers/tofte-talpin-iandc97.pdf)
18+
19+
## Concurrency
20+
21+
* [Singularity: rethinking the software stack](https://research.microsoft.com/pubs/69431/osr2007_rethinkingsoftwarestack.pdf)
22+
* [Language support for fast and reliable message passing in singularity OS](https://research.microsoft.com/pubs/67482/singsharp.pdf)
23+
* [Scheduling multithreaded computations by work stealing](http://supertech.csail.mit.edu/papers/steal.pdf)
24+
* [Thread scheduling for multiprogramming multiprocessors](http://www.eecis.udel.edu/%7Ecavazos/cisc879-spring2008/papers/arora98thread.pdf)
25+
* [The data locality of work stealing](http://www.aladdin.cs.cmu.edu/papers/pdfs/y2000/locality_spaa00.pdf)
26+
* [Dynamic circular work stealing deque](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.170.1097&rep=rep1&type=pdf) - The Chase/Lev deque
27+
* [Work-first and help-first scheduling policies for async-finish task parallelism](http://www.cs.rice.edu/%7Eyguo/pubs/PID824943.pdf) - More general than fully-strict work stealing
28+
* [A Java fork/join calamity](http://www.coopsoft.com/ar/CalamityArticle.html) - critique of Java's fork/join library, particularly its application of work stealing to non-strict computation
29+
* [Scheduling techniques for concurrent systems](http://www.stanford.edu/~ouster/cgi-bin/papers/coscheduling.pdf)
30+
* [Contention aware scheduling](http://www.blagodurov.net/files/a8-blagodurov.pdf)
31+
* [Balanced work stealing for time-sharing multicores](http://www.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-12-1.pdf)
32+
* [Three layer cake for shared-memory programming](http://dl.acm.org/citation.cfm?id=1953616&dl=ACM&coll=DL&CFID=524387192&CFTOKEN=44362705)
33+
* [Non-blocking steal-half work queues](http://www.cs.bgu.ac.il/%7Ehendlerd/papers/p280-hendler.pdf)
34+
* [Reagents: expressing and composing fine-grained concurrency](http://aturon.github.io/academic/reagents.pdf)
35+
* [Algorithms for scalable synchronization of shared-memory multiprocessors](https://www.cs.rochester.edu/u/scott/papers/1991_TOCS_synch.pdf)
36+
* [Epoch-based reclamation](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-579.pdf).
37+
38+
## Others
39+
40+
* [Crash-only software](https://www.usenix.org/legacy/events/hotos03/tech/full_papers/candea/candea.pdf)
41+
* [Composing High-Performance Memory Allocators](http://people.cs.umass.edu/~emery/pubs/berger-pldi2001.pdf)
42+
* [Reconsidering Custom Memory Allocation](http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf)
43+
44+
## Papers *about* Rust
45+
46+
* [GPU Programming in Rust: Implementing High Level Abstractions in a Systems
47+
Level
48+
Language](https://www.cs.indiana.edu/~achauhan/Publications/Pubs/2013-hips-holk-rust.pdf).
49+
Early GPU work by Eric Holk.
50+
* [Parallel closures: a new twist on an old
51+
idea](https://www.usenix.org/conference/hotpar12/parallel-closures-new-twist-old-idea)
52+
- not exactly about Rust, but by nmatsakis
53+
* [Patina: A Formalization of the Rust Programming
54+
Language](http://dada.cs.washington.edu/research/tr/2015/03/UW-CSE-15-03-02.pdf).
55+
Early formalization of a subset of the type system, by Eric Reed.
56+
* [Experience Report: Developing the Servo Web Browser Engine using
57+
Rust](http://arxiv.org/abs/1505.07383). By Lars Bergstrom.
58+
* [Implementing a Generic Radix Trie in
59+
Rust](https://michaelsproul.github.io/rust_radix_paper/rust-radix-sproul.pdf). Undergrad
60+
paper by Michael Sproul.
61+
* [Reenix: Implementing a Unix-Like Operating System in
62+
Rust](http://scialex.github.io/reenix.pdf). Undergrad paper by Alex
63+
Light.
64+
* [Evaluation of performance and productivity metrics of potential programming languages in the HPC environment](http://octarineparrot.com/assets/mrfloya-thesis-ba.pdf).
65+
Bachelor's thesis by Florian Wilkens. Compares C, Go and Rust.
66+
* [Nom, a byte oriented, streaming, zero copy, parser combinators library
67+
in Rust](http://spw15.langsec.org/papers/couprie-nom.pdf). By
68+
Geoffroy Couprie, research for VLC.
69+
* [Graph-Based Higher-Order Intermediate
70+
Representation](http://compilers.cs.uni-saarland.de/papers/lkh15_cgo.pdf). An
71+
experimental IR implemented in Impala, a Rust-like language.
72+
* [Code Refinement of Stencil
73+
Codes](http://compilers.cs.uni-saarland.de/papers/ppl14_web.pdf). Another
74+
paper using Impala.
75+
* [Parallelization in Rust with fork-join and
76+
friends](http://publications.lib.chalmers.se/records/fulltext/219016/219016.pdf). Linus
77+
Farnstrand's master's thesis.
78+
* [Session Types for
79+
Rust](http://munksgaard.me/papers/laumann-munksgaard-larsen.pdf). Philip
80+
Munksgaard's master's thesis. Research for Servo.
81+
* [Ownership is Theft: Experiences Building an Embedded OS in Rust - Amit Levy, et. al.](http://amitlevy.com/papers/tock-plos2015.pdf)
82+
* [You can't spell trust without Rust](https://raw.githubusercontent.com/Gankro/thesis/master/thesis.pdf). Alexis Beingessner's master's thesis.
83+
* [Rust-Bio: a fast and safe bioinformatics library](http://bioinformatics.oxfordjournals.org/content/early/2015/10/06/bioinformatics.btv573). Johannes Köster
84+
* [Safe, Correct, and Fast Low-Level Networking](https://octarineparrot.com/assets/msci_paper.pdf). Robert Clipsham's master's thesis.
85+
* [Formalizing Rust traits](http://hdl.handle.net/2429/55609). Jonatan Milewski's master's thesis.
86+
* [Rust as a Language for High Performance GC Implementation](http://users.cecs.anu.edu.au/~steveb/downloads/pdf/rust-ismm-2016.pdf)
87+
* [Simple Verification of Rust Programs via Functional Purification](https://github.com/Kha/electrolysis). Sebastian Ullrich's master's thesis.
88+
* [Writing parsers like it is 2017](http://spw17.langsec.org/papers/chifflier-parsing-in-2017.pdf) Pierre Chifflier and Geoffroy Couprie for the Langsec Workshop
89+
* [The Case for Writing a Kernel in Rust](https://www.tockos.org/assets/papers/rust-kernel-apsys2017.pdf)
90+
* [RustBelt: Securing the Foundations of the Rust Programming Language](https://plv.mpi-sws.org/rustbelt/popl18/)

src/appendix/code-index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Item | Kind | Short description | Chapter |
2929
`TraitDef` | struct | This struct contains a trait's definition with type information | [The `ty` modules] | [src/librustc/ty/trait_def.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/trait_def/struct.TraitDef.html)
3030
`TraitRef` | struct | The combination of a trait and its input types (e.g. `P0: Trait<P1...Pn>`) | [Trait Solving: Goals and Clauses], [Trait Solving: Lowering impls] | [src/librustc/ty/sty.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/struct.TraitRef.html)
3131
`Ty<'tcx>` | struct | This is the internal representation of a type used for type checking | [Type checking] | [src/librustc/ty/mod.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/type.Ty.html)
32-
`TyCtxt<'cx, 'tcx, 'tcx>` | struct | The "typing context". This is the central data structure in the compiler. It is the context that you use to perform all manner of queries | [The `ty` modules] | [src/librustc/ty/context.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/struct.TyCtxt.html)
32+
`TyCtxt<'tcx>` | struct | The "typing context". This is the central data structure in the compiler. It is the context that you use to perform all manner of queries | [The `ty` modules] | [src/librustc/ty/context.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/ty/struct.TyCtxt.html)
3333

3434
[The HIR]: ../hir.html
3535
[Identifiers in the HIR]: ../hir.html#hir-id

src/appendix/glossary.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ early-bound lifetime | a lifetime region that is substituted at its definiti
2525
empty type | see "uninhabited type".
2626
Fat pointer | a two word value carrying the address of some value, along with some further information necessary to put the value to use. Rust includes two kinds of "fat pointers": references to slices, and trait objects. A reference to a slice carries the starting address of the slice and its length. A trait object carries a value's address and a pointer to the trait's implementation appropriate to that value. "Fat pointers" are also known as "wide pointers", and "double pointers".
2727
free variable | a "free variable" is one that is not bound within an expression or term; see [the background chapter for more](./background.html#free-vs-bound)
28-
'gcx | the lifetime of the global arena ([see more](../ty.html))
2928
generics | the set of generic type parameters defined on a type or item
3029
HIR | the High-level IR, created by lowering and desugaring the AST ([see more](../hir.html))
3130
HirId | identifies a particular node in the HIR by combining a def-id with an "intra-definition offset".
@@ -51,6 +50,7 @@ newtype | a "newtype" is a wrapper around some other type (e.g.
5150
NLL | [non-lexical lifetimes](../borrow_check/region_inference.html), an extension to Rust's borrowing system to make it be based on the control-flow graph.
5251
node-id or NodeId | an index identifying a particular node in the AST or HIR; gradually being phased out and replaced with `HirId`.
5352
obligation | something that must be proven by the trait system ([see more](../traits/resolution.html))
53+
point | used in the NLL analysis to refer to some particular location in the MIR; typically used to refer to a node in the control-flow graph.
5454
projection | a general term for a "relative path", e.g. `x.f` is a "field projection", and `T::Item` is an ["associated type projection"](../traits/goals-and-clauses.html#trait-ref)
5555
promoted constants | constants extracted from a function and lifted to static scope; see [this section](../mir/index.html#promoted) for more details.
5656
provider | the function that executes a query ([see more](../query.html))
@@ -66,7 +66,7 @@ soundness | soundness is a technical term in type theory. Roughly
6666
span | a location in the user's source code, used for error reporting primarily. These are like a file-name/line-number/column tuple on steroids: they carry a start/end point, and also track macro expansions and compiler desugaring. All while being packed into a few bytes (really, it's an index into a table). See the Span datatype for more.
6767
substs | the substitutions for a given generic type or item (e.g. the `i32`, `u32` in `HashMap<i32, u32>`)
6868
tcx | the "typing context", main data structure of the compiler ([see more](../ty.html))
69-
'tcx | the lifetime of the currently active inference context ([see more](../ty.html))
69+
'tcx | the lifetime of the allocation arena ([see more](../ty.html))
7070
trait reference | the name of a trait along with a suitable set of input type/lifetimes ([see more](../traits/goals-and-clauses.html#trait-ref))
7171
token | the smallest unit of parsing. Tokens are produced after lexing ([see more](../the-parser.html)).
7272
[TLS] | Thread-Local Storage. Variables may be defined so that each thread has its own copy (rather than all threads sharing the variable). This has some interactions with LLVM. Not all platforms support TLS.

0 commit comments

Comments
 (0)