“Inheritance has recently fallen out of favor as a programming design solution in many programming languages because it’s often at risk of sharing more code than necessary. Subclasses shouldn’t always share all characteristics of their parent class but will do so with inheritance. This can make a program’s design less flexible. It also introduces the possibility of calling methods on subclasses that don’t make sense or that cause errors because the methods don’t apply to the subclass. In addition, some languages will only allow a subclass to inherit from one class, further restricting the flexibility of a program’s design. For these reasons, Rust takes a different approach, using trait objects instead of inheritance.” CodeProgrammingSharingInheritanceProgramming LanguagesSolutionSoftware Design Book:The Rust Programming Language Source: The Rust Programming Language
“In languages with a garbage collector (GC), the GC keeps track and cleans up memory that isn’t being used anymore, and we don’t need to think about it. Without a GC, it’s our responsibility to identify when memory is no longer being used and call code to explicitly return it, just as we did to request it. Doing this correctly has historically been a difficult programming problem. If we forget, we’ll waste memory. If we do it too early, we’ll have an invalid variable. If we do it twice, that’s a bug too. We need to pair exactly one allocate with exactly one free. Rust takes a different path: the memory is automatically returned once the variable that owns it goes out of scope.” MemoryProgrammingScopeProgramming Languages Book:The Rust Programming Language Source: The Rust Programming Language