Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. This is a weekly summary of its progress and community. Want something mentioned? Tweet us at @ThisWeekInRust or send us a pull request. Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub. If you find any errors in this week's issue, please submit a PR.
Updates from Rust Community
News & Blog Posts
- Carol Nichols and Nick Cameron join the core team, and Patrick Walton retires.
- Announcing the Rust infrastructure team.
- Updated: Rust language 2017 ergonomic improvements initiative.
- RLS now available on nightly (and via rustup).
- Introducing Relm, a GUI library, based on GTK+ and futures, written in Rust.
- Optimizing Rust struct size: A 6-month compiler development project.
- As part of MOSS, Mozilla awards $50,000 to Tokio - an asynchronous I/O project in Rust.
- Servo: Windows nightly builds now available.
- Prolonging temporaries in Rust. Telling compiler to hold on to a temporary value for the scope of the outer block.
- Rust's fearless concurrency in rdedup.
- [slides] The end of unsafety: The past, present, and future of the Rust programming language.
- Boilerplate-free struct transforms in Rust.
- The path to Rust on the web with WebAssembly.
- This week in Servo 98.
- This week in Rust docs 52.
Crate of the Week
Sadly, for lack of nominations we have no Crate of this Week.
Submit your suggestions and votes for next week!
Call for Participation
Always wanted to contribute to open-source projects but didn't know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!
Some of these tasks may also have mentors available, visit the task page for more information.
- rust: Error message when VS 2015 build tools exist but not the SDK needs to be better.
- [easy] lazy_static: Include
homepage
in Cargo.toml. lazy_static is a small macro for defining lazy evaluated static variables in Rust. - [easy] lazy_static: Include
categories
in Cargo.toml. - [easy] lazy_static: Publish CI badges for all Tier 1 platforms.
- [easy] flate2: Wire up rustdoc hyperlinks. flate2 implements FLATE, Gzip, and Zlib bindings for Rust.
- [easy] flate2: Use distinct Flush types for
Compress::compress
vsDecompress::decompress
. - [easy] flate2: Document error conditions in "Errors" sections.
- [easy] flate2: Write usage examples.
- [easy] flate2: Rename internal types to match the public types.
- liner: Make keyboard interrupts (e.g. SIGINT from Ctrl-c) work. Liner is a readline-like library in Rust.
- liner: Tilde expansion.
- liner: Password mode.
- liner: Use right arrow key to select autocompletion.
- Ion: Optional Descriptions for Functions. Ion is a shell for UNIX platforms, and is the default shell in Redox.
- Ion: Implement Mapfiles.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
100 pull requests were merged in the last week.
- struct field reordering, including optimization fuel (yay!)
- on-demand
adt_sized_constraint
- handle subtyping in inference through obligations
- fix
if let .. else
desugaring - improve generated LLVM IR, removing ZSTs and unneeded branches
- compress
ReprOptions
memory representation - allow overlapping
impl
s for marker traits (RFC #1268) global_asm!()
(RFC #1548)- manually drop (RFC #1860)
- compile WASM as is instead of asm.js
- consolidate type adjustment composition
- fix 128-bit division on 32-bit targets
- fix pairs of doubles using illegal vectors
- highlight and simplify mismatched types
- fix move checking for nested union fields
- improve metadata hashing
str::
{as_bytes_mut
,from_utf8_mut
,from_utf8_unchecked_mut
}ToOwned::clone_into
Vec::from_elem
specialized to usecalloc
(massive speedup)- always emit build script warnings for crates failing to build
- the RLS is now a submodule
New Contributors
- Aaron Hill
- alexey zabelin
- nate
- Nathaniel Ringo
- Scott McMurray
- Suchith J N
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
No RFCs were approved this week.
Final Comment Period
Every week the team announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now. This week's FCPs are:
- [disposition: postpone] Amend RFC 1105 to specify how dependency versions relate to semver.
- [disposition: merge] A portability lint.
- [disposition: merge] Improve the
assert_eq
failure message formatting to increase legibility. - [disposition: merge] extend
?
to operate over other types. - [disposition: merge] Remove static bound from type_id.
- [disposition: merge] Proposal for default crate recommendation ranking.
- [disposition: postpone] Stackless coroutines. Add language-level support for stackless coroutines (also known as semicoroutines or generators).
- [disposition: close] Create a separate libc_types crate for basic C types.
- [disposition: merge] Extend entry API to work on borrowed keys.
- [disposition: merge] Traits should be aliased the same way types can be aliased with the
type
keyword. - [disposition: merge] Deprecate anonymous parameters.
New RFCs
- Introduce a public/private distinction to crate dependencies.
- Allow the usage of
use
insideimpl
blocks andmatch
blocks. - Prepare global allocators for stabilization.
Style RFCs
Style RFCs are part of the process for deciding on style guidelines for the Rust community and defaults for Rustfmt. The process is similar to the RFC process, but we try to reach rough consensus on issues (including a final comment period) before progressing to PRs. Just like the RFC process, all users are welcome to comment and submit RFCs. If you want to help decide what Rust code should look like, come get involved!
We're making good progress and the style is coming together. If you want to see the style in practice, check out our example or use the Integer32 Playground and select 'Proposed RFC' from the 'Format' menu. Be aware that implementation is work in progress.
Issues in final comment period:
- Add text from the structs/unions RFC to the guide.
- Ordering of types of groups within a module.
- Convention about empty lines.
- Imports (
use
) - Closures
- Where clauses
Good first issues:
We're happy to mentor these, please reach out to us in #rust-style if you'd like to get involved
Upcoming Events
- Apr 20. Rust release triage.
- Apr 20. Rust Utrecht - Use Rust: Mentored Workshop.
- Apr 26. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Apr 26. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Apr 27. Rust Stockholm - Rust meetup @ Distil Networks.
- Apr 27. Rust Meetup Dresden.
- Apr 30. RustFest 2017 - Kyiv, Ukraine.
- May 3. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- May 3. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- May 4. Rust release triage.
- May 4. Rust Bay Area: Using Rust at Dropbox to make Magic Pocket.
If you are running a Rust event please add it to the calendar to get it mentioned here. Email the Rust Community Team for access.
Rust Jobs
No jobs listed for this week.
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Rust doesn't end unsafety, it just builds a strong, high-visibility fence around it, with warning signs on the one gate to get inside. As opposed to C's approach, which was to have a sign on the periphery reading "lol good luck".
Thanks to msiemens for the suggestion.