Embedded programming is such a different world than web backend stuff. I don't think I ever had a Ruby program not work after moving it to a different type of machine, let alone that I spend any time at all thinking about endianness these days.
(OK, it happened 1 time: at a previous workplace we created a docker image on CI which compiled some C extensions for a gem. The CI machine had some AVX instructions that the production machines did not and they got included in the object files, which led to a crash at runtime. This was easily solved by recompiling on the target infra.)
These kinds of issues are readily seen when writing low-level code that runs close to the hardware: network packet handling, device drivers, cross compilers, etc.
When porting these kinds of code to different / newer architectures it immediately becomes apparent if the code was written with portability in mind or not.
These Ada features seem really nice for low-level code portability. Do any other languages have similiar features?
Rust allows portability providing that the programmer is using a HAL that implements the “embedded-hal” library.
Things like SPI, I2C etc can be exposed by traits that libraries can then use.
So you could have one LCD display library that can easily run on multiple microcontrollers.
But the support is still expanding slowly, I believe stm32 chips are the main focus at the moment
(OK, it happened 1 time: at a previous workplace we created a docker image on CI which compiled some C extensions for a gem. The CI machine had some AVX instructions that the production machines did not and they got included in the object files, which led to a crash at runtime. This was easily solved by recompiling on the target infra.)