dhruv's devlog

#001: Reflection on command line tools written in Rust, Go and Python


Last week, one of my tools mult got featured on Terminal Trove (my ninth project on there; how did that happen?). This brought a few new visitors to its GitHub page, and one of them opened an issue for a feature request.

It had been a while since I’d shipped any updates to this tool, but seeing the request sparked enough interest to not only fulfill it, but also add a few improvements to it. It was also a good excuse to write some easy-going Go after several weeks of writing Rust and Python.

Writing code in all three languages back-to-back got me thinking about their respective strengths in building command line tooling. Writing a graph database tool in Python began as an easy task, but, as the codebase grew, Python’s exception-based error handling and lack of lower-level control left me uneasy at times about refactoring.

Go, on the other hand, made modifying mult much more straightforward. Time and again, I’ve found that Go strikes a great balance, with its Python-like simplicity and a type system that catches most mistakes before they get merged.

Yet for all of Go’s balance and Python’s ease, working with both lately has reinforced something for me: Rust still feels like the gold standard. The Rust tools I built this month (dfft and ting) feel more solid to me. I had more confidence in making changes to these codebases, and iterating on them was a joy. The combination of a great type system, move semantics, and rock-solid tooling keeps Rust as a top contender for building command line apps for me.


Since this whole train of thought started with mult, I should probably list the features I added to it.

Here’s the changelog:

Added

Usage