Tak jsem přemýšlel, jak bych mohl svoji aplikaci v C++ přepsat do Rustu a došel jsem k závěru, že to nepůjde. Rust se mi líbí, ale ta absence OOP (třídy, dědičnost) se prostě nedá nějak normálně nahradit. Rust a podobné jazyky jsou asi skvělé pro aplikace s jednoduchým datovým modelem, ale pro složitější model, zejména když je přirozené uvažovat značně ve smyslu dědičnosti a strom dědičnosti je poměrně hluboký, tak tam nastáva u jazyků jako Rust dost problém. Pamatuju se na podobnou diskuzi, kde někdo psal, že OOP není přirozené pro naše myšlení, ale já jsem opačného názoru. Když přemýšlím nad tím, jak vytvořit abstrakci něčeho, tak přemýšlím nad chováním a nad vlastnostmi - v řeči OOP je to něco třída, chování vyjádřeno metodami a vlastnosti pomocí datových členů.
Dám případ ze svoji aplikace:
Mám třády ApplicationElement, UIElement, GenericStack, PartStack, kdy následující třída vždy dědí z předchozí.
V C++ žádný problém, ale v Rustu bych musel vše řešit buď kompozicí nebo traity.
U kompozice bych pak musel psát něco jako partStack.genericStack.uiElement.applicationElement pokud bych chtěl volat něco z implementace ApplicationElement a traitu je zase šílenost pro každou strukturu imlementovat všechny ty traity.
Evidentně dědičnost nějak rozumně nahradit nejde a jestli ano, tak za cenu flexibility => ve výsledku nemá cenu na něco se složitým datovým modelem používat funkcionální jazyk tohohle typu. Souhlasíte?