Naopak, bez DRY musíš měnit jednu věc na více místech, snadno něco přehlédneš.
Mám komponenty A a B. Jsou dvě možnosti, co se v budoucnu může stát: buď chci něco změnit v obou komponentách, nebo chci naopak něčím jednu od druhé odlišit. V prvním případě je lepší, když je ten dotčený kód v nějakém společném "rodiči" (ať už to znamená cokoli, ne nutně dědičnost), ve druhém případě je lepší, když je v obou ten stejný kód zkopírovaný.
Navíc otrocké používání DRY spojené s OOP megalomanií vede k vytváření superobecných komponent, které jsou zbytečně komplikované a stejně nejsou nikdy znovupoužité, takže vůbec nic nepřináší, jenom komplikují a znepřehledňují kód, tj. zdražují budoucí úpravy (viz
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition )
Protože člověk nemá křišťálovou kouli, neví, jestli pro něj do budoucna bude lepší složitější abstraktnější nebo naopak konkrétnější přímočařejší kód. Neexistuje pro to žádné obecné pravidlo. Proto nemám rád, když někdo DRY principem příliš šermuje.
Na této sránce https://appliedgo.net/generics/ doporučují copy pastovat nebo generovat kód nějakými externími nástroji. Takový projekt bych nechtěl udržovat.
Ano, to je dobrá stránka, mám ji v Pocketu

A taky je to tam dobře vysvětleno, proč to není taková blbost, jak si spousta lidí myslí:
Every time you think that you need to create a generic object, do a quick Litmus test: Ask yourself, “How many times would I ever have to instantiate this generic object in my application or library?” In other words, is it worth to construct a generic object when there may only be one or two actual implementations of it? In this case, creating a generic object would just be an over-abstraction.
Máš nějaký příklad lepší úlohy? Souhlasím, že ty výsledky nejsou moc objektivní. Nepoužívají dostupné knihovny.
Nemám žádný příklad úlohy. Každé zadání je jiné. Z principu nemůže existovat žádný benchmark, který by určoval, který jazyk je obecně nejlepší.