<div> </div><div>05.12.2016, 13:35, "Sven Barth" <pascaldragon@googlemail.com>:</div><blockquote type="cite">I really don't get why some people think of generics as complex -.-</blockquote><div> </div><div>Exactly for the cited reason. See below.</div><div> </div><div>> Using plain old arrays, requires reinventing the wheel because you end up<br />> writing duplicate functions for each array type (array of string) instead<br />> of a general purpose algorithm for many types..<br /> </div><div>It's not possible to get uniform interfaces that would play nice with algorithms.</div><div><br />Try writing a _single_ function for sorting static arrays, dynamic arrays,open arrays, generic containers(T*List * all value types).</div><div>The standard recipe is re-implement everything from scratch over and over again.</div><div>Even now, when we have generic functions - I am forced to specialize them by hand! Even C# got it right...</div><div>Another issue is that some special functions are considered "special" - you cannot overload them (SetLength, Copy, ...).</div><div>Yet another thing is that arrays are nice value-pretending types (refcouting), but most generics are classes!</div><div>We desperately need <a href="http://bugs.freepascal.org/view.php?id=30687">http://bugs.freepascal.org/view.php?id=30687</a> to get record based generics value types back to the language.</div><div> </div><div>Basically it's all about combinatorics when combining functions.</div><div>Either compiler does it for you, or you are forced to do it manually instead.</div><div> </div><div>To sum up, generics in current implementation add too little while exploding combinatorial variety of algorithms.</div><div> </div><div>-- <br />Regards,</div><div>Denis Golovan</div><div> </div>