This Week In Rust 519
2023-11-01
Hello and welcome to another issue of This Week in Rust!
Rust is a programming language empowering everyone to build reliable and efficient software.
This is a weekly summary of its progress and community.
Want something mentioned? Tag us at @ThisWeekInRust on Twitter or @ThisWeekinRust on mastodon.social, or send us a pull request.
Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub and archives can be viewed at this-week-in-rust.org.
If you find any errors in this week's issue, please submit a PR.
Official
Project/Tooling Updates
Observations/Thoughts
Rust Walkthroughs
Research
Miscellaneous
Crate of the Week
This week's crate is silkenweb, a library for building web apps with fine-grained reactivity and a clean separation of logic and UI.
Thanks to henrik for the suggestion!
Please submit your suggestions and votes for next week!
Call for Participation
Always wanted to contribute to open-source projects but did not 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.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from the Rust Project
408 pull requests were merged in the last week
-
-Zunpretty help: add missing possible values
-
NVPTX: allow PassMode::Direct for ptx kernels for now
-
OptWithInfcx naming nits, trait bound simplifications
-
deduce_param_attrs: explain a read-only case
-
rustc_interface cleanups
-
stack_overflow: get_stackp using MAP_STACK flag on dragonflybsd too
-
add bootstrap flag --skip-stage0-validation
-
add method to convert internal to stable constructs
-
add support for i586-unknown-netbsd as target
-
add support for mipsel-unknown-netbsd, 32-bit LE mips
-
add target features for LoongArch
-
add way to differentiate argument locals from other locals in Stable MIR
-
allow partially moved values in match
-
allow target specs to use an LLD flavor, and self-contained linking components
-
allows #[diagnostic::on_unimplemented] attributes to have multiple
-
avoid repeated interning of env!("CFG_RELEASE")
-
avoid unbounded O(n^2) when parsing nested type args
-
avoid unnecessary builds/rebuilds of rust-demangler
-
avoid unnecessary renumbering during borrowck
-
c-variadic error improvements
-
consider alias bounds when computing liveness in NLL (but this time sound hopefully)
-
const stabilize mem::discriminant
-
correctly handle nested or-patterns in exhaustiveness
-
coverage: consistently remove unused counter IDs from expressions/mappings
-
coverage: replace manual debug indents with nested tracing spans in counters
-
create windows/api.rs for safer FFI
-
create a new ConstantKind variant (ZeroSized) for StableMIR
-
declare rustc_target's dependency on object/macho
-
deny providing explicit effect params
-
derive Ord, PartialOrd and Hash for SocketAddr*
-
detect when trait is implemented for type and suggest importing it
-
do not suggest 'Trait<Assoc=arg>' when in trait impl
-
don't normalize to an un-revealed opaque when we hit the recursion limit
-
don't treat closures/coroutine types as part of the public API
-
don't use LFS64 symbols on musl
-
eat close paren if capture_cfg to avoid unbalanced parens
-
enable cg_clif tests for riscv64gc
-
fail typeck for illegal break-with-value
-
fix ICE: Restrict param constraint suggestion
-
fix failure to detect a too-big-type after adding padding
-
fix inline const pattern unsafety checking in THIR
-
fix missing leading space in suggestion
-
fix unused variables lint issue for args in macro
-
fix unwrap suggestion for async fn
-
generate aggregate constants in DataflowConstProp
-
handle ReErased in responses in new solver
-
ignore RPIT duplicated lifetimes in opaque_types_defined_by
-
implement C ABI lowering for CSKY
-
implement gen blocks in the 2024 edition
-
improve android-ndk property interface
-
improve some diagnostics around ?Trait bounds
-
improve the warning messages for the #[diagnostic::on_unimplemented]
-
increase the reach of panic_immediate_abort
-
intern LocalDefId list from opaque_types_defined_by query
-
introduce -C instrument-coverage=branch to gate branch coverage
-
invalid ? suggestion on mismatched Ok(T)
-
lint overlapping ranges as a separate pass
-
mark .rmeta files as /SAFESEH on x86 Windows
-
mark constructor of BinaryHeap as const fn
-
never consider raw pointer casts to be trival
-
on object safety error, mention new enum as alternative
-
on unresolved imports, suggest a disambiguated path if necessary to avoid collision with local items
-
only call mir_const_qualif if absolutely necessary
-
only emit one error per unsized binding, instead of one per usage
-
poison check_well_formed if method receivers are invalid to prevent typeck from running on it
-
print variadic argument pattern in HIR pretty printer
-
properly restore snapshot when failing to recover parsing ternary
-
quietly fail if an error has already occurred
-
rand use getrandom for freebsd (available since 12.x)
-
refactor type visitor walking
-
remap Cargo dependencies to /rust/deps
-
remove -Zdep-tasks
-
remove Apple RNG fallbacks and simplify implementation
-
remove fold code and add Const::internal() to StableMIR
-
remove support for alias -Z instrument-coverage
-
require target features to match exactly during inlining
-
return multiple object-safety violation errors and code improvements to the object-safety check
-
return unfixed len if pat has reported error
-
rework negative coherence to properly consider impls that only partly overlap
-
rustdoc: elide cross-crate default generic arguments
-
rustdoc: use ThinVec in GenericParamDefKind
-
see through aggregates in GVN
-
separate move path tracking between borrowck and drop elaboration
-
share some track_caller logic between interpret and codegen
-
small ty::print cleanups
-
some diagnostics improvements of gen blocks
-
stash and cancel cycle errors for auto trait leakage in opaques
-
stop telling people to submit bugs for internal feature ICEs
-
store #[stable] attribute's since value in structured form
-
suggest assoc fn new when trying to build tuple struct with private fields
-
suggest unwrap/expect for let binding type mismatch
-
tvOS simulator support on Apple Silicon for rustc
-
tweak suggestion span for outer attr and point at item following invalid inner attr
-
uplift Canonical to rustc_type_ir
-
uplift ClauseKind and PredicateKind into rustc_type_ir
-
use ImageDataType for allocation type
-
validate feature and since values inside #[stable(…)]
-
when encountering sealed traits, point types that implement it
-
when expecting closure argument but finding block provide suggestion
-
work around the fact that check_mod_type_wf may spuriously return ErrorGuaranteed
-
time: use clock_gettime on macos
-
windows: support sub-millisecond sleep
-
refactor some char, u8 ASCII functions to be branchless
-
add #[inline] to some recalcitrant ops::range methods
-
stabilize ratified RISC-V Target Features
-
stabilize [const_]pointer_byte_offsets
-
stabilize inline asm usage with rustc_codegen_cranelift
-
futures: add TryAll and TryAny adapters
-
futures: fix Sync impl of FuturesUnordered
-
futures: provide AtomicWaker if portable-atomic feature is enabled, even if atomic CAS is not available
-
codegen_gcc: add basics for test command in build system
-
codegen_gcc: fix volatile_load
-
cargo toml: Allow version-less manifests
-
cargo toml: Decouple parsing from interning system
-
cargo: shell: Write at once rather than in fragments
-
cargo: add new packages to [workspace.members] automatically
-
cargo: move up looking at index summary enum
-
cargo: remove duplicate binaries during install
-
cargo: remove outdated option to -Zcheck-cfg warnings
-
rustfmt: fixed error caused by combination of match_arm_blocks and control_brace_style
-
clippy: ignored_unit_patterns: check &(), &&(),
-
clippy: iter_without_into_iter: fix papercuts in suggestion and restrict linting to exported types
-
clippy: let_and_return: Wrap with parenthesis if necessary
-
clippy: add waker_clone_and_wake lint to check needless Waker clones
-
clippy: fix missing parenthesis in suboptimal floating point help
-
clippy: ignore lower-camel-case words in doc_markdown
-
clippy: move read_zero_byte_vec to nursery
-
clippy: remove internal feature from clippy_utils
-
clippy: remove the internal_warn lint category
-
rust-analyzer: make extract_variable assist in place
Upcoming Events
Rusty Events between 2023-11-01 - 2023-11-29 🦀
Virtual
- 2023-11-01 | Virtual (Cardiff, UK)| Rust and C++ Cardiff
- 2023-11-01 | Virtual (Indianapolis, IN, US) | Indy Rust
- 2023-11-02 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-11-07 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-11-07 | Virtual (Buffalo, NY, US) | Buffalo Rust Meetup
- 2023-11-09 | Virtual (Nuremberg, DE) | Rust Nuremberg
- 2023-11-14 | Virtual (Dallas, TX, US) | Dallas Rust
- 2023-11-15 | Virtual (Cardiff, UK)| Rust and C++ Cardiff
- 2023-11-15 | Virtual (Richmond, VA, US) | Linux Plumbers Conference
- 2023-11-15 | Virtual (Vancouver, BC, CA) | Vancouver Rust
- 2023-11-16 | Virtual (Charlottesville, NC, US) | Charlottesville Rust Meetup
- 2023-11-21 | Virtual (Berlin, DE) | OpenTechSchool Berlin
- 2023-11-21 | Virtual (Washington, DC, US) | Rust DC
- 2023-11-28 | Virtual (Dallas, TX, US) | Dallas Rust
Europe
North America
- 2023-11-01 | Brookline, MA, US | Boston Rust Meetup
- 2023-11-02 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-11-08 | Boulder, CO, US | Boulder Rust Meetup
- 2023-11-14 | New York, NY, US | Rust NYC
- 2023-11-14 | Seattle, WA, US | Cap Hill Rust Coding/Hacking/Learning
- 2023-11-15 | Richmond, VA, US + Virtual | Linux Plumbers Conference
- 2023-11-16 | Mountain View, CA, US | Mountain View Rust Meetup
- 2023-11-16 | Nashville, TN, US | Music City Rust Developers
- 2023-11-16 | Seattle, WA, US | Seattle Rust User Group
- 2023-11-21 | San Francisco, CA, US | San Francisco Rust Study Group
- 2023-11-22 | Austin, TX, US | Rust ATX
Oceania
If you are running a Rust event please add it to the calendar to get
it mentioned here. Please remember to add a link to the event too.
Email the Rust Community Team for access.
Jobs
Please see the latest Who's Hiring thread on r/rust
Quote of the Week
After doing a best fit, we found Rust projects were less likely to introduce vulnerabilities than their equivalent C++ projects at all relevant experience levels, but more importantly, we found the effect was most significant for first-time contributors, who were almost two orders of magnitude less likely to contribute vulnerabilities. That is, even though Rust may have a reputation as a harder language to learn, there is a very measurable effect that makes it better for newbies. Reviewers should not have to put as much effort into reviewing code to be confident that someone making their first foray into their project is accidentally adding a vulnerability.
– Justin Tracey on crysp.org
Thanks to Brian Kung for the suggestion!
Please submit quotes and vote for next week!
This Week in Rust is edited by: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin, bennyvasquez.
Email list hosting is sponsored by The Rust Foundation
Discuss on r/rust