Rust Async in Embedded: Embassy vs Manual Executors
Embassy brings async/await to embedded Rust with a cooperative scheduler and hardware abstraction. When it fits and when the abstraction cost shows up in interrupt latency.
Language tutorials, coding best practices, and comparative analysis of development tools
C++20 modules promised faster compile times. On a 200 KLOC embedded project with GCC 14, the improvement was real — and the migration from header-only patterns took two weeks.
Embassy brings async/await to embedded Rust with a cooperative scheduler and hardware abstraction. When it fits and when the abstraction cost shows up in interrupt latency.
Zig's comptime is compelling for embedded work. The toolchain story in 2024 is still rough at the edges. An honest first-impressions note from someone who knows C well.
We added mypy strict mode to a 120 KLOC Python codebase in incremental passes over 18 months. What we caught, what we missed, and what the team thinks now.
WebAssembly as a plugin runtime gives you memory isolation without process overhead. Wasmtime in a Rust host, capability-limited via WASI, and the performance envelope we measured.
Proptest generates thousands of random inputs and shrinks failures to minimal examples. A serialization round-trip test and a state machine invariant test that found real bugs.
Go generics shipped in 1.18. Two years in, our codebase has adopted them in specific places and rejected them in others. An honest usage report.
Signed integer overflow, strict aliasing violations, use-after-free — on Cortex-M with GCC 12, here is what the compiler actually generates. Not theoretical.
asyncio is not a free concurrency upgrade. Blocking calls in coroutines, unhandled exceptions in tasks, and the subtlety of TaskGroup cancellation are where things go wrong.
Move semantics in C++ gave engineers a false sense of familiarity with Rust ownership. The borrow checker disagrees at compile time in instructive ways.
Go's implicit interfaces make dependency injection natural without a DI framework. The constructor injection pattern that scales and the service locator antipattern that sneaks in.
Enabling TypeScript strict mode on a 60 KLOC frontend codebase generated 340 errors. Twelve of them turned out to be actual runtime bugs in production code.