Odin Holmes


Odin Holmes has been programming bare metal embedded systems for 15+ years and, as any honest nerd admits, most of that time was spent debugging his stupid mistakes. With the advent of the 100x speed up of template metaprogramming provided by C++11 his current mission began: teach the compiler to find his stupid mistakes at compile time so he has more free time for even more template metaprogramming.

Odin Holmes is the author of the kvasir::bit library, a DSL which wraps bare metal special function register interactions allowing full static checking and a considerable efficiency gain over common practice. He is also active in building and refining the tools need for this task such as the brigand MPL library, the kvasir::mpl. He is also a contributor the SG14 working group and co-organizer of the embo.io bare metal embedded conference.



The fastest template metaprogramming in the West (2017)

Although a talk on a C++11 metaprogramming may seem outdated in 2017 we have only recently found new ways to leverage aliases to do much of the heavy lifting. More alias use as well as some key implementation details allow us to beat other libraries, more modern language features and even some compiler intrinsics in compilation speed. This talk will outline the advantages of the continuation style metaprogramming which we developed in the kvasir::mpl library. It will also discuss some concrete use cases including ways to interface with Boost.Hana when a run time component is not needed.


Modern Embedded APIs, Bare Metal Should Cause Less Pain (2016)

Scott Meyers has often publicly expressed our communal goal as software developers and library designers: “make interfaces easy to use correctly and hard to use incorrectly”. Current bare metal embedded code is often about as far from that goal as syntactically possible. In other words we have failed at that goal, as is true in many other domains. There are many reasons given for this disparity, however most of them are either myths or outdated. C++11/14 has given us an incredible new tool set to work with, its high time we used it. The domain specific constraints, namely the flexibility of threading model, memory management, exotic hardware drivers and the uncompromising need for speed are quite stringent. On the other hand the fact that programs are smaller and RTTI is usually stripped any way make this domain a metaprogrammers paradise. In this talk I will show many domain specific as well an universal methods with which complex, powerful and highly flexible libraries leveraging advanced generic techniques such as lazy evaluation and policy based class design can be hidden behind friendly, intuitive and fully static checked public interfaces. This will not be a typical API talk, lets face it, most "typical" APIs are outdated. This will be a rabble rousing "rethink what you think you know about APIs" talk and a "heres a syntactic tool you (probably) didn't know existed" talk.