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 mem::uninitialized() by 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 Copy types.

With nalgebra 0.29, we completely reworked our trait system in order to use MaybeUninit properly. This has two benefits:

  • The parts of nalgebra using uninitialized matrices is no longer unsound.
  • It is now possible to use non-Copy types safely as matrix components (for example, BigUint from the num_bigint crate).

This work was the result of a significant group effort, for which we thank in particular

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.


Thanks

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.


  1. 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.