This road is well traveled.  Objective-C, C#, and Java are all on that road - start with C, and add only the stuff you need.  A few years down the road, and the new language has feature bloat.<p>The three big problems in C are &quot;how big is it&quot;, &quot;who released it&quot;, and &quot;who locks it&quot;. The language provides no help with any of these issues. C++ allows papering over the problem, but the abstractions always leak and the mold always comes through the wallpaper. There are times when you need a raw pointer (for system calls, for example) and the availability of raw pointers breaks the size and ownership protection.<p>Rust deals effectively with all three of those issues.  That was a major breakthrough, one of the few fundamental advances in language design in years. Rust, unfortunately, seems to have taken a turn for the worse in the last year. Rust has been infected with the Boost disease - overly clever templates.  Rust is a procedural language, but template enthusiasts have been making it pseudo-functional with constructs like &quot;.and_then()&quot; and &quot;.or_else()&quot;. Then there&#x27;s &quot;try!()&quot;, with its invisible return statement. The result is painful to read and hard to maintain.<p>The author of the parent article has a point about &quot;with-&quot; type constructs. Python has a general &quot;with&quot; statement, which can be used on any object that implements &quot;__enter__&quot; and &quot;__exit__&quot;.  That&#x27;s a very useful and safe language feature. Both Go and Rust lack it, and their workarounds (&quot;defer&quot; and destructors) are worse.<p>Python&#x27;s &quot;with&quot; plays well with exceptions.  Exceptions in Python work well.  Exceptions in C++, not so much, mainly because ownership and exceptions mix badly.  Go could fix that with GC, and Rust could fix that with the borrow checker. But neither has exceptions. As a result, error handling in Go is wordy, and in Rust, both complicated and wordy.<p>I had high hopes for Rust, but they may have jumped the shark by getting too clever.  We don&#x27;t need a new C, but we may need a new Rust. At this point, any new low level language that doesn&#x27;t have a borrow checker is flawed from the start.