diff options
Diffstat (limited to 'design/go2draft-generics-overview.md')
| -rw-r--r-- | design/go2draft-generics-overview.md | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/design/go2draft-generics-overview.md b/design/go2draft-generics-overview.md index cad240d..d6148a2 100644 --- a/design/go2draft-generics-overview.md +++ b/design/go2draft-generics-overview.md @@ -50,7 +50,7 @@ flexibility and power with as little added complexity as possible. _Note on terminology_: Generalization based on type parameters was called parametric polymorphism when it was -[first identified in 1967](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.332.3161&rep=rep1&type=pdf) +[first identified in 1967](https://reed.cs.depaul.edu/jriely/447/assets/articles/strachey-fundamental-concepts-in-programming-languages.pdf) and for decades thereafter in the functional programming community. The [GJ proposal](http://homepages.inf.ed.ac.uk/wadler/papers/gj-oopsla/gj-oopsla-letter.pdf), which led to adding parametric polymorphism in Java 5, changed the @@ -393,7 +393,7 @@ We’ll use the `Set`, `Sum`, and `ShortestPath` examples above as points of com ML was the first typed language to incorporate polymorphism. -Christopher Strachey is usually given credit for introducing the term parametric polymorphism in his 1967 survey, "[Fundamental Concepts in Programming Languages](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.332.3161&rep=rep1&type=pdf)." +Christopher Strachey is usually given credit for introducing the term parametric polymorphism in his 1967 survey, "[Fundamental Concepts in Programming Languages](https://reed.cs.depaul.edu/jriely/447/assets/articles/strachey-fundamental-concepts-in-programming-languages.pdf)." Robin Milner’s 1978 paper "[A Theory of Type Polymorphism in Programming](https://courses.engr.illinois.edu/cs421/sp2013/project/milner-polymorphism.pdf)" introduced an algorithm to infer the most general types of polymorphic function bodies, instead of forcing the use of concrete types. Milner had already implemented his algorithm for the ML language as part of the Edinburgh LCF system. @@ -441,14 +441,18 @@ The more complex graph example is still simple in CLU: ... end shortestpath -The 1978 paper "[Aspects of Implementing CLU](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.106.3516&rep=rep1&type=pdf)" discusses the compile-time versus run-time implementations of parameterized generics and details CLU's run-time-only approach. +The 1978 paper +"[Aspects of Implementing CLU](https://csg.csail.mit.edu/pubs/memos/Memo-167/Memo-167.pdf)" +discusses the compile-time versus run-time implementations of parameterized generics and details CLU's run-time-only approach. The "BigArray" function shown earlier is also taken from this paper (translated to Go, of course). All the ingredients for modern generics are here: syntax for declaring generalized types and functions, syntax for invoking them, a simple constraint syntax, and a well thought-out implementation. There was no inference of type parameters. The CLU designers found it helpful to see all substitutions made explicitly. -In her 1992 retrospective "[A History of CLU](http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=F5D7C821199F22C5D30A51F155DB9D23?doi=10.1.1.46.9499&rep=rep1&type=pdf)," Liskov observed, "CLU was way ahead of its time in its solution for parameterized modules. +In her 1992 retrospective +"[A History of CLU](https://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-561.pdf)," +Liskov observed, "CLU was way ahead of its time in its solution for parameterized modules. Even today, most languages do not support parametric polymorphism, although there is growing recognition of the need for it." ### Ada, 1983 @@ -550,7 +554,7 @@ Of course, nothing checked that other templates used only the features of T illu In 2003, Stroustrup proposed formalizing this convention as [C++ concepts](http://www.stroustrup.com/N1522-concept-criteria.pdf). The feature was intended for C++0x (eventually C++11 (2011)) but -[removed in 2009](http://www.drdobbs.com/cpp/the-c0x-remove-concepts-decision/218600111). +[removed in 2009](https://jacobfilipp.com/DrDobbs/articles/DDJ/2009/0908/0908bs01/0908bs01.html) Concepts were published as a [separate ISO standard in 2015](https://www.iso.org/standard/64031.html), shipped in GCC, and were intended for C++17 (2017) [but removed in 2016](http://honermann.net/blog/2016/03/06/why-concepts-didnt-make-cxx17/). |
