TWiR Friends of the forest


I nominate @TimNN for Friend of the Forest for his repeated and invaluable work minimizing and bisecting (example). Keep up the good work!


I’d like to nominate @BurntSushi for Friend of the Forest. I think the multiples crates he contributed are both important and high quality. In addition to his code contributions to the ecosystem, he also did some good and informative write up about some of them.


Thanks @jimmycuadra, @Mark_Simulacrum, @nikomatsakis, and @dzamlo! I submitted the nominations.


I’d like to nominate @bluss for his work on scientific programming in Rust. ndarray is a monumental project but in addition to that he has worked (really) hard to share that knowledge among others and provided easy-to-use libraries like matrixmultiply. Without bluss’ assistance rulinalg would be in a far worse state.

Thanks for your help @bluss !


@AtheMathmo: done!


I’d like to nominate @colin_kiegel and @florob. Both are co-organizers at the monthly meetup, keeping it running all the time.


Today I stand here before you, my fellow Rustaceans, to declare that @Yamakaky is a Friend of the Forest.

A few months ago @Yamakaky pinged me and offered to help maintain error-chain. I eagerly dumped all maintenence duties on them, and since then they have made the code more elegant, dealt with all issue and pull request triage, and made the releases. If you’ve appreciated error-chain lately, appreciate @Yamakaky, Friend of the Forest. Thanks, @Yamakaky!




A belated submitted!


Well, thank YOU @brson for all your awesome work on Rust! If I can take some work from you, that’s cool :wink:


Hey have you heard of this cat @xen0n (

@xen0n has been contributing to Rust since at least May 2016 and this
winter they made installation of Rust on MIPS work correctly. That’s
great, because I love that Rust supports lots of platforms, but it
takes @xen0n’s determination to actually make it happen.

Most of the work was in rustup:

But some was in rust:

And of course in libc:

And compiler-rt:

Wow, thanks @xen0n!.


You’ve never seen a friend of Rust like @stephanbuys before.

@stephanbuys is betting on Rust big time. When he needs to get stuff
done in Rust he puts up the money and hires someone to do it, like
this recent proposal to create Windows tray application in Rust.
He knows that this is not just a business investment, but an
investment in the Rust community as well - as they say, a rising tide
raises all ships, and @stephanbuys is cleverly making the most of his
investments for his own benefit, the benefit of professional Rust
contractors, and the health of the project as a whole.

I’m really excited by this approach and hope to see more of it in the
future. Thanks for being such a good friend of Rust @stephanbuys.


Corey Farwell (aka @frewsxcv ) has contributed so much to Rust.

Corey recently published this graph of the crate ecosystem,
and I thought, ‘gosh, @frewsxcv is prolific’. Let’s see some
of their other work!

This one is close to my heart: @frewsxcv maintains, a Rust
interface to American Fuzzy Lop, and maintains a trophy case of bugs
the tool has found in Rust crates.

Corey is also the author of classic crates like threadpool.

@frewsxcv is one of those generous and patient folks who create
PR rollups, and keeping the PRs landing. This is a solitary,
thankless, but necessary, task. Thanks @frewsxcv!

They have 238 non-rollup commits to rust-lang/rust since 2014, and
they are some of my favorite kinds too: docs and tests:

b081872 Implement `PartialEq<&[A]>` for `VecDeque<A>`.
d896a0c Add more references between lowercase/uppercase operations.
47143e3 Add doc examples for `std::ffi::OsString` fucntions/methods.
c8822da A few improvements to the slice docs.
de73e52 Add doc examples & description in `std::os::unix::ffi`.
58a470e Minor improvements to docs in std::env structures/functions.
4794f95 Expand {Path,OsStr}::{to_str,to_string_lossy} doc examples.
20fd6cc Add 'platform-specific' section to `sleep_ms` to match `sleep`.
5cdf128 Document foreign variadic functions in TRPL and the reference.
0ab7812 Clarify behavior of `VecDeque::insert`.
273cc30 Clarify phrasing of MSYS2 dependencies in
4a354ab Fix 'unhygienically' typo.
44c2eb9 Move parenthesized statement within sentence.
8a472a5 Add a more complete doc example for 'include' macro.
fe0d092 Indicate that `BTreeSet::iter` returns values in ascending order.
86fc63e Implement `fmt::Debug` for all structures in libstd.
4d392d3 Document platform-specific differences for `std::process::exit`.
a664466 Improve the API examples for `std::fs::File`.
d409fc3 Rewrite, improve documentation for `core::hash::BuildHasherDefault`.
a99f70b Clarify zero-value behavior of `ctlz`/`cttz` intrinsics.
4c4e8c4 Simplify `BTreeSet::iter` doc example.
ae36934 Document how `BTreeSet` iterator structures are created.
cf56c1f Indicate `BTreeSet` in docs is code-like.
3cd9868 Add doc comment for `Default` `impl` on `DefaultHasher`.
274777a Rename 'librustc_unicode' crate to 'libstd_unicode'.
6075af4 Document how the `MutexGuard` structure is created.
6b4de8b Document how the `RwLockWriteGuard` structure is created.
276d91d Document how the `RwLockReadGuard` structure is created.
e1269ff Remove completed FIXME.
af1aa1b Update top-level path doc examples to show results.
f53d062 Minor rewriting of `std::path::Path::push` doc example.
c8c6d2c Use quieter test output when running tests on Travis CI.
a8dc297 Improve doc example for `std::borrow::Cow`.
0038430 Simplify `str` and `Path` comparison.
7c7a594 Return early to avoid excessive indentation.`
a8e2570 Use `Cow` instead of `String` to avoid unnecessary allocations.
3a15475 Convert `String` generating functions into `&str` constants.
e4f066f Remove unnecessary `pub` function classifier.
ba20da1 Make `ExternalHtml::load` short-circuited.
7be14ee Refactor away `load_or_return` macro.
f410da5 Add doc comments describing fields on `externalfiles::ExternalHtml`.
fd073cf Don't construct `PathBuf` ownership if we don't need it.
35d214a Remove redundant 'Variant' in variant names, stop reexporting.
88d4144 Migrate `VariantKind` constructor to `Clean` impl.
b55468c Simplify equality checks.
5b9ba4c Remove redundant 'Import' in variant names, stop reexporting.
a400ccc Cleanup `return` statements.
6d08949 Migrate `VariantKind` construction function to associated function.
0d0f1b4 Rename method 'to_string' to match conventions.
c3bc905 Remove redundant 'Type' in variant names, stop reexporting.
159b8c4 Update unstable attr to reference tracking issue.
7732e62 Simplify logic around Context's root_path.
c66c453 Migrate Item ➡ ItemType function to method.
2ba02a7 Add basic doc example for `core::ptr::write_bytes`.
99e1b9c Move in-pass-function structs and impls outside functions.
bd62c4c Move pass contants/types into the new `pass` module.
f1a3eb6 Separate rustdoc passes into separate modules.
5495fab Privatize `unindent` function.
a147a9d Fix incorrect alignment for `if` statement.
ae3ed31 Use underscores to breakup long number.
3b97344 Minor `VecDeque` doc examples cleanup.
6b697a3 Implement Debug for DirEntry.
e0d554a Add regression test for #9837.
5505ebc Add basic doc examples for `std::panic::{set_hook, take_hook}`.
5cab952 Don't ignore a doc code-block we can compile.
fae439b Add doc examples for std::net::IpAddr construction.
102b3a9 Add doc example for `std::time::Instant::elapsed`.
5652b62 Indicate where `core::result::IntoIter` is created.
3a96fe3 Transition Travis CI to use rustbuild.
268b3f5 Implement `Debug` for `std::path::Iter`.
f48d385 Implement `Debug` for `std::path::Components`.
10b8e0e rustbook chapters/sections should be an ordered list.
ced1252 Introduce `into_inner` method on `std::io::Take`.
905644d Rename {uint,int} methods to {usize,isize}.
42e8ac8 Implement `From<ast::FloatTy>` for `PrimitiveType`.
168cfea Implement `From<ast::UintTy>` for `PrimitiveType`.
8a6f7a5 Implement `From<ast::IntTy>` for `PrimitiveType`.
5c849f4 Remove unnecessary 'Primitive' prefix on `PrimitiveType` enum variants.
9dde563 Stop reexporting `PrimitiveType` enum in librustdoc.
0c9ff54 Migrate ItemType::from_type_kind to convert::From.
30397ae Migrate ItemType::from_item to convert::From.
7dc4116 Migrate Context::maybe_ignore_item method to standalone function.
28ecfb6 Move ItemEnum → Generics logic into method on ItemEnum.
19aae8e Reuse iterator to avoid unnecessary creation.
2655c89 Use idiomatic names for string-related methods names.
66a2578 Mark panicking tests as `should_panic` instead of `no_run`.
c2b6f72 Add a few doc examples for `std::ffi::OsStr`.
dc22186 Add basic unit test for `std::slice::Iter::as_slice`.
3808dc3 Implement `AsRef<[T]>` for `std::slice::Iter`.
bc52bdc Implement `Debug` for `std::vec::IntoIter`.
4e4d8ba Add doc example for `std::ffi::CString::from_vec_unchecked`.
01a766e Introduce `as_mut_slice` method on `std::vec::IntoIter` struct.
d099e30 Introduce `as_slice` method on `std::vec::IntoIter` struct.
9d6fa40 Add regression test for #22894.
e28521e Remove unnecessary `main` functions in doc examples.
28218be Utilize `PhantomData` to enforce `!Sync` and `!Send` field.
0a6b862 Add doc example for `std::ffi::NulError::into_vec`.
7fd7af9 Add regression test for #20847.
95cce86 Indicate tracking issue for `exact_size_is_empty` unstability.
727d929 Add doc examples for `range::RangeArgument::{start,end}`.
3081dd8 Add doc example for `std::ffi::NulError::nul_position`.
f2d8db1 Link to relevant method/struct for `std::net::Shutdown` docs.
57e3b9e Indicate where the `std::net::Incoming` struct is created.
2eea1f3 Rewrite `slice::chunks` doc example to not require printing.
f459e80 Rewrite `collections::LinkedList::append` doc example.
f98c55d Add documentation example for `str::Chars::as_str`.
a139772 Rewrite/expansion of `slice::split` doc examples.
c77f8ce Doc example improvements for `slice::windows`.
1e0043e Fix incorrect 'memory leak' example for `Vec::set_len`.
00e3149 Add doc examples for `Vec::{as_slice,as_mut_slice}`.
a005b2c Rewrite/expand doc examples for `Vec::set_len`.
b2f5b5a Indicate where `std::slice` structs originate from.
f80165d Remove unnecessary indexing and deref in `Vec::as_mut_slice`.
e2f5961 Partial rewrite/expansion of `Vec::truncate` documentation.
cf21a7b Mention where `std::vec` structs originate from.
27e44ed Add doc example for `std::process::ExitStatus::success`.
97d96bd `std::process` doc improvements.
fc2123a Remove unnecessarily mutable reference in doc example.
98e3120 Add doc examples for `io::Error::from_raw_os_error`.
c6a04d9 Fix broken markdown link in README.
325e09e Add doc example for `std::io::sink`.
a350ca6 Minor rewrite of `std::io::empty` doc example.
18b094b Add doc example for `std::io::repeat`.
a7b9e54 Add example for `std::thread::sleep`.
f1d600c Expand `std::path::Component` documentation.
f300faf Indicate how the `std::path::Components` struct is created.
c55f092 Add hyperlinks to `std::fs` functions from `std::path`.
0abee31 Add regression test for #24424.
fd388d4 Add doc example for `std::thread::Builder::name`.
5e9b75e Add examples in docs for `JoinHandle`.
0a6ce30 Use `Option::expect` instead of `unwrap_or_else` with `panic!`.
6e848be Indicate how the `JoinHandle` struct is created.
64137c4 Parameters in doc comment should be formatted code-like.
d5a2759 Add examples for `std::thread::Thread::name`.
9944b22 Add example in docs for `std::thread::panicking`.
7755d0c Add regression tests for #13727.
6458b04 Cleanup formatting and wording for `std::env::temp_dir` docs.
62b19c6 Utilize `Result::unwrap_err` in more places.
40025e8 Indicate struct names are code-like in doc-comment.
da4d7f5 Indicate `None` is code-like in doc comment.
2084f2e Implement `values_mut` on `BTreeMap`.
5972b22 Implement `values_mut` on `HashMap`.
313eb32 Address FIXMEs related to short lifetimes in `HashMap`.
99501e6 Remove no longer necessary coercions to fn pointer types.
3bc9157 Prefer HTTPS when linking to
9575fe7 Add regression test for Issue 26997.
73f4321 Refactor 'kind' extraction to use `str::split_whitespace`.
4d52b0f Utilize `if..let` over single `match` branch.
77eb78a Remove double-negative conditionals.
4238d0b Replace unneeded owned `Vec` usage with `slice`.
985cddf Use enum for message kind in compiletest harness.
abd1cea Stop ignoring expected note/help messages in compiletest suite.
6ed7846 Add comment about opt-in nature of compiletest note/help messages.
8f008ba Clean up cloning logic in
410333b Differentiate "line" and "line number" variable names.
e1048b5 Prefer `Option::expect` over explicit unwrapping.
d9dba76 Prefer 'associated function' over 'static method' in msg.
c82be2f Prefer 'match' pattern guard over conditional within body.
8adc3f7 Prefer `slice::get` over length check with indexing.
bc2f5e2 Use associated functions for libsyntax SepSeq constructors.
2338d74 Add Capacity/length methods for OsString.
5850d16 Remove unnecessary explicit lifetime bounds.
8f13f87 Improve 'std::mem::transmute_copy' doc example.
a60ec05 Add LLVM FunctionPass regression test using run-make.
e5e2cdb Add LLVM ModulePass regression test using run-make.
93d6425 Clarify scenario where AsciiExt appears to operate on non-ASCII
a193536 RefCell::borrow_mut example should demonstrate mut
d942621 Register LLVM passes with the correct LLVM pass manager.
987560a Add regression test for #22814
d98195b Add regression test for #17336
f18d1ad Format code-like text in Iterator::cloned doc-comment
e84461a Alter formatting for words in Option::cloned doc comment
1629dce Use correct indefinite article in
1e79d05 Add regression tests for #23304
3acec57 Fix formatting for E0067 and E0070 error messages
7954096 Add regression test for #21140
9d94ef5 Add regression tests for #23595
00f7268 Add regression test for #20544
26ef17d Add regression test for #22312
e2b6b02 Fix 'Relaaxed' typo in code comment
6419ace Add regression test for #13902
e834c03 Link to docs from error explanations via HTTPS
d8680f6 Add regression test for #17756
425871b Add regression test for #22375
68bb164 Add regression tests for #23649
c680f08 Add regression test for #21622
fba9cec Add regression test for #25180
afd1ed2 Add regression tests for #22864
536c244 Doc-comment fix; trait names are capitalized
0670651 Make adjancent code examples more similar
d13f765 Make mention of `if` more generic
685f557 Update docs to stop referencing `BufReadExt`
2741b94 Indicate code is code-like in diagnostic error message
554da45 Replaces instanced of 'an UTF' with 'a UTF'
ded5781 Remove unnecessary 'mut' qualifier on doc-comment var
960f800 Fix punctuation placement in doc-comment
57284e6 Make From::from example more idiomatic / simpler
b2757ed Indicate function call is code-like in doc-comment
a249910 Utilize `while let` instead of `loop` with `break` in doc-comment
115705f Indicate trait names in doc-comment are code-like
6898991 Remove doc-comment default::Default imports
be08d35 Simplify alloc::arc::Arc example in doc-comment
aaafb96 Fix typos in code comments
d2ed118 Indicate keywords are code-like in Fuse::reset_fuse doc comment
68d003c Utilize if..let for get_mut doc-comment examples
3908bae Indicate None is code-like in doc comments
1c6ccd9 Indicate None is code-like in doc comments
5c80b7a Simplify iterator logic for Fuse
69f63e9 Indicate keyword in doc comment is code-like
1a28237 Alter libcore::result example to utilize closure param
19d8b67 Remove unnecessary returns in API examples
263fdfe Cleanup and modernize some things in libcore::iter
6ff085c Make example function in comment more idiomatic
692c88c Simplify `match` branches in documentation comment
b406782 Indicate associated type in comment is code-like
4b6248a Simplify `match` branches in example
5872ae4 Indicate select! is code-like
8fe7f1f Add an example for FromIterator::from_iter
d6492e2 Fix markdown bullet points in function docs
9f8226a Enforce a white background for the docs
f979f91 Bump LICENSE copyright year
4f801c4 Bump copyright year in doc footer
f031285 Remove graphviz::LabelText::* public reexport
f9ce6f5 Remove core::iter::MinMaxResult::* public reexport
1d26fb9 Remove core::atomic::Ordering::* public reexport
02feaf2 Remove cmp::Ordering::* public reexport
98af642 Remove a ton of public reexports
3fc6dc9 Expansion should explicitly include enum
9af324a Remove Result and Option reexports
4ef1674 Utilize fewer reexports
38e008e Fix typo in tests makefile
1919b12 getopts: cleanup, renames, remove reexports
ce238d7 Unpublicize reexports, unprefix JSON type aliases
02355b8 Clean up some logic/formatting in JSON module
ef5acff Fix some English spelling errors
d8a5242 Rename json::List to json::Array
01b4c04 Add myself as an author
dc0a7b6 Link to Unicode SpecialCasing.txt document

OMG so good!

Thanks @frewsxcv for all you bring to Rust!


I’d like to nominate the amazing estebank for Friend of the Forest, since they have done so many great PRs to improve rustc diagnostics. A (partial) list of some of their greatest hits:

as well as this pending PR:


Oh wow, I never knew! I’ve spent ages staring at such diagnostics in my learning exercises, thinking “oh, these are so helpful, and intuitively formatted”.
I’ll gladly support :heart: a nomination for someone (partly) responsible for that pleasant sensation!


@KiChjang (Keith Yeung) brings a lot to Rust. Yeah he’s a prominent Servo
, as well as Rust, but the thing that I admire
most is his dedication to community building.

It is historically difficult for the Rust team to understand the needs
of of non-English-speaking Rust communities. @KiChjang though is in
tune with the Chinese Rust community, sees that this is a problem, and
is actively working to bridge that gap by participating in both
communities, looking out for needs and opportunties, and relaying them.

This is a powerful idea, and an important role, and I’m hopeful it
will bear fruit. Already I’m feeling a fire to ensure that Chinese
Rustaceans are well-represented in the Rust project, and am
considering the importance of representing Rust well at conferences in

Thanks a bunch @KiChjang!


Love @KiChjang


It just blows my mind the way Rust comes together out of chaos, the
way every contributor who touches it leaves a little bit of themselves
in Rust. And the influence of Guillaume Gomez (aka imperio, aka
@GuillaumeGomez) is evident everywhere you look in Rust.

Guillaume appeared on the Rust scene in 2015 like a whirlwind,
identifying an area of the project in need of help - documentation -
and dedicating himself to raising the quality levels in every way he
could. That’s how you make a niche for yourself in a project, and
today Guillaume is a member of the docs team, and recognized as
one of the prime motivators of Rust documentation

He has done so much, I’m going to miss a lot of it. But here goes.

He has made 600 commits to rust-lang/rust. By GitHub’s
that puts him at #15 on the contributor list.

In his time on Rust he has maintained This Week in Rust
, a thankless but important service to the Rust community.

He has been the main driver behind the system of extended
in the compiler, the campaign to improve the error
handling ui
, and for the improved handling of error codes

He is one of the few people who has been driven to make significant
improvements to rustdoc over the years, often overcoming major
technical and social challenges to do so, such as in this excellent
improvement to the debuggability of rustdoc test output
, this
improvement to rustdoc’s customization
, the replacement of
hoedown with pulldown-cmark
, and teaching rustdoc about

But that’s not all.

Guillaume is also the major force behind gtk-rs, the Rust bindings
to GTK+. And with his GTK+ expertise, he has acted as liason between the
Rust communities and the GNOME communities, graciously attending a
hackfest earlier this year to help advance the state of GNOME/Rust

Seriously, Guillaume is a tireless Rust advocate, and the advancements
he has made to Rust are pretty stunning. Buy this man a beer.


Wo, thanks a lot!


I believe what Brson is trying to say, and with which I wholeheartedly agree, is “No, thank you a lot!” :wink:
Back when I was an absolute newcomer to rust (as opposed to the still-mostly-new I consider myself today), the incredible documentation and helpful compiler messages really made a difference for me. Also, I’m an avid gnome user.
Thanks for making my life/our lives a more pleasant experience!