Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 1 | # Contributing to Rust |
Tim Chevalier | 5afd760 | 2013-10-21 19:10:57 | [diff] [blame] | 2 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 3 | Thank you for your interest in contributing to Rust! There are many ways to |
| 4 | contribute, and we appreciate all of them. This document is a bit long, so here's |
| 5 | links to the major sections: |
Tim Chevalier | 5afd760 | 2013-10-21 19:10:57 | [diff] [blame] | 6 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 7 | * [Feature Requests](#feature-requests) |
| 8 | * [Bug Reports](#bug-reports) |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 9 | * [The Build System](#the-build-system) |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 10 | * [Pull Requests](#pull-requests) |
| 11 | * [Writing Documentation](#writing-documentation) |
| 12 | * [Issue Triage](#issue-triage) |
| 13 | * [Out-of-tree Contributions](#out-of-tree-contributions) |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 14 | * [Helpful Links and Information](#helpful-links-and-information) |
Tim Chevalier | 5afd760 | 2013-10-21 19:10:57 | [diff] [blame] | 15 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 16 | If you have questions, please make a post on [internals.rust-lang.org][internals] or |
| 17 | hop on [#rust-internals][pound-rust-internals]. |
Nick Cameron | 852cef8 | 2014-09-22 00:46:24 | [diff] [blame] | 18 | |
Darrell Hamilton | a6b47c0 | 2015-02-19 03:53:00 | [diff] [blame] | 19 | As a reminder, all contributors are expected to follow our [Code of Conduct][coc]. |
Brian Anderson | 36c63a3 | 2015-01-02 23:41:47 | [diff] [blame] | 20 | |
| 21 | [pound-rust-internals]: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals |
Eli Friedman | bbbfed2 | 2015-08-09 21:15:05 | [diff] [blame] | 22 | [internals]: https://internals.rust-lang.org |
| 23 | [coc]: https://www.rust-lang.org/conduct.html |
Brian Anderson | 36c63a3 | 2015-01-02 23:41:47 | [diff] [blame] | 24 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 25 | ## Feature Requests |
| 26 | |
| 27 | To request a change to the way that the Rust language works, please open an |
| 28 | issue in the [RFCs repository](https://github.com/rust-lang/rfcs/issues/new) |
| 29 | rather than this one. New features and other significant language changes |
| 30 | must go through the RFC process. |
| 31 | |
| 32 | ## Bug Reports |
| 33 | |
| 34 | While bugs are unfortunate, they're a reality in software. We can't fix what we |
| 35 | don't know about, so please report liberally. If you're not sure if something |
| 36 | is a bug or not, feel free to file a bug anyway. |
| 37 | |
Brian Anderson | 0d0cb3b | 2015-11-06 22:05:19 | [diff] [blame] | 38 | **If you believe reporting your bug publicly represents a security risk to Rust users, |
| 39 | please follow our [instructions for reporting security vulnerabilities](https://www.rust-lang.org/security.html)**. |
| 40 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 41 | If you have the chance, before reporting a bug, please [search existing |
| 42 | issues](https://github.com/rust-lang/rust/search?q=&type=Issues&utf8=%E2%9C%93), |
| 43 | as it's possible that someone else has already reported your error. This doesn't |
| 44 | always work, and sometimes it's hard to know what to search for, so consider this |
| 45 | extra credit. We won't mind if you accidentally file a duplicate report. |
| 46 | |
| 47 | Opening an issue is as easy as following [this |
| 48 | link](https://github.com/rust-lang/rust/issues/new) and filling out the fields. |
| 49 | Here's a template that you can use to file a bug, though it's not necessary to |
| 50 | use it exactly: |
| 51 | |
| 52 | <short summary of the bug> |
| 53 | |
| 54 | I tried this code: |
| 55 | |
| 56 | <code sample that causes the bug> |
| 57 | |
| 58 | I expected to see this happen: <explanation> |
| 59 | |
| 60 | Instead, this happened: <explanation> |
| 61 | |
| 62 | ## Meta |
| 63 | |
| 64 | `rustc --version --verbose`: |
| 65 | |
| 66 | Backtrace: |
| 67 | |
| 68 | All three components are important: what you did, what you expected, what |
| 69 | happened instead. Please include the output of `rustc --version --verbose`, |
| 70 | which includes important information about what platform you're on, what |
| 71 | version of Rust you're using, etc. |
| 72 | |
| 73 | Sometimes, a backtrace is helpful, and so including that is nice. To get |
Emanuel Czirai | e1d2eda | 2016-03-28 12:41:55 | [diff] [blame] | 74 | a backtrace, set the `RUST_BACKTRACE` environment variable to a value |
| 75 | other than `0`. The easiest way |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 76 | to do this is to invoke `rustc` like this: |
| 77 | |
| 78 | ```bash |
| 79 | $ RUST_BACKTRACE=1 rustc ... |
| 80 | ``` |
| 81 | |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 82 | ## The Build System |
| 83 | |
Greg Chapple | 05f7b59 | 2016-01-26 14:41:29 | [diff] [blame] | 84 | Rust's build system allows you to bootstrap the compiler, run tests & |
| 85 | benchmarks, generate documentation, install a fresh build of Rust, and more. |
| 86 | It's your best friend when working on Rust, allowing you to compile & test |
| 87 | your contributions before submission. |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 88 | |
Greg Chapple | 05f7b59 | 2016-01-26 14:41:29 | [diff] [blame] | 89 | All the configuration for the build system lives in [the `mk` directory][mkdir] |
| 90 | in the project root. It can be hard to follow in places, as it uses some |
| 91 | advanced Make features which make for some challenging reading. If you have |
| 92 | questions on the build system internals, try asking in |
| 93 | [`#rust-internals`][pound-rust-internals]. |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 94 | |
| 95 | [mkdir]: https://github.com/rust-lang/rust/tree/master/mk/ |
| 96 | |
| 97 | ### Configuration |
| 98 | |
| 99 | Before you can start building the compiler you need to configure the build for |
| 100 | your system. In most cases, that will just mean using the defaults provided |
| 101 | for Rust. Configuring involves invoking the `configure` script in the project |
| 102 | root. |
| 103 | |
| 104 | ``` |
| 105 | ./configure |
| 106 | ``` |
| 107 | |
| 108 | There are large number of options accepted by this script to alter the |
| 109 | configuration used later in the build process. Some options to note: |
| 110 | |
flo-l | 4e87986 | 2016-06-02 20:19:20 | [diff] [blame] | 111 | - `--enable-debug` - Build a debug version of the compiler (disables optimizations, |
| 112 | which speeds up compilation of stage1 rustc) |
Greg Chapple | 6fd728d | 2016-01-26 14:14:09 | [diff] [blame] | 113 | - `--enable-optimize` - Enable optimizations (can be used with `--enable-debug` |
| 114 | to make a debug build with optimizations) |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 115 | - `--disable-valgrind-rpass` - Don't run tests with valgrind |
Greg Chapple | 6fd728d | 2016-01-26 14:14:09 | [diff] [blame] | 116 | - `--enable-clang` - Prefer clang to gcc for building dependencies (e.g., LLVM) |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 117 | - `--enable-ccache` - Invoke clang/gcc with ccache to re-use object files between builds |
Greg Chapple | 6fd728d | 2016-01-26 14:14:09 | [diff] [blame] | 118 | - `--enable-compiler-docs` - Build compiler documentation |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 119 | |
| 120 | To see a full list of options, run `./configure --help`. |
| 121 | |
| 122 | ### Useful Targets |
| 123 | |
| 124 | Some common make targets are: |
| 125 | |
Sebastian Thiel | eface32 | 2016-05-26 08:08:45 | [diff] [blame] | 126 | - `make tips` - show useful targets, variables and other tips for working with |
| 127 | the build system. |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 128 | - `make rustc-stage1` - build up to (and including) the first stage. For most |
| 129 | cases we don't need to build the stage2 compiler, so we can save time by not |
| 130 | building it. The stage1 compiler is a fully functioning compiler and |
| 131 | (probably) will be enough to determine if your change works as expected. |
flo-l | 4e87986 | 2016-06-02 20:19:20 | [diff] [blame] | 132 | - `make $host/stage1/bin/rustc` - Where $host is a target triple like x86_64-unknown-linux-gnu. |
| 133 | This will build just rustc, without libstd. This is the fastest way to recompile after |
| 134 | you changed only rustc source code. Note however that the resulting rustc binary |
| 135 | won't have a stdlib to link against by default. You can build libstd once with |
| 136 | `make rustc-stage1`, rustc will pick it up afterwards. libstd is only guaranteed to |
| 137 | work if recompiled, so if there are any issues recompile it. |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 138 | - `make check` - build the full compiler & run all tests (takes a while). This |
| 139 | is what gets run by the continuous integration system against your pull |
| 140 | request. You should run this before submitting to make sure your tests pass |
| 141 | & everything builds in the correct manner. |
| 142 | - `make check-stage1-std NO_REBUILD=1` - test the standard library without |
| 143 | rebuilding the entire compiler |
Ryan Thomas | df31868 | 2016-02-01 23:58:59 | [diff] [blame] | 144 | - `make check TESTNAME=<substring-of-test-name>` - Run a matching set of tests. |
Florian Berger | ccafdae | 2016-03-13 19:57:24 | [diff] [blame] | 145 | - `TESTNAME` should be a substring of the tests to match against e.g. it could |
| 146 | be the fully qualified test name, or just a part of it. |
Ryan Thomas | a58d330 | 2016-02-01 06:04:39 | [diff] [blame] | 147 | `TESTNAME=collections::hash::map::test_map::test_capacity_not_less_than_len` |
Ryan Thomas | a5e491f | 2016-02-01 23:57:24 | [diff] [blame] | 148 | or `TESTNAME=test_capacity_not_less_than_len`. |
| 149 | - `make check-stage1-rpass TESTNAME=<substring-of-test-name>` - Run a single |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 150 | rpass test with the stage1 compiler (this will be quicker than running the |
| 151 | command above as we only build the stage1 compiler, not the entire thing). |
| 152 | You can also leave off the `-rpass` to run all stage1 test types. |
Greg Chapple | 6fd728d | 2016-01-26 14:14:09 | [diff] [blame] | 153 | - `make check-stage1-coretest` - Run stage1 tests in `libcore`. |
Cobrand | 9d9c029 | 2016-09-03 10:41:02 | [diff] [blame] | 154 | - `make tidy` - Check that the source code is in compliance with Rust's style |
| 155 | guidelines. There is no official document describing Rust's full guidelines |
| 156 | as of yet, but basic rules like 4 spaces for indentation and no more than 99 |
| 157 | characters in a single line should be kept in mind when writing code. |
Greg Chapple | dc6ed63 | 2016-01-25 14:07:10 | [diff] [blame] | 158 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 159 | ## Pull Requests |
| 160 | |
| 161 | Pull requests are the primary mechanism we use to change Rust. GitHub itself |
| 162 | has some [great documentation][pull-requests] on using the Pull Request |
| 163 | feature. We use the 'fork and pull' model described there. |
| 164 | |
| 165 | [pull-requests]: https://help.github.com/articles/using-pull-requests/ |
| 166 | |
| 167 | Please make pull requests against the `master` branch. |
| 168 | |
Steve Klabnik | 720da31 | 2015-07-06 18:46:21 | [diff] [blame] | 169 | Compiling all of `make check` can take a while. When testing your pull request, |
| 170 | consider using one of the more specialized `make` targets to cut down on the |
| 171 | amount of time you have to wait. You need to have built the compiler at least |
| 172 | once before running these will work, but that’s only one full build rather than |
| 173 | one each time. |
| 174 | |
| 175 | $ make -j8 rustc-stage1 && make check-stage1 |
| 176 | |
| 177 | is one such example, which builds just `rustc`, and then runs the tests. If |
| 178 | you’re adding something to the standard library, try |
| 179 | |
| 180 | $ make -j8 check-stage1-std NO_REBUILD=1 |
| 181 | |
| 182 | This will not rebuild the compiler, but will run the tests. |
| 183 | |
Cobrand | 9d9c029 | 2016-09-03 10:41:02 | [diff] [blame] | 184 | Please make sure your pull request is in compliance with Rust's style |
| 185 | guidelines by running |
| 186 | |
| 187 | $ make tidy |
| 188 | |
| 189 | Make this check before every pull request (and every new commit in a pull |
| 190 | request) ; you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) |
| 191 | before every push to make sure you never forget to make this check. |
| 192 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 193 | All pull requests are reviewed by another person. We have a bot, |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 194 | @rust-highfive, that will automatically assign a random person to review your |
| 195 | request. |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 196 | |
| 197 | If you want to request that a specific person reviews your pull request, |
| 198 | you can add an `r?` to the message. For example, Steve usually reviews |
| 199 | documentation changes. So if you were to make a documentation change, add |
| 200 | |
| 201 | r? @steveklabnik |
| 202 | |
| 203 | to the end of the message, and @rust-highfive will assign @steveklabnik instead |
| 204 | of a random person. This is entirely optional. |
| 205 | |
| 206 | After someone has reviewed your pull request, they will leave an annotation |
| 207 | on the pull request with an `r+`. It will look something like this: |
| 208 | |
| 209 | @bors: r+ 38fe8d2 |
| 210 | |
| 211 | This tells @bors, our lovable integration bot, that your pull request has |
| 212 | been approved. The PR then enters the [merge queue][merge-queue], where @bors |
| 213 | will run all the tests on every platform we support. If it all works out, |
| 214 | @bors will merge your code into `master` and close the pull request. |
| 215 | |
| 216 | [merge-queue]: http://buildbot.rust-lang.org/homu/queue/rust |
| 217 | |
Steve Klabnik | 8cb1faa | 2015-07-06 16:14:49 | [diff] [blame] | 218 | Speaking of tests, Rust has a comprehensive test suite. More information about |
| 219 | it can be found |
| 220 | [here](https://github.com/rust-lang/rust-wiki-backup/blob/master/Note-testsuite.md). |
| 221 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 222 | ## Writing Documentation |
| 223 | |
| 224 | Documentation improvements are very welcome. The source of `doc.rust-lang.org` |
| 225 | is located in `src/doc` in the tree, and standard API documentation is generated |
| 226 | from the source code itself. |
| 227 | |
Vladimir Rutsky | b85aa78 | 2015-06-30 22:57:54 | [diff] [blame] | 228 | Documentation pull requests function in the same way as other pull requests, |
| 229 | though you may see a slightly different form of `r+`: |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 230 | |
| 231 | @bors: r+ 38fe8d2 rollup |
| 232 | |
| 233 | That additional `rollup` tells @bors that this change is eligible for a 'rollup'. |
| 234 | To save @bors some work, and to get small changes through more quickly, when |
| 235 | @bors attempts to merge a commit that's rollup-eligible, it will also merge |
| 236 | the other rollup-eligible patches too, and they'll get tested and merged at |
| 237 | the same time. |
| 238 | |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 239 | To find documentation-related issues, sort by the [A-docs label][adocs]. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 240 | |
| 241 | [adocs]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AA-docs |
| 242 | |
Aleksey Kladov | c3753ce | 2015-10-02 21:09:27 | [diff] [blame] | 243 | In many cases, you don't need a full `make doc`. You can use `rustdoc` directly |
| 244 | to check small fixes. For example, `rustdoc src/doc/reference.md` will render |
| 245 | reference to `doc/reference.html`. The CSS might be messed up, but you can |
Amit Levy | 4b6477f | 2016-08-22 02:42:33 | [diff] [blame] | 246 | verify that the HTML is right. |
Aleksey Kladov | c3753ce | 2015-10-02 21:09:27 | [diff] [blame] | 247 | |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 248 | ## Issue Triage |
| 249 | |
| 250 | Sometimes, an issue will stay open, even though the bug has been fixed. And |
| 251 | sometimes, the original bug may go stale because something has changed in the |
| 252 | meantime. |
| 253 | |
| 254 | It can be helpful to go through older bug reports and make sure that they are |
| 255 | still valid. Load up an older issue, double check that it's still true, and |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 256 | leave a comment letting us know if it is or is not. The [least recently |
| 257 | updated sort][lru] is good for finding issues like this. |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 258 | |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 259 | Contributors with sufficient permissions on the Rust repo can help by adding |
| 260 | labels to triage issues: |
| 261 | |
| 262 | * Yellow, **A**-prefixed labels state which **area** of the project an issue |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 263 | relates to. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 264 | |
Greg Chapple | a5836fa | 2016-01-14 10:47:04 | [diff] [blame] | 265 | * Magenta, **B**-prefixed labels identify bugs which are **blockers**. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 266 | |
| 267 | * Green, **E**-prefixed labels explain the level of **experience** necessary |
| 268 | to fix the issue. |
| 269 | |
| 270 | * Red, **I**-prefixed labels indicate the **importance** of the issue. The |
| 271 | [I-nominated][inom] label indicates that an issue has been nominated for |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 272 | prioritizing at the next triage meeting. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 273 | |
| 274 | * Orange, **P**-prefixed labels indicate a bug's **priority**. These labels |
| 275 | are only assigned during triage meetings, and replace the [I-nominated][inom] |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 276 | label. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 277 | |
| 278 | * Blue, **T**-prefixed bugs denote which **team** the issue belongs to. |
| 279 | |
| 280 | * Dark blue, **beta-** labels track changes which need to be backported into |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 281 | the beta branches. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 282 | |
Aleksey Kladov | e3596e3 | 2015-10-02 21:08:14 | [diff] [blame] | 283 | * The purple **metabug** label marks lists of bugs collected by other |
| 284 | categories. |
| 285 | |
| 286 | If you're looking for somewhere to start, check out the [E-easy][eeasy] tag. |
edunham | 177531e | 2015-05-27 14:29:02 | [diff] [blame] | 287 | |
| 288 | [inom]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-nominated |
| 289 | [eeasy]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 290 | [lru]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc |
| 291 | |
| 292 | ## Out-of-tree Contributions |
| 293 | |
| 294 | There are a number of other ways to contribute to Rust that don't deal with |
| 295 | this repository. |
| 296 | |
| 297 | Answer questions in [#rust][pound-rust], or on [users.rust-lang.org][users], |
| 298 | or on [StackOverflow][so]. |
| 299 | |
| 300 | Participate in the [RFC process](https://github.com/rust-lang/rfcs). |
| 301 | |
| 302 | Find a [requested community library][community-library], build it, and publish |
| 303 | it to [Crates.io](http://crates.io). Easier said than done, but very, very |
| 304 | valuable! |
| 305 | |
| 306 | [pound-rust]: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust |
Eli Friedman | bbbfed2 | 2015-08-09 21:15:05 | [diff] [blame] | 307 | [users]: https://users.rust-lang.org/ |
Steve Klabnik | f645cad | 2015-02-13 17:26:44 | [diff] [blame] | 308 | [so]: http://stackoverflow.com/questions/tagged/rust |
| 309 | [community-library]: https://github.com/rust-lang/rfcs/labels/A-community-library |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 310 | |
| 311 | ## Helpful Links and Information |
| 312 | |
| 313 | For people new to Rust, and just starting to contribute, or even for |
| 314 | more seasoned developers, some useful places to look for information |
| 315 | are: |
| 316 | |
| 317 | * The [Rust Internals forum][rif], a place to ask questions and |
| 318 | discuss Rust's internals |
| 319 | * The [generated documentation for rust's compiler][gdfrustc] |
Andreas Sommer | aa9666e | 2015-10-02 12:36:27 | [diff] [blame] | 320 | * The [rust reference][rr], even though it doesn't specifically talk about Rust's internals, it's a great resource nonetheless |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 321 | * Although out of date, [Tom Lee's great blog article][tlgba] is very helpful |
| 322 | * [rustaceans.org][ro] is helpful, but mostly dedicated to IRC |
christopherdumas | d09ba5d | 2015-09-12 15:02:01 | [diff] [blame] | 323 | * The [Rust Compiler Testing Docs][rctd] |
christopherdumas | 4543dad | 2015-09-14 14:28:06 | [diff] [blame] | 324 | * For @bors, [this cheat sheet][cheatsheet] is helpful (Remember to replace `@homu` with `@bors` in the commands that you use.) |
Andreas Sommer | aa9666e | 2015-10-02 12:36:27 | [diff] [blame] | 325 | * **Google!** ([search only in Rust Documentation][gsearchdocs] to find types, traits, etc. quickly) |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 326 | * Don't be afraid to ask! The Rust community is friendly and helpful. |
| 327 | |
| 328 | [gdfrustc]: http://manishearth.github.io/rust-internals-docs/rustc/ |
fbergr | aa219d9 | 2015-12-23 20:42:36 | [diff] [blame] | 329 | [gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 330 | [rif]: http://internals.rust-lang.org |
| 331 | [rr]: https://doc.rust-lang.org/book/README.html |
Florian Berger | daa48a2 | 2016-04-15 19:28:32 | [diff] [blame] | 332 | [tlgba]: http://tomlee.co/2014/04/a-more-detailed-tour-of-the-rust-compiler/ |
christopherdumas | 3f86602 | 2015-09-11 23:21:11 | [diff] [blame] | 333 | [ro]: http://www.rustaceans.org/ |
christopherdumas | d09ba5d | 2015-09-12 15:02:01 | [diff] [blame] | 334 | [rctd]: ./COMPILER_TESTS.md |
christopherdumas | 4543dad | 2015-09-14 14:28:06 | [diff] [blame] | 335 | [cheatsheet]: http://buildbot.rust-lang.org/homu/ |