Abstract:
The decisions which language designers make when implementing new features, and the effects which those decisions have on a finished language, is a fascinating field of study which has been largely overlooked by many programming language researchers. In this paper, we will explore the implementation of generic programming, a powerful programming technique, in four modern programming languages (C++, C#, Java, and Haskell). We discuss the process of designing each implementation and how those design choices affect their use in each language. In doing so, we build a coherent theory of trade-offs in language design and how those trade-offs can be minimized.