Hey everyone! I'm diving into embedded Linux systems and I'm in need of a stable and high-performance programming language, especially for writing drivers. While I usually code in C, I'm exploring higher-level options that can work alongside my work on OS, PCB, and HDL.
My main concern with Python is its ecosystem—things tend to get outdated quickly, and it's quite a hassle to update my Yocto builds. The team often uses libraries like Numpy and Pandas, which feel a bit excessive for embedded applications, even though we frequently require FFT streaming. If the system's Python version becomes outdated, it causes issues with the code.
I've looked into a few languages:
1. LUA: I'm concerned about the JIT version split.
2. Golang: It seems stable, but the lack of LTS releases worries me.
3. Java: Just kidding! It lacks unsigned types which I need.
4. TCL: Familiar from FPGA tooling, but not a fan of the syntax.
5. Python: Bugs have been problematic, especially with memory map reads.
6. Bash/Zsh: OK for minor tasks.
Can anyone suggest solid alternatives that strike a good balance?
5 Answers
Golang might just fit the bill! Old versions of code remain compatible with newer releases, so you can upgrade without worrying too much about breaking things. It's designed with stability in mind and is quite performant too!
For soft real-time equipment control, Erlang could be worth considering. It's designed for concurrent systems and handles data gathering nicely. Plus, once you deploy a Python app, you can choose not to upgrade libraries immediately, which provides some stability.
If you're facing issues with system Python, avoid using it for your projects as it can create trouble. Tools like 'uv' help manage specific versions. For low-level drivers though, I'd still suggest considering Rust or C since they're designed for this purpose.
You might want to check out Rust. It has amazing interoperability with Python thanks to Maturin, which can make it easier to integrate with existing Python components in your project. It's a solid choice for performance without the usual headaches of C or C++.
I'd suggest sticking with Python for high-level tasks. The transition costs might be significant, especially for different teams. Libraries can be pinned to specific versions, and using virtual environments opens up compatibility options, allowing versions to remain stable for production while offering flexibility for development.
That’s a good point! Coordinating Python versions across teams could really help to avoid deployment surprises.
That sounds great! I know a few folks using Rust alongside Python and they've mentioned it works really well. I'll look into Maturin!