C++, a Mother Tongue

For a large part of my professional life, C++ has been more than a programming language. It has been a mother tongue. Not in the sentimental sense of the word, but in a deeper and more circumstantial one: for years I have thought and implemented data structures, algorithms, distributed systems, abstractions, and efficiency problems in C++. Many times, before writing a single line of code, my imagination was already organized in terms of constructors, destructors, templates, move semantics, pointers, and execution costs.

Although its reputation had already caught my attention, I did not encounter Rust out of enthusiasm or fashion. My work circumstances forced me to learn it. C++ is not, to me, an old language that must be abandoned. I think it is a powerful, intimate, hard tool, full of scars but also victories, with which extraordinary software can still be built. In a sense, C++ gave me a way of thinking. It taught me the closeness between abstraction and the machine, and to respect the cost of every decision. I do not renounce C++: I owe it too much.

That is precisely why my growing admiration for Rust surprises even me. It does not come from ignorance of C++, but from having known it too well. Anyone who has lived for many years inside C++ understands that one of its greatnesses is also one of its tragedies: it has been an immensely capable language, but terribly slow to transform itself. I do not say this with contempt; that slowness has understandable causes, and I will return to them. But, looking at Rust over this last year, I came to understand something about C++ that is not what people usually say, and that I could only formulate when I stopped thinking in terms of a single problem and began to see two.