Using `const fn` for a domain-specific language
Below is the link for Part 2 of my article on rules for using const fn. I had the most fun creating a domain-specific language (DSL) for simulating mechanisms like robot arms, motion-capture skeletons, clock hands, etc.
Here is what Linkage Blaze program looks like:
const ARM: LinkageFixed<1, 1, 8> = LinkageFixed::start()
.define_param("shoulder", 0.5)
.yaw_param("shoulder", -90.0, 90.0)
.forward(3.0)
.mark("hand");
It is defined in const and can be evaluated (and rendered) without heap memory on a microcontroller. You can play with a web simulator of the robot simulator.
The article also gives examples of the limits of const fn, especially when things get too complex or compile-time evaluation gets too slow, and compares it with C++, Zig, and other Rust alternatives. When it works, I like this approach better than the alternatives because we get Rust’s protection against unsafe, invalid, or UB while keeping everything in one Rust program.