Lars

Blog posts and open-source work

About

Lars

  • Software engineer
  • lars@tweedegolf.com

Of Lars naast zijn Bachelor Informatica aan de RU ook aan eigen projectjes werkte? Jazeker. Hij startte er maar liefst zo’n 150, in talen als Python, C, Go, Rust en Haskell.

Een software ontwikkelaar pur sang dus, die momenteel bij Tweede golf werkt aan firmware voor de nieuwe holter-ecg van Glanum Medical Devices.

Binnen Tweede golf wil Lars zijn kennis van Rust verdiepen en zich verder ontwikkelen op het vlak van operations.

Concurrency isn't easy and implementing its primitives is even harder. I found myself in need of some no-std, no-alloc Rust async concurrency primitives and decided to write some. I kept the scope small so even you and I can understand it. Even so, it still involved futures, wakers, atomics, drop and unsafe. I'll introduce each of those to you while building a simple primitive. At the end, you will be able to implement your own primitives!

Recently, we worked on an embedded (STM32) project in Rust and we got some hands-on experience with the abstractions commonly used for that. There's embedded-hal, which offers abstractions related to timing, GPIO pins and common communication peripherals like SPI and USART. There's also multiple stm32xxx-hal crates which offer abstractions over most of the peripherals of different STM32 CPU families. Although many of them were nice to use, we found some parts to be lacking and we'd like to propose some potential improvements to embedded-hal and its implementing crates.

Embedded software has an issue that most software doesn't: It can be very hard to get it patched. Sometimes a device hangs 5 meters high on a street light in the middle of a highway in another country. Sometimes a device is attached to a customer's heart. Sometimes strict validation requirements make changes to the software very expensive. In each case it is important to build software that doesn't fail, even in unpredictable conditions.