January 7, 2026

Is-a? Or isn’t-a? Cue the popcorn

Rust Is Beyond Object-Oriented, Part 3: Inheritance

Rust fans roast inheritance as 90s spaghetti; veterans say “we knew this already”

TLDR: The author says Rust avoids inheritance on purpose, calling it trouble, and the crowd mostly cheers while veterans yawn, saying this is old news. A naming scuffle erupts over “new” and “instance,” and some argue Rust still mimics inheritance with modern patterns—proof this debate isn’t dead.

Rust’s latest anti–object-oriented chapter drops a bomb: no inheritance, and that’s a feature, not a bug. The comments lit up like a code review at 5pm on Friday. The spiciest take? One reader likened inheritance to “spaghetti code in a tuxedo,” comparing it to the dreaded old-school “goto” and urging restraint. Others rolled their eyes and said this isn’t new—“favor composition over inheritance” has been a mantra since the 90s Design Patterns, so why are we still arguing?

Cue memes of “Tiger extends Animal” and rectangle-vs-square flamewars; the crowd joked Rust tossed out the third leg of the OOP stool and somehow stands straighter. But it wasn’t all dunking. A curious voice asked if Rust is being a bit cheeky using “new” and talking about “instances,” stirring a naming debate: is Rust secretly OOP-lite or just borrowing familiar words?

Then the contrarians piled in: one commenter claimed you can replicate inheritance in Rust with clever patterns—think Lego pieces that can carry both behavior and data—while another praised Rust’s traits (like shared behavior contracts) as modern escape hatches, warning they come with “footguns” (tools that can trip you up). Verdict: drama, nostalgia, and popcorn-worthy tech semantics.

Key Points

  • The article critiques inheritance as a traditional OOP pillar and states Rust has no direct analogue for it.
  • It differentiates useful encapsulation and polymorphism from inheritance, noting Rust’s polymorphism is inspired by Haskell with C++-like syntax.
  • The scope is limited to static OOP languages (C++, Java), with dynamic languages (Python, JavaScript, Smalltalk) considered out of scope.
  • The author distinguishes subtyping (present in Rust, e.g., via lifetimes) from inheritance and does not critique subtyping.
  • Interface implementation (e.g., Java interfaces, C++ abstract base classes, Rust traits) is considered legitimate, while Java-style implementation inheritance is opposed.

Hottest takes

“Inheritance may have some limited utility but it often degenerates into ‘spaghetti code’ dressed up…” — jqpabc123
“‘Favor composition over inheritance’ is a phrase that became common knowledge… during the 2000’s.” — misja111
“You can replicate implementation inheritance pretty much as-is in Rust…” — zozbot234
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.