|
|
@@ -0,0 +1,211 @@ |
|
|
# Become a next-generation systems hacker with Rust |
|
|
|
|
|
[Rust] is a novel systems programming language, designed for writing |
|
|
and maintaining large-scale, ultra-reliable software in the domains |
|
|
where typically only C and C++ are appropriate. It is the only |
|
|
production programming language in the world that is memory safe - |
|
|
meaning Rust software does not segfault - but does not have a garbage |
|
|
collector or rely on reference counting, and that makes it suitable |
|
|
for writing all kinds of software. It is also arguably the fastest |
|
|
programming language in the world. And with a focus on developer |
|
|
ergonomics, Rust makes the most difficult types of programming |
|
|
accessible to a wide audience. |
|
|
|
|
|
Rust is known for it's welcoming and rewarding community. Although |
|
|
sponsored by Mozilla (the creators of Firefox), it has a thriving |
|
|
community of contributors, and many of the greatest parts of Rust have |
|
|
been written by ambitious students. There is great opportunity yet for |
|
|
making a name for oneself in the growing Rust ecosystem. |
|
|
|
|
|
In this hackfest we're going to learn how to contribute to open source |
|
|
generally, by learning how to participate in Rust. We're going to |
|
|
first learn a bit of Rust, and in the process we're going to socialize |
|
|
with, and get help from, other Rust hackers; we're going to figure out |
|
|
how to discover appropriate contribution opportunities, and we'll each |
|
|
submit a quick, simple patch, to get some early success. Then we'll |
|
|
hack on whatever cool thing we feel like. |
|
|
|
|
|
Our primary goal will be to have a good time with Rust, and we can be |
|
|
flexible about what exactly we work on. |
|
|
|
|
|
[Rust]: http://rust-lang.org/ |
|
|
|
|
|
- [Phase 1: Getting started](#ph1) |
|
|
- [Phase 2: Making an initial contribution](#ph2) |
|
|
- [Phase 3: Finding your niche](#ph3) |
|
|
|
|
|
# Resources |
|
|
|
|
|
- [Rust installation](https://www.rust-lang.org/en-US/install.html) |
|
|
|
|
|
- [areweideyet.com](https://areweideyet.com/) |
|
|
|
|
|
Information about Rust and editors. |
|
|
|
|
|
- [The new Rust book](https://rust-lang.github.io/book/) |
|
|
|
|
|
This is probably the best guide for learning Rust. |
|
|
|
|
|
- [Rust documentation](https://www.rust-lang.org/en-US/documentation.html) |
|
|
|
|
|
The old Rust book, API docs, more. |
|
|
|
|
|
- [rust-learning](https://github.com/ctjhoa/rust-learning) |
|
|
|
|
|
Lots of learning resources. |
|
|
|
|
|
- [Contributing to Rust](https://www.rust-lang.org/en-US/contribute.html) |
|
|
|
|
|
Basic guides for contributing to Rust. |
|
|
|
|
|
- [Community resources](https://www.rust-lang.org/en-US/community.html) |
|
|
|
|
|
More places to find other Rust folks. |
|
|
|
|
|
- [rust-lang/rust](https://github.com/rust-lang/rust) |
|
|
|
|
|
The main Rust source code repository. |
|
|
|
|
|
- [CONTRIBUTING.md](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md) |
|
|
|
|
|
How to submit bugs and pull requests to the main repository. |
|
|
|
|
|
- [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/) |
|
|
|
|
|
Rust is hosted on [GitHub], as are most Rust projects. This explains |
|
|
basic GitHub usage. |
|
|
|
|
|
[GitHub]: https://github.com |
|
|
|
|
|
<a id="ph1"></a> |
|
|
# Phase 1: Getting started |
|
|
|
|
|
## Where to get help |
|
|
|
|
|
The first thing to do is join #rust-beginners on Mozilla's IRC |
|
|
network. This is the best place to go to get started with Rust and the |
|
|
Rust community. There are usually people there happy to help, and you |
|
|
should ask for help freely. IRC is where much of the Rust community |
|
|
collaborates, and being on IRC is a good way to make friends and stay |
|
|
in the loop. |
|
|
|
|
|
The easiest way to join is through [Mibbit], a web based IRC client, |
|
|
but any IRC client will work. [XChat], [mIRC], and [Colloquy] are good |
|
|
options. |
|
|
|
|
|
The [community page][cp] on the Rust website lists other places to |
|
|
look for help. |
|
|
|
|
|
[Mibbit]: https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-beginners |
|
|
[XChat]: http://xchat.org/ |
|
|
[mIRC]: http://www.mirc.com/ |
|
|
[Colloquy]: http://colloquy.info/ |
|
|
[cp]: https://www.rust-lang.org/en-US/community.html |
|
|
|
|
|
## Installation |
|
|
|
|
|
Follow the [installation instructions][i]. It is usually |
|
|
straightforward. |
|
|
|
|
|
Additionally, Windows users will need the [Microsoft Visual C++ Build |
|
|
Tools][bt], or a recent version of Visual Studio. Mac users will need |
|
|
XCode. Linux users will need gcc. |
|
|
|
|
|
[bt]: http://landinghub.visualstudio.com/visual-cpp-build-tools |
|
|
[i]: https://www.rust-lang.org/en-US/install.html |
|
|
|
|
|
Use the editor of your choice. VS Code, emacs, and vim are the most |
|
|
widely used editors with Rust. Most editors have at least syntax |
|
|
highlighting for Rust, while some have more advanced features. |
|
|
Details about Rust editors can be found at [areweideyet.com]. For VS |
|
|
Code, use the RustyCode plugin, emacs use rust-emacs, vim use |
|
|
rust.vim. |
|
|
|
|
|
[areweideyet.com]: https://areweideyet.com/ |
|
|
|
|
|
With a working installation you should be able to type `rustc |
|
|
--version` at the command line and get a useful result. |
|
|
|
|
|
## Read the book and do some exercises |
|
|
|
|
|
If you are new to Rust it's probably best to spend some time on your |
|
|
own reading about it, trying exercises, and forming opinions and |
|
|
questions. |
|
|
|
|
|
The best starting place is probably [The New Rust Book]. This book is |
|
|
incomplete, but is somewhat higher quality than [The Old Rust Book]. |
|
|
The book has a guessing game tutorial that I strongly suggest |
|
|
doing. It will give you a good feel for Rust. Another excellent |
|
|
source of Rust exercises is [rustlings]. |
|
|
|
|
|
[The New Rust Book]: https://rust-lang.github.io/book/ |
|
|
[The Old Rust Book]: http://doc.rust-lang.org/book/ |
|
|
[rustlings]: https://github.com/carols10cents/rustlings |
|
|
|
|
|
We don't need to be very knowledgable about Rust to start contributing |
|
|
to Rust, but it will be important to have some background. While you |
|
|
are acquainting yourself, keep an eye out for things that are wrong, |
|
|
confusing, annoying, etc. Those little things that personally affect |
|
|
you are often the best threads to start tugging at to find your way as |
|
|
a contributor. |
|
|
|
|
|
Ask for help on #rust-beginners! |
|
|
|
|
|
<a id="ph2"></a> |
|
|
# Phase 2: Making an initial contribution |
|
|
|
|
|
One's initial contribution to any project is a critical juncture, like |
|
|
any new relationship. First impressions matter, for both the new |
|
|
contributor and maintainer. It's usually best to start small, because |
|
|
small contributions are most likely to be acceptable without a great |
|
|
amount of debate, allowing one to ease successfully into the project |
|
|
without yet understanding it. |
|
|
|
|
|
Good initial contributions usually come from "scratching an itch". If |
|
|
you've gotten this far and you've already encountered something |
|
|
confusing or buggy, that's a good place to start. Was some |
|
|
documentation not clear enough? Fixing that is a perfect initial |
|
|
contribution - docs are always being improved, patches are always |
|
|
welcomed, and as a new user you have the right perspective to make the |
|
|
docs clearer. If you know what you want to do at this point, |
|
|
the next step is to search the appropriate bug tracker to see if |
|
|
anybody else is talking about the issue. |
|
|
|
|
|
Sources for discovering Rust tasks: |
|
|
|
|
|
- [Rust easy bugs][e]. Bugs specifically tagged for new contributors. |
|
|
- [Rust mentor bugs][m]. Bugs for new contributors with willing mentors. |
|
|
- [Rust help wanted bugs][h]. Not easy bugs that still need help. |
|
|
- [This Week in Rust][t]. Every week they put out a call for |
|
|
contributions, with specific curated tasks. This is probably the |
|
|
best place to find community libraries that are actively seeking |
|
|
contributions (as opposed to contributing to Rust itself). |
|
|
- [brson's someday list][b]. This is my personal list of things that |
|
|
should get done but haven't. I may be able to help you pick |
|
|
something out of this. |
|
|
|
|
|
[e]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy |
|
|
[m]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-mentor |
|
|
[h]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted |
|
|
[b]: https://internals.rust-lang.org/t/brsons-someday-list/3948/23 |
|
|
[t]: https://this-week-in-rust.org/ |
|
|
|
|
|
Selected candidate tasks for 2017-02-24: |
|
|
|
|
|
- [Move COMPILER_TESTS.md out of the root directory](https://github.com/rust-lang/rust/issues/39896) |
|
|
- [macros: don't `cfg`-process items before applying attribute proc macros](https://github.com/rust-lang/rust/issues/39336) |
|
|
- [Removal of the lang feature gate tests whitelist](https://github.com/rust-lang/rust/issues/39059) |
|
|
- [byteorder crate remediations](https://gist.github.com/brson/d17ff2fb3f1b1418c5d073e8afc9da55). |
|
|
Fixes needed for the byteorder crate after a recent evaluation. |
|
|
- [Multiple unused formatting argument notes should use multispan](https://github.com/rust-lang/rust/issues/37718) |
|
|
- [E0072 needs better underline](https://github.com/rust-lang/rust/issues/35965) |
|
|
- [Remove obsolete no_stack_check attribute and test](https://github.com/rust-lang/rust/issues/34915) |
|
|
- [Add error explanations for all error codes](https://github.com/rust-lang/rust/issues/32777) |
|
|
- [The Standard Library Documentation Checklist](https://github.com/rust-lang/rust/issues/29329) |
|
|
- [Failure to fulfill higher-kinded "outlives" predicate could have better error message](https://github.com/rust-lang/rust/issues/27114) |
|
|
|
|
|
<a id="ph3"></a> |
|
|
# Phase 3: Finding your niche |
|
|
|
|
|
TODO |
|
|
|