The last two months in Dimforge (June - July 2021)
This newsletter provides you with a summary of important updates that occurred within the Dimforge community. This includes in particular updates about the Rapier (physics engine), Salva (fluid simulation), Parry (collision-detection), nalgebra (linear algebra), and Simba (abstract algebra) crates. This article will contain updates for the months of June and July 2021.
Help us sustain this work by sponsoring us on GitHub sponsors ♥
Join us on discord!
New, user-guide for Rapier’s JS bindings 📖
During April and May, we completely rewrote the user-guides for the Rust version Rapier and
bevy_rapier. During the
past two months, we continued this documentation work by completely rewriting the user-guide for the JS/TypeScript
bindings for Rapier too. It is now much more complete as it covers all the available features.
Check it out on rapier.rs.
nalgebra v0.29: soundness and better non-Copy types support 🎊
The development of
nalgebra started even before the 1.0 release of the Rust compiler. Needless to say this was
long before the
MaybeUninit type was stabilized in Rust 1.36.
Before the introduction of
MaybeUninit, the use of
mem:uninitialized() was the de-facto way of creating an uninitialized
variable, and was therefore used extensively throughout the codebase of
nalgebra. Switching to
MaybeUninit instead of
mem::uninitialized() was a major undertaking that never happened completely. We did replace all the
MaybeUninit::new().uninit() a while ago but that was still technically unsound, even if it didn’t cause
any actual problem in practice because
nalgebra was mostly used with primitive
nalgebra 0.29, we completely reworked our trait system in order to use
MaybeUninit properly. This has two
- The parts of
nalgebrausing uninitialized matrices is no longer unsound.
- It is now possible to use non-
Copytypes safely as matrix components (for example,
This work was the result of a significant group effort, for which we thank in particular
- Violeta Hernández who made a fantastic work exploring all the possible design solutions we could think of.
- Andreas Longva, Benjamin Saunders, and others on our discord server for providing valuable comments and ideas.
Announcing Rapier 0.11 ⚔️
With the release 0.11 of Rapier, we implemented all the joint limits that were missing, this includes joint limits for revolute joints and ball joints.
During the past two months, we also started working on joints modeled using reduced coordinates. These joints have the benefit of being unbreakable, at the cost of being slightly less versatile (joint forces can’t be read, the chain of articulations can’t form a loop) and more computationally expensive
As mentioned in our 2021 roadmap for Rapier, we initially planned to release reduced-coordinates joints in August. However, it will take more time because we spent the last few months improving the documentation of Rapier (which we initially planned on doing at the end of this year instead) instead of working on these joints.
This work is happening in the multibody branch and will be our focus for the next couple of months.
We would like to thank the whole community and code contributors. In particular, thanks to the code contributors from the past two months1:
- Thanks to users reporting spelling mistakes on the documentation. This is always appreciated.
- Thanks to users joining us on our discord server to provide feedbacks, discuss features, and get assistance!
Finally, thanks to all the former, current and new supporters through GitHub sponsors! This help is greatly appreciated and allows us to continue working on our open-source projects.
- The list of contributors is automatically generated from the past two months' github commit history. Don't hesitate to let us know if your name should have been mentioned here.↩