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 an email! 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
- The 2016 Rust conference lineup.
- Rust performance: A story featuring perf and flamegraph on Linux.
- Sebastian Ullrich has formally verified Rust's binary_search function by transpiling Rust to the Lean theorem prover.
- A short walkthrough of WebRender 2.
- Rust code coverage guide. kcov + Travis CI + Codecov / Coveralls.
- Rust: The new LLVM. Making a case for using Rust as compile target for new languages.
- Test setup and teardown in Rust without a framework.
- [podcast] New Rustacean podcast episode 16. Digging deeper on smart pointers and mutability with
Cell
andRefCell
.
New Crates & Project Updates
- rustup 0.4.0 released.
- error-chain 0.2.2 released, featuring a minor ergonomic improvement.
- Termion 1.0 released.
- Call for proposals for next Rust Doc Days crates. For the second Rust Doc Days, propose crates that need better documentation!
- All the Clippy lints. Overview and documentation of all Clippy lints with search and filtering.
- RMP. MessagePack implementation for Rust.
- electrolysis. A tool for formally verifying Rust programs by transpiling them into definitions in the Lean theorem prover.
- rustsym. A tool to query symbols from Rust code for use in IDEs.
- cargo-benchcmp is rewritten in Rust (from Python).
- This week in Servo 72.
- This week in Rust docs 14.
- This week in TiKV 2016-07-23.
- This week in Ruma 2016-07-24.
Crate of the Week
In what seems to become a kind of tradition, User gsingh93 suggested his trace crate, a syntax extension to insert print!
statements to functions to help trace execution. Thanks, gsingh93!
Submit your suggestions 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.
- [easy] rust: move coerce_match, coerce_calls and related tests into run-pass-valgrind. Just moving tests around. Easy introduction to the build system.
- [easy] cargo: Can't specify precise crate version if there are multiple versions.
- [easy] error-chain: Display implementation should show the error's Display, not just the description. Looks like a simple fix.
- [easy] rust: Parsing inconsistencies (lambda, proc, return). This bug identifies some bugs where the rustc parser disagrees with the reference parser. Good first bug for someone interested in parsers.
- [easy] rust: rustbuild should warn on quotes in PATH. Easy fix for Rust's new build system.
- [easy] rust: Make it easier to locate deadlocked tests. A simple enhancement to the test runner to notify the user about long-running tests.
- [easy] rust: Remove obsolete no_stack_check attribute and test. Easy introduction to the compiler and contribution process.
- [easy] rustfmt: Wrap overlong function signatures. There are several rustfmt bugs along these lines so this is a fertile entrypoint for contributors.
- [easy] rustup: Add command to install shell completions.
- [easy] rustup: Clean up toolchain directories after uninstall. A simple bug with a clear fix.
- [moderate] rust: improve error message when resolution via Deref actually required DerefMut. Good first type system bug.
- [easy] imag: Switch to clap in the
imag
binary.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
76 pull requests were merged in the last two weeks.
mtwt
is nowhygiene
and cleaned up – nomen est omenimpl<T> From<T> for Option<T>
- MIR optimization test groundwork
- Fixed interplay between precision and width in format specifiers (breaking change)
ExactSizeIterator::is_empty()
- No more MIPS Soft-Float
- Macros: Statements are now matched greedily
- Nested
macro_rules!
impl Debug for {Entry, VacantEntry, OccupiedEntry}
inbtree_map
andhash_map
- More privacy for linker symbols (improves perf)
impl AddAssign for String
(wasn't there already?!)- beta gets new jemalloc
cargo publish --dry-run
New Contributors
- Evgeny Safronov
- Matt Horn
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation 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:
- Promote
!
to a type - Add language support for bitfields.
- Add support for 128-bit integers.
- Add space-friendly arguments. Add
-C link-arg
and-C llvm-arg
which allow you to pass along argument with spaces. - Exclude macros from importing with
#[macro_use(not(...))]
. - Add
global_asm!
for module-level inline assembly. - Some internal and language-level changes to name resolution.
- Define a best practices procedure for making bug fixes in the compiler.
- RFC process for formatting style and Rustfmt defaults.
- Add a compiler flag that emits crate dependencies on a best-effort basis.
- Replace synchronization primitives with those from parking_lot.
- Dedicated strike team to resolve unsafe code guidelines.
- Add
assert_ne
to complimentassert_eq
. - Introduce non-panicking borrow methods on
RefCell<T>
. - Propose asserts. This rfc proposes that the following macros be added:
assert_gt
,assert_lt
,assert_ge
, andassert_le
. - Clarify behaviour when writing to a union field that implements Drop.
New RFCs
- Add API documentation front page styleguide.
- Deprecate anonymous parameters.
- Add an environment variable to choose between whether to link the static CRT or dynamic CRT.
- Create a team responsible for documentation for the Rust project.
- Propose a shorthand syntax for constructing struct-like values with named fields.
Upcoming Events
- 7/27. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 7/27. Rust Berlin July Meetup.
- 7/28. Rust Bay Area: Machine Learning, Bioinformatics, and Embedded OSes.
- 8/3. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 8/4. Rust release triage at #rust-triage on irc.mozilla.org.
- 8/8. Seattle Rust Meetup.
If you are running a Rust event please add it to the calendar to get it mentioned here. Email Erick Tryzelaar or Brian Anderson for access.
fn work(on: RustProject) -> Money
No jobs listed for this week.
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
you have a problem. you decide to use Rust. now you have a Rc<RefCell<Box<Problem>>>
Thanks to Alex Burka for the tip. Submit your quotes for next week!