source: doc/bibliography/pl.bib @ 70eaa80b

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 70eaa80b was 70eaa80b, checked in by Aaron Moss <a3moss@…>, 6 years ago

thesis: update discussion of Java type inference

  • Property mode set to 100644
File size: 253.4 KB
Line 
1% Conventions: uncross-referenced entries appear first, then
2%    cross-referenced entries.  In both groups, entries are sorted by their
3%    title field.  Lines like "% A" exist to speed searches.  The main
4%    paper on a language uses the language name as the citation key.  Other
5%    papers use ``<language name>:'' as a prefix.  Please consider leaving
6%    keyword lists and an abstract or comment for future generations, and
7%    put some identification in a contributer field.
8
9%    Predefined journal names:
10%  acmcs: Computing Surveys             acta: Acta Infomatica
11@string{acta="Acta Infomatica"}
12%  cacm: Communications of the ACM
13%  ibmjrd: IBM J. Research & Development ibmsj: IBM Systems Journal
14%  ieeese: IEEE Trans. on Soft. Eng.    ieeetc: IEEE Trans. on Computers
15%  ieeetcad: IEEE Trans. on Computer-Aided Design of Integrated Circuits
16%  ipl: Information Processing Letters  jacm: Journal of the ACM
17%  jcss: J. Computer & System Sciences  scp: Science of Comp. Programming
18%  sicomp: SIAM J. on Computing         tocs: ACM Trans. on Comp. Systems
19%  tods: ACM Trans. on Database Sys.    tog: ACM Trans. on Graphics
20%  toms: ACM Trans. on Math. Software   toois: ACM Trans. on Office Info. Sys.
21%  toplas: ACM Trans. on Prog. Lang. & Sys.
22%  tcs: Theoretical Computer Science
23
24string{ieeepds="IEEE Transactions on Parallel and Distributed Systems"}
25@string{ieeepds="IEEE Trans. Parallel Distrib. Syst."}
26string{ieeese="IEEE Transactions on Software Engineering"}
27@string{ieeese="IEEE Trans. Softw. Eng."}
28string{spe="Software---\-Practice and Experience"}
29@string{spe="Softw. Pract. Exper."}
30string{ccpe="Concurrency and Computation: Practice and Experience"}
31@string{ccpe="Concurrency Comput.: Pract. Exper."}
32string{sigplan="SIGPLAN Notices"}
33@string{sigplan="SIGPLAN Not."}
34string{joop="Journal of Object-Oriented Programming"}
35@string{joop="J. of Object-Oriented Program."}
36@string{popl="Conference Record of the ACM Symposium on Principles of Programming Languages"}
37@string{osr="Operating Systems Review"}
38@string{pldi="Programming Language Design and Implementation"}
39@string{toplas="Transactions on Programming Languages and Systems"}
40string{mathann="Mathematische Annalen"}
41@string{mathann="Math. Ann."}
42
43% A
44
45@incollection{ABC++,
46    keywords    = {concurrency, parallel, distributed, C++},
47    contributer = {pabuhr@plg},
48    author      = {William G. O'Farrell and Frank Ch. Eigler and S. David Pullara and Gregory V. Wilson },
49    title       = {{ABC}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
50    editor      = {Gregory V. Wilson and Paul Lu},
51    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
52    publisher   = {MIT Press},
53    address     = {New York},
54    series      = {Scientific and Engineering Computation Series},
55    year        = 1996,
56    pages       = {1-42},
57}
58
59@techreport{CL90abstract,
60    keywords    = {},
61    contributer = {gjditchfield@plg},
62    author      = {Luca Cardelli and Xavier Leroy},
63    title       = {Abstract Types and the Dot Notation},
64    institution = {Systems Research Center},
65    year        = 1990,
66    address     = {130 Lytton Avenue, Palo Alto, CA  94301},
67    number      = 56,
68    summary     = {
69        The existential types of Mitchell and Plotkin \cite{atet} model
70        abstract types, but their ``open'' notation is unlike the usual dot
71        notation used in programming languages.  This paper gives
72        translations between the ``open'' and ``dot'' forms, and suggests
73        extensions for nested and for parameterized abstractions.
74    }
75}
76
77@article{atet,
78    keywords    = {lambda calculus, polymorphism},
79    contributer = {gjditchfield@plg},
80    author      = {John C. Mitchell and Gordon D. Plotkin},
81    title       = {Abstract Types have Existential Type},
82    journal     = toplas,
83    year        = 1988,
84    month       = jul, volume = 10, number = 3, pages = {470-502},
85    abstract    = {
86        Abstract data type declarations appear in typed programming
87        languages like Ada, Alphard, CLU and ML.  This form of declaration
88        binds a list of identifiers to a type with associated operations, a
89        composite ``value'' we call a {\em data algebra}.  We use a
90        second-order typed lambda calculus SOL to show how data algebras
91        may be given types, passed as parameters, and returned as results of
92        function calls.  In the process, we discuss the semantics of
93        abstract data type declarations and review a connection between
94        typed programming languages and constructive logic.
95    }
96}
97
98@article{alphard:intro,
99    keywords    = {encapsulation, data abstraction},
100    contributer = {gjditchfield@plg},
101    author      = {Wm. A. Wulf and Ralph L. London and Mary Shaw},
102    title       = {Abstraction and Verification in Alphard: Introduction to Language and Methodology},
103    journal     = ieeese,
104    year        = 1976,
105    month       = dec, volume = {SE-2}, number = 4, pages = {253-265},
106    note        = {Reprinted in \cite{alphard}.},
107    abstract    = {
108        Alphard is a programming language whose goals include supporting
109        both the development of well-structured programs and the formal
110        verification of these programs.  This paper attempts to capture the
111        symbiotic influence of these two goals on the design of the
112        language.  To that end the language description is interleaved with
113        the presentation of a proof technique and discudssion of
114        programming methodology.  Examples to illustrate both the language
115        and the verification technique are included.
116    }
117}
118
119@book{Hilfinger83,
120    keywords    = {ada},
121    author      = {Paul N. Hilfinger},
122    title       = {Abstraction Mechanisms and Language Design},
123    publisher   = {MIT Press},
124    series      = {ACM Distinguished Dissertations},
125    year        = 1983,
126}
127
128@incollection{Lavender96,
129    author      = {R. Greg Lavender and Douglas C. Schmidt},
130    chapter     = {Active Object: An Object Behavioral Pattern for Concurrent Programming},
131    title       = {Pattern Languages of Program Design 2},
132    editor      = {John M. Vlissides and James O. Coplien and Norman L. Kerth},
133    year        = 1996,
134    pages       = {483-499},
135    publisher   = {Addison-Wesley Longman Publishing},
136    address     = {Boston},
137}
138
139@article{Nierstrasz87,
140    keywords    = {Hybrid, active objects, object-oriented languages, object-based languages, delegation, concurrency},
141    contributer = {pabuhr@plg},
142    author      = {O. M. Nierstrasz},
143    title       = {Active Objects in {Hybrid}},
144    journal     = sigplan,
145    volume      = 22,
146    number      = 12,
147    month       = dec,
148    year        = 1987,
149    pages       = {243-253},
150    note        = {Proceedings of the OOPSLA'87 Conference, Oct. 4--8, 1987, Orlando, Florida},
151    abstract    = {
152        Most object-oriented languages are strong on reusability or on
153        strong-typing, but weak on concurrency.  In response to this gap,
154        we are developing {\it Hybrid}, an object-oriented language in which
155        objects are the active entities.  Objects in Hybrid are organized
156        into {\it domains}, and concurrent executions into {\it activities}.
157        All object communications are based on remote procedure calls.
158        Unstructured {\it sends\/} and {\it accepts\/} are forbidden.  To
159        this the mechanisms of {\it delegation\/} and {\it delay queues\/}
160        are added to enable switching and triggering of activities.
161        Concurrent subactivities and atomic actions are provided for
162        compactness and simplicity.  We show how solutions to many important
163        concurrent problems [sic], such as pipelining, constraint management
164        and ``administration'' can be compactly expressed using these
165        mechanisms.
166   },
167   comment      = {Mentions Thoth in reference to delegation}
168}
169
170@book{Actors,
171    keywords    = {actors, concurrency},
172    contributer = {pabuhr@plg},
173    author      = {Gul A. Agha},
174    title       = {Actors: A Model of Concurrent Computation in Distributed Systems},
175    publisher   = {MIT Press, Cambridge},
176    year        = 1986
177}
178
179@article{polymorphImpl,
180    keywords    = {Napier88},
181    contributer = {gjditchfield@plg},
182    author      = {R. Morrison and A. Dearle and R. C. H. Connor and A. L. Brown},
183    title       = {An Ad Hoc Approach to the Implementation of Polymorphism},
184    journal     = toplas,
185    year        = 1991,
186    month       = jul,
187    volume      = 13,
188    number      = 3,
189    pages       = {342-371},
190    abstract    = {
191        Polymorphic abstraction provides the ability to write programs that
192        are independent of the form of the data over which they operate.
193        There are a number of different categories of polymorphic
194        expression---ad hoc and universal, which includes parametric and
195        inclusion---all of which have many advantages in terms of code
196        reuse and software economics.  It has proved difficult to provide
197        efficient implementations of polymorphism.  Here, we address this
198        problem and describe a new technique that can implement all forms
199        of polymorphism, use a conventional machine architecture, and
200        support nonuniform data representations.  Furthermore, the method
201        ensures that any extra cost of implementation applies to
202        polymorphic forms only, and allows such polymorphic forms to
203        persist over program invocations.
204    },
205    summary     = {
206        They give three ways to implement polymorphism: {\em textual
207        polymorphism}, which seems to be template instantiation, {\em
208        uniform polymorphism}, which they explain badly, and {\em tagged
209        polymorphism}, where object code performs type tests.
210
211        They use first-class procedures to implement polymorphism: routines
212        with type parameters are implemented as curried routines that
213        return a nested routine that refers to the type parameter.
214    }
215}
216
217@article{dim:ada,
218    keywords    = {Dimensional Analysis, Ada},
219    contributer = {gjditchfield@plg},
220    author      = {Paul N. Hilfinger},
221    title       = {An {Ada} Package for Dimensional Analysis},
222    journal     = toplas,
223    month       = apr,
224    year        = 1988,
225    volume      = 10,
226    number      = 2,
227    pages       = {189-203},
228}
229
230@mastersthesis{Younger91,
231    keywords    = {concurrency, C++, postponing requests},
232    contributer = {pabuhr@plg},
233    author      = {Brian M. Younger},
234    title       = {Adding Concurrency to {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
235    school      = {University of Waterloo},
236    year        = 1991,
237    address     = {Waterloo, Ontario, Canada, N2L 3G1},
238}
239
240@inproceedings{Buhr92c,
241    keywords    = {concurrency},
242    contributer = {pabuhr@plg},
243    author      = {Peter A. Buhr and Glen Ditchfield},
244    title       = {Adding Concurrency to a Programming Language},
245    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Technical Conference Proceedings},
246    organization= {USENIX Association},
247    address     = {Portland, Oregon, U.S.A.},
248    month       = aug,
249    year        = 1992,
250    pages       = {207-224},
251}
252
253@article{Buhr89b,
254    keywords    = {concurrency, C++},
255    contributer = {pabuhr@plg},
256    author      = {P. A. Buhr and Glen Ditchfield and C. R. Zarnke},
257    title       = {Adding Concurrency to a Statically Type-Safe Object-Oriented Programming Language},
258    journal     = sigplan,
259    volume      = 24,
260    number      = 4,
261    month       = apr,
262    year        = 1989,
263    pages       = {18-21},
264    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming, Sept. 26--27, 1988, San Diego, California, U.S.A.},
265}
266
267@article{Knuth66,
268    keywords    = {N-thread software-solution mutual exclusion},
269    contributer = {pabuhr@plg},
270    author      = {Donald E. Knuth},
271    title       = {Additional Comments on a Problem in Concurrent Programming Control},
272    journal     = cacm,
273    month       = may,
274    year        = 1966,
275    volume      = 9,
276    number      = 5,
277    pages       = {321-322},
278    note        = {Letter to the Editor}
279}
280
281@article{DeBruijn67,
282    keywords    = {N-thread software-solution mutual exclusion},
283    contributer = {pabuhr@plg},
284    author      = {Nicolaas Govert de Bruijn},
285    title       = {Additional Comments on a Problem in Concurrent Programming Control},
286    journal     = cacm,
287    month       = mar,
288    year        = 1967,
289    volume      = 10,
290    number      = 3,
291    pages       = {137-138},
292    note        = {letter to the Editor}
293}
294
295@phdthesis{Krischer10,
296    author      = {Roy Krischer},
297    title       = {Advanced Concepts in Asynchronous Exception Handling},
298    school      = {University of Waterloo},
299    year        = 2010,
300    month       = dec,
301    address     = {Waterloo, Ontario, Canada, N2L 3G1},
302    optnote     = {\textsf{http://uwspace.uwaterloo.ca/\-bitstream/10012/\-5751\-/1/Krischer\_Roy.pdf}},
303    note        = {\href{http://uwspace.uwaterloo.ca/bitstream/10012/5751/1/Krischer_Roy.pdf}{http://uwspace.uwaterloo.ca/\-bitstream/10012/\-5751\-/1/Krischer\_Roy.pdf}},
304}
305
306@article{Buhr00a,
307    keywords    = {exception handling},
308    contributer = {pabuhr@plg},
309    author      = {Peter A. Buhr and W. Y. Russell Mok},
310    title       = {Advanced Exception Handling Mechanisms},
311    journal     = ieeese,
312    volume      = 26,
313    number      = 9,
314    month       = sep,
315    year        = 2000,
316    pages       = {820-836},
317}
318
319@book{Richter97,
320    keywords    = {Win32, threads},
321    author      = {Jeffrey M. Richter},
322    title       = {Advanced Windows},
323    publisher   = {Microsoft Press},
324    year        = 1997,
325    edition     = {3rd},
326}
327
328@article{Francez77,
329    keywords    = {parameter passing, named/positional arguments},
330    contributer = {pabuhr@plg},
331    author      = {Nissim Francez},
332    title       = {Another Advantage of Keyword Notation for Parameter Communication with Subprograms},
333    journal     = cacm,
334    volume      = 20,
335    number      = 8,
336    month       = aug,
337    year        = 1977,
338    pages       = {604-605},
339}
340
341@manual{Akka,
342    keywords    = {Akka actor model},
343    contributer = {pabuhr@plg},
344    title       = {{A}kka {S}cala Documentation, Release 2.4.11},
345    organization= {Lightbend Inc.},
346    month       = sep,
347    year        = 2016,
348    note        = {\href{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}{http://\-doc.akka.io/\-docs/\-akka/\-2.4/\-AkkaScala.pdf}},
349}
350
351@article{Algol60,
352    keywords    = {Algol60},
353    contributer = {pabuhr@plg},
354    author      = {J. W. Backus and F. L. Bauer and J. Green and C. Katz and
355                   J. McCarthy and P. Naur and A. J. Perlis and H. Rutishauser and K. Samuelson
356                   and B. Vauquois and J.H. Wegstein and A. van Wijngaarden and M. Woodger},
357    title       = {Revised Report on the Algorithmic Language Algol 60},
358    editor      = {Peter Nauer},
359    journal     = cacm,
360    volume      = 6,
361    number      = 1,
362    month       = jan,
363    year        = 1963,
364    pages       = {1-17},
365}
366
367@article{Mellor-Crummey91,
368    keywords    = {spin locks, compare-and-swap, barriers},
369    contributer = {pabuhr@plg},
370    author      = {John M. Mellor-Crummey and Michael L. Scott},
371    title       = {Algorithm for Scalable Synchronization on Shared-Memory Multiprocessors},
372    journal     = tocs,
373    volume      = 9,
374    number      = 1,
375    month       = feb,
376    year        = 1991,
377    pages       = {21-65},
378}
379
380@article{Hoare61,
381    keywords    = {quick sort},
382    contributer = {pabuhr@plg},
383    author      = {C. A. R. Hoare},
384    title       = {Algorithms 63/64: Partition/Quicksort},
385    journal     = cacm,
386    volume      = 4,
387    number      = 7,
388    month       = jul,
389    year        = 1961,
390    pages       = {321},
391}
392
393@article{Cormack81,
394    keywords    = {},
395    contributer = {gjditchfield@plg},
396    author      = {Gordon V. Cormack},
397    title       = {An Algorithm for the Selection of Overloaded Functions in {Ada}},
398    journal     = sigplan,
399    year        = 1981,
400    month       = feb, volume = 16, number = 2, pages = {48-52},
401    comment     = {
402        A one-pass, top-down algorithm for overload resolution.  Input is a
403        parse tree and the desired result type, and output is the number of
404        solutions.  For each overloading of the root identifier with a
405        matching parameter list, recursively solve for each parameter for
406        the corresponding argument type---there should be one solution.
407    }
408}
409
410@book{Raynal86,
411    keywords    = {mutual exclusion, locks},
412    contributer = {pabuhr@plg},
413    author      = {M. Raynal},
414    title       = {Algorithms for Mutual Exclusion},
415    publisher   = {MIT Press},
416    address     = {Cambridge},
417    series      = {Scientific Computation Series},
418    year        = 1986,
419    note        = {Translated by D. Beeson},
420}
421
422@incollection{Gidenstam05,
423    keywords    = {lock free, dynamic memory allocation},
424    contributer = {pabuhr@plg},
425    author      = {Anders Gidenstam and Marina Papatriantafilou and Philippas Tsigas},
426    title       = {Allocating Memory in a Lock-free Manner},
427    editor      = {Gerth St{\o}lting Brodal and Stefano Leonardi},
428    booktitle   = {Algorithms -- ESA 2005},
429    pages       = {329-342},
430    publisher   = {Springer},
431    address     = {New York},
432    year        = 2005,
433    volume      = 3669,
434    series      = {Lecture Notes in Computer Science},
435}
436
437@book{Sites92,
438    keywords    = {computers, Alpha},
439    contributer = {pabuhr@plg},
440    editor      = {Richard L. Sites},
441    title       = {Alpha Architecture Reference Manual},
442    publisher   = {Digital Press, Burlington},
443    year        = 1992,
444}
445
446@book{alphard,
447    keywords    = {Parametric polymorphism, alphard, iterators, nested types},
448    contributer = {gjditchfield@plg},
449    key         = {Alphard},
450    editor      = {Mary Shaw},
451    title       = {{ALPHARD}: Form and Content},
452    publisher   = {Springer},
453    address     = {New York},
454    year        = 1981,
455    comment     = {Collection of papers about Alphard.}
456}
457
458@article{Kessels77,
459    keywords    = {monitors},
460    contributer = {pabuhr@plg},
461    author      = {Joep L. W. Kessels},
462    title       = {An Alternative to Event Queues for Synchronization in Monitors},
463    journal     = cacm,
464    volume      = 20,
465    number      = 7,
466    month       = jul,
467    year        = 1977,
468    pages       = {500-503},
469    annote      = {
470    }
471}
472
473@article{descr,
474    keywords    = {X2, subclasses, inheritance, parameterized classes},
475    contributer = {gjditchfield@plg},
476    author      = {David Sandberg},
477    title       = {An Alternative to Subclassing},
478    journal     = sigplan,
479    volume      = {21},    number = {11},
480    pages       = {424-428},
481    month       = nov, year = 1986,
482    comment     = {
483        The Smalltalk class hierarchy has three uses: factoring out code;
484        ``Abstraction superclasses'' such as Collection; rapid construction
485        of new classes by incremental change.
486
487        ``A descriptive class specifies a partial behavior by specifying a
488        set of procedure headings that describe what can be done with
489        instances of classes that belong to the descriptive class.''  An
490        ``instance'' statement declares a class to be an instance of a
491        descriptive class and defines the correspondence between
492        operations.  Procedures with descriptive class parameters take any
493        instance as arguments.  Descriptive classes can describe relations
494        like ``c is a collection with element type e'', but how such things
495        are used isn't explained.
496       
497        For each descriptive class used in a parameter list, an implicit
498        parameter is created that is passed a vector of procedures.
499    }
500}
501
502@incollection{Matsuoka93,
503    keywords    = {inheritance anomaly},
504    contributer = {pabuhr@plg},
505    author      = {Satoshi Matsuoka and Akinori Yonezawa},
506    title       = {Analysis of Inheritance Anomaly in Object-Oriented Concurrent Programming Languages},
507    booktitle   = {Research Directions in Concurrent Object-Oriented Programming},
508    editor      = {Gul Agha and Peter Wegner and Akinori Yonezawa},
509    publisher   = {MIT Press},
510    address     = {New York},
511    year        = 1993,
512    pages       = {107-150},
513}
514
515@article{Sinha00,
516    author      = {Saurabh Sinha and Mary Jean Harrold},
517    title       = {Analysis and Testing of Programs with Exception-Handling Constructs},
518    journal     = ieeese,
519    year        = 2000,
520    month       = sep,
521    volume      = 26,
522    number      = 9,
523    pages       = {849--871},
524}
525
526@inproceedings{Robillard99,
527    author      = {Martin P. Robillard and Gail C. Murphy},
528    title       = {Analyzing Exception Flow in {J}ava Programs},
529    booktitle   = {ESEC/FSE-7: Proceedings of the 7th European Software Engineering Conference held jointly
530                   with the 7th ACM SIGSOFT International Symposium on Foundations of Software Engineering},
531    year        = 1999,
532    pages       = {322--337},
533    isbn        = {3-540-66538-2},
534    location    = {Toulouse, France},
535    doi         = {http://doi.acm.org/10.1145/318773.319251},
536    publisher   = {Springer},
537    address     = {London, UK},
538}
539
540@book{C++,
541    keywords    = {C++, ANSI},
542    author      = {Margaret A. Ellis and Bjarne Stroustrup},
543    title       = {The Annotated {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Reference Manual},
544    publisher   = {Addison-Wesley},
545    address     = {Boston},
546    year        = 1990,
547    edition     = {1st},
548}
549
550@book{APL,
551    keywords    = {APL},
552    contributer = {pabuhr@plg},
553    author      = {K. E. Iverson},
554    title       = {A Programming Language},
555    publisher   = {Wiley, New York},
556    year        = 1962
557}
558
559@article{PS-Algol:old,
560    author      = {M. Atkinson and P. Bailey and K. Chisholm and P. Cockshott and R. Morrison},
561    title       = {An Approach to Persistent Programming},
562    journal     = {The Computer Journal},
563    year        = 1983,
564    volume      = 26,
565    number      = 4,
566    pages       = {360-365},
567}
568
569@inproceedings {Qin18,
570    author      = {Henry Qin and Qian Li and Jacqueline Speiser and Peter Kraft and John Ousterhout},
571    title       = {Arachne: Core-Aware Thread Management},
572    booktitle   = {13th {USENIX} Symp. on Oper. Sys. Design and Impl. ({OSDI} 18)},
573    year        = {2018},
574    address     = {Carlsbad, CA},
575    pages       = {145-160},
576    publisher   = {{USENIX} Association},
577    note        = {\href{https://www.usenix.org/conference/osdi18/presentation/qin}{https://\-www.usenix.org/\-conference/\-osdi18/\-presentation/\-qin}},
578}
579
580@article{Kessels82,
581    keywords    = {concurrency, critical section},
582    contributer = {pabuhr@plg},
583    author      = {Joep L. W. Kessels},
584    title       = {Arbitration Without Common Modifiable Variables},
585    journal     = acta,
586    volume      = 17,
587    number      = 2,
588    month       = jun,
589    year        = 1982,
590    pages       = {135-141},
591}
592
593@article{Buhr95a,
594    keywords    = {concurrency, library approach},
595    contributer = {pabuhr@plg},
596    author      = {Peter A. Buhr},
597    title       = {Are Safe Concurrency Libraries Possible?},
598    journal     = cacm,
599    month       = feb,
600    year        = 1995,
601    volume      = 38,
602    number      = 2,
603    pages       = {117-120},
604}
605
606@book{ARMv7,
607    key         = {ARM processor},
608    title       = {ARM Architecture Reference Manual},
609    publisher   = {ARM},
610    volume      = {ARM DDI 0406C.b (ID072512)},
611    year        = 2012,
612}
613
614@book{Herlihy08,
615    contributer = {pabuhr@plg},
616    author      = {Herlihy, Maurice and Shavit, Nir},
617    title       = {The Art of Multiprocessor Programming},
618    year        = 2008,
619    isbn        = {0123705916, 9780123705914},
620    publisher   = {Morgan Kaufmann Publishers},
621    address     = {San Francisco},
622}
623
624@inproceedings{Chung10,
625    keywords    = {transactional memory, lock-free programming, x86 architecture},
626    contributer = {pabuhr@plg},
627    author      = {Jaewoong Chung and Luke Yen and Stephan Diestelhorst and Martin Pohlack and Michael Hohmuth and David Christie and Dan Grossman},
628    title       = {ASF: AMD64 Extension for Lock-Free Data Structures and Transactional Memory},
629    booktitle   = {Proceedings of the 2010 43rd Annual IEEE/ACM International Symposium on Microarchitecture},
630    series      = {MICRO '43},
631    year        = 2010,
632    pages       = {39--50},
633    numpages    = {12},
634    publisher   = {IEEE Computer Society},
635    address     = {Washington, DC, USA},
636}
637
638@article{Buhr94a,
639    keywords    = {assignment, parameter passing, multiple assignment},
640    contributer = {pabuhr@plg},
641    author      = {P. A. Buhr and David Till and C. R. Zarnke},
642    title       = {Assignment as the Sole Means of Updating Objects},
643    journal     = spe,
644    month       = sep,
645    year        = 1994,
646    volume      = 24,
647    number      = 9,
648    pages       = {835-870},
649}
650
651@inproceedings{Krischer08,
652    keywords    = {exception handling, asynchronous, blocked tasks},
653    contributer = {pabuhr@plg},
654    author      = {Roy Krischer and Peter A. Buhr},
655    title       = {Asynchronous Exception Propagation in Blocked Tasks},
656    booktitle   = {4th International Workshop on Exception Handling (WEH.08)},
657    organization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},
658    address     = {Atlanta, U.S.A},
659    month       = nov,
660    year        = 2008,
661    pages       = {8-15},
662}
663
664@article{Joung00,
665    author      = {Joung, Yuh-Jzer},
666    title       = {Asynchronous group mutual exclusion},
667    journal     = {Dist. Comput.},
668    optjournal  = {Distributed Computing},
669    year        = {2000},
670    month       = {Nov},
671    volume      = {13},
672    number      = {4},
673    pages       = {189--206},
674}
675
676@article{oop:modpascal,
677    keywords    = {ModPascal},
678    contributer = {gjditchfield@plg},
679    author      = {Walter G. Olthoff},
680    title       = {Augmentation of Object-Oriented Programming by Concepts of Abstract Data Type Theory: The ModPascal Experience},
681    journal     = sigplan,
682    volume      = 21,
683    number      = 11,
684    pages       = {429-443},
685    month       = nov,
686    year        = 1986
687}
688
689@inproceedings{Shen91,
690    keywords    = {Ada, polymorphism},
691    contributer = {pabuhr@plg},
692    author      = {Jun Shen and Gordon V. Cormack},
693    title       = {Automatic instantiation in Ada},
694    booktitle   = {Proceedings of the ACM Tri-Ada Conference},
695    organization= {ACM},
696    address     = {San Jose, California, U.S.A},
697    month       = oct,
698    year        = 1991,
699    pages       = {338-346},
700}
701
702@article{Havender68,
703    keywords    = {deadlock},
704    contributer = {pabuhr@plg},
705    author      = {J. W. Havender},
706    title       = {Avoiding Deadlock in Multitasking Systems},
707    journal     = ibmsj,
708    volume      = 7,
709    number      = 2,
710    year        = 1968,
711    pages       = {74-84},
712}
713
714% B
715
716@article{Michael13,
717    contributer = {pabuhr@plg},
718    author      = {Maged M. Michael},
719    title       = {The Balancing Act of Choosing Nonblocking Features},
720    journal     = cacm,
721    volume      = 56,
722    number      = 9,
723    month       = sep,
724    year        = 2013,
725    pages       = {46--53},
726    publisher   = {ACM},
727    address     = {New York, NY, USA},
728}
729
730@incollection{beta:old,
731    keywords    = {beta, patterns, virtual types},
732    contributer = {gjditchfield@plg},
733    author      = {Bent Bruun Kristensen and Ole Lehrmann Madsen and Birger M{\o}ller-Pedersen and Kristen Nygaard},
734    title       = {The BETA Programming Language},
735    booktitle   = {Research Directions in Object-Oriented Programming},
736    publisher   = {MIT Press},
737    series      = {Computer Systems Series},
738    year        = 1987,
739    pages       = {7-48},
740    editor      = {Bruce Shriver and Peter Wegner}
741}
742
743@article{Knudsen87,
744    keyword     = {static exception handling mechanism, BETA, sequel},
745    contributor = {wyrmok@plg},
746    author      = {J{\o}rgen Lindskov Knudsen},
747    title       = {Better Exception Handling in Block Structured Systems},
748    journal     = {IEEE Software},
749    year        = 1987,
750    month       = may,
751    volume      = 4,
752    number      = 3,
753    pages       = {40-49},
754    comments    = {
755        Going up the call hierarchy to look for a handler does not fit an
756        otherwise statically scoped language. Also, not knowing which handler
757        to be used when raising an abnormal event is seen as a weakness of the
758        (dynamic) exception handling mechanism. Knudsen believed that raising
759        an exception should specify the handler for the exception -- the
760        handler is chosen when the exception is raised.  However, I don't think
761        his scheme can solve the problem, especially with all the callback
762        routines commonly found in OO programming.
763
764        BETA exception handling mechanism uses his work as a foundation.
765        However, I don't see any benefits BETA has over other language that is
766        a direct consequence of Knudsen's work. On the other hand, my knowledge
767        on BETA is very limited.
768        }
769}
770
771@book{BCPL,
772    keywords    = {BCPL},
773    contributer = {pabuhr@plg},
774    author      = {M. Richards and C. Whitby-Strevens},
775    title       = {{BCPL} -- The Language and Its Compiler},
776    publisher   = {Cambridge University Press, Cambridge},
777    year        = 1979,
778}
779
780@incollection{Madsen87,
781    keywords    = {nested classes},
782    contributer = {pabuhr@watmsg},
783    author      = {Ole Lehrmann Madsen},
784    title       = {Block Structure and Object Oriented Languages},
785    booktitle   = {Research Directions in Object-Oriented Programming},
786    editor      = {Bruce Shriver and Peter Wegner},
787    publisher   = {MIT Press},
788    series      = {Computer Systems Series},
789    year        = 1987,
790    pages       = {113-128}
791}
792
793@inproceedings{booleanClasses,
794    keywords    = {specifications},
795    contributer = {gjditchfield@plg},
796    author      = {David McAllester and Ramin Zabih},
797    title       = {Boolean Classes},
798    crossref    = "OOPSLA86",
799    pages       = {417-423},
800    abstract    = {
801        We extend the notion of class so that any Boolean combination of
802        classes is also a class.  Boolean classes allow greater precision
803        and conciseness in naming the class of objects governed a
804        particular method [sic].  A class can be viewed as a predicate
805        which is either true or false of any given object.  Unlike
806        predicates however classes have an inheritance hierarchy which is
807        known at compile time.  Boolean classes extend the notion of class,
808        making classes more like predicates, while preserving the compile
809        time computable inheritance hierarchy.
810    },
811    comment     = {
812        Classes are predicates; if object {\tt o} is in class {\tt C}, then
813        {\tt C} is true of {\tt o}.  Classes are combined with {\tt :AND},
814        {\tt :OR}, and {\tt :NOT}.  Inheritance is treated as implication:
815        {\tt (:implies C E)} means that if class {\tt C} is true of {\tt
816        o}, class expression {\tt E} is true of {\tt o}, so if {\tt E} is a
817        class, it is a superclass of {\tt C}.  Some class expressions, i.e.
818        {\tt (:OR c1 c2)}, can't be instantiated.  Others, i.e. {\tt (:NOT
819        c)}, can't be given methods or members because almost all classes
820        would inherit them, violating modularity.  The rules for spotting
821        these problems are complex.  Determining if one class inherits from
822        another needs an exponential algorithm.
823    }
824}
825
826@misc{BoostCoroutines15,
827    keywords    = {Boost Coroutine Library},
828    contributer = {pabuhr@plg},
829    author      = {Oliver Kowalke},
830    title       = {Boost Coroutine Library},
831    year        = 2015,
832    howpublished= {\href{http://www.boost.org/doc/libs/1_61_0/libs/coroutine/doc/html/index.html}
833                  {http://www.boost.org/\-doc/\-libs/1\_61\_0/\-libs/\-coroutine/\-doc/\-html/\-index.html}},
834}
835
836@misc{BoostThreads,
837    keywords    = {Boost Thread Library},
838    contributer = {pabuhr@plg},
839    author      = {Anthony Williams and Vicente J. Botet Escriba},
840    title       = {Boost Thread Library},
841    year        = 2015,
842    howpublished= {\href{https://www.boost.org/doc/libs/1_61_0/doc/html/thread.html}
843                  {https://\-www.boost.org/\-doc/\-libs/\-1\_61\_0/\-doc/\-html/\-thread.html}},
844}
845
846@mastersthesis{Krischer02,
847    author      = {Roy Krischer },
848    title       = {Bound Exceptions in Object-Oriented Programming Languages},
849    school      = {Universit\"at Mannheim},
850    address     = {Mannheim, Deutschland},
851    year        = 2002,
852    month       = oct,
853    type        = {Diplomarbeit},
854    note        = {\href{https://plg.uwaterloo.ca/~usystem/theses/KrischerThesis.pdf}{https://\-plg.uwaterloo.ca/\-$\sim$usystem/\-theses/\-KrischerThesis.pdf}},
855}
856
857@inproceedings{Buhr03,
858    keywords    = {exception handling, bound handler},
859    contributer = {pabuhr@plg},
860    author      = {Peter A. Buhr and Roy Krischer},
861    title       = {Bound Exceptions in Object Programming},
862    booktitle   = {Proceedings of the ECOOP 2003 Workshop on Exception Handling in Object Oriented Systems:
863                  Towards Emerging Application Areas and New Programming Paradigms},
864    organization= {ECOOP},
865    address     = {Darmstadt, Germany},
866    month       = jul,
867    year        = 2003,
868    pages       = {20-26},
869}
870%    note       = {http://www.cs.umn.edu/research/technical_reports.php/listing/technical_reports.php?page=report&report_id=03-028}
871
872@inproceedings{Buhr06b,
873    keywords    = {exception handling, bound exceptions},
874    author      = {Peter A. Buhr and Roy Krischer},
875    title       = {Bound Exceptions in Object-Oriented Programming},
876    editor      = {C. Dony and J. L. Knudsen and A. Romanovsky and A. Tripathi},
877    booktitle   = {Advanced Topics in Exception Handling Techniques},
878    publisher   = {Springer},
879    series      = {Lecture Notes in Computer Science},
880    volume      = 4119,
881    year        = 2006,
882    pages       = {1-21}
883}
884
885% C
886
887@book{C,
888    keywords    = {C},
889    contributer = {pabuhr@plg},
890    author      = {Brian W. Kernighan and Dennis M. Ritchie},
891    title       = {The {C} Programming Language},
892    publisher   = {Prentice-Hall},
893    address     = {Englewood Cliffs},
894    year        = 1988,
895    edition     = {2nd},
896    series      = {Prentice-Hall Software Series},
897    comment     = {
898         based on draft-proposed ANSI C
899    }
900}
901
902@book{C:old,
903    keywords    = {C},
904    contributer = {pabuhr@plg},
905    author      = {Brian W. Kernighan and Dennis M. Ritchie},
906    title       = {The {C} Programming Language},
907    publisher   = {Prentice-Hall},
908    address     = {Englewood Cliffs},
909    year        = 1978,
910    edition     = {1st},
911}
912
913@manual{ANSI89:C,
914    keywords    = {ANSI C 89},
915    contributer = {gjditchfield@plg},
916    author      = {C90},
917    title       = {Programming Languages -- {C}},
918    organization= {American National Standards Institute},
919    address     = {New York, NY, U.S.A.},
920    year        = 1990,
921    note        = {ANSI/ISO 9899-1990}
922}
923
924@manual{C11,
925    keywords    = {ISO/IEC C 11},
926    contributer = {pabuhr@plg},
927    key         = {C11},
928    title       = {C Programming Language {ISO/IEC} 9889:2011-12},
929    edition     = {3rd},
930    publisher   = {International Standard Organization},
931    address     = {\href{https://www.iso.org/standard/57853.html}{https://\-www.iso.org/\-standard/\-57853.html}},
932    year        = 2012,
933}
934
935@manual{C++Concepts,
936    keywords    = {ISO/IEC TS 19217:2015},
937    contributer = {a3moss@uwaterloo.ca},
938    key         = {Concepts},
939    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming language -- Extensions for concepts {ISO/IEC} {TS} 19217:2015},
940    publisher   = {International Standard Organization},
941    address     = {\href{https://www.iso.org/standard/64031.html}{https://\-www.iso.org/\-standard/\-64031.html}},
942    year        = 2015,
943}
944
945@misc{Cforall,
946    contributer = {pabuhr@plg},
947    key         = {Cforall},
948    author      = {{\textsf{C}{$\mathbf{\forall}$} Features}},
949    howpublished= {\href{https://plg.uwaterloo.ca/~cforall/features}{https://\-plg.uwaterloo.ca/\-$\sim$cforall/\-features}},
950}
951
952@mastersthesis{Esteves04,
953    keywords    = {Cforall, parametric polymorphism, overloading},
954    contributer = {pabuhr@plg},
955    author      = {Rodolfo Gabriel Esteves},
956    title       = {\textsf{C}$\mathbf{\forall}$, a Study in Evolutionary Design in Programming Languages},
957    school      = {School of Computer Science, University of Waterloo},
958    year        = 2004,
959    address     = {Waterloo, Ontario, Canada, N2L 3G1},
960    note        = {\href{http://plg.uwaterloo.ca/theses/EstevesThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-EstevesThesis.pdf}},
961}
962
963@misc{CFAStackEvaluation,
964    contributer = {a3moss@plg},
965    author      = {Aaron Moss},
966    title       = {\textsf{C}$\mathbf{\forall}$ Stack Evaluation Programs},
967    year        = 2018,
968    howpublished= {\href{https://cforall.uwaterloo.ca/CFAStackEvaluation.zip}{https://cforall.uwaterloo.ca/\-CFAStackEvaluation.zip}},
969}
970
971@article{Moss18,
972    keywords    = {type systems, polymorphism, tuples, Cforall},
973    contributer = {pabuhr@plg},
974    author      = {Aaron Moss and Robert Schluntz and Peter A. Buhr},
975    title       = {\textsf{C}$\mathbf{\forall}$ : Adding Modern Programming Language Features to {C}},
976    journal     = spe,
977    volume      = 48,
978    number      = 12,
979    month       = dec,
980    year        = 2018,
981    pages       = {2111-2146},
982    note        = {\href{http://dx.doi.org/10.1002/spe.2624}{http://\-dx.doi.org/\-10.1002/\-spe.2624}},
983}
984
985@inproceedings{c++scheme,
986    keywords    = {},
987    contributer = {gjditchfield@plg},
988    author      = {Vincent F. Russo and Simon M. Kaplan},
989    title       = {A {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Interpreter for {S}cheme},
990    booktitle   = {Usenix {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference},
991    year        = 1988,
992    pages       = {95-108},
993    summary     = {
994        The SIOD interpreter for a Scheme subset, written in C, has a
995        tagged union representing data objects, and read(), eval(), and
996        print() functions that are basically large switch statements that
997        switch based on the tag.  The authors rewrote it to use a class
998        with virtual read(), eval(), and print() members, without changing
999        any algorithms.  The result was more modular, more easily
1000        extensible, more reliable, and slightly faster.
1001    },
1002    comment     = {
1003        The evidence given is thin.
1004    },
1005}
1006
1007@article{doskernel,
1008    keywords    = {light weight processes},
1009    contributer = {gjditchfield@plg},
1010    author      = {Tom Green},
1011    title       = {A {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Multitasking Kernel},
1012    journal     = {Dr. Dobb's Journal of Software Tools},
1013    year        = 1989,
1014    month       = feb,
1015    volume      = 14,
1016    number      = 2,
1017    pages       = {45-51},
1018    comment     = {
1019       A light-weight multitasking kernel for MS-DOS.  A task\_control
1020       object holds task objects, which may block themselves on signal
1021       objects.  Task switching is normally preemptive, but tasks can turn
1022       off preemption before calling non-reentrant routines.  Source code
1023       is given.
1024    }
1025}
1026
1027@inproceedings{Doeppner87,
1028    keywords    = {concurrency},
1029    contributer = {pabuhr@plg},
1030    author      = {Thomas W. Doeppner and Alan J. Gebele},
1031    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} on a Parallel Machine},
1032    booktitle   = {Proceedings and Additional Papers {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Workshop},
1033    organization= {USENIX Association},
1034    address     = {Santa Fe, New Mexico, U.S.A},
1035    month       = nov,
1036    year        = 1987,
1037    pages       = {94-107},
1038}
1039
1040@book{Lippman91,
1041    keywords    = {C++},
1042    contributer = {pabuhr@plg},
1043    author      = {Stanley B. Lippman},
1044    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Primer},
1045    publisher   = {Addison-Wesley},
1046    address     = {Boston},
1047    year        = 1991,
1048    edition     = {2nd},
1049    note        = {QA76.73.C15L57},
1050}
1051
1052@book{c++:v1,
1053    keywords    = {C++},
1054    contributer = {gjditchfield@plg},
1055    author      = {Bjarne Stroustrup},
1056    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1057    publisher   = {Addison-Wesley},
1058    address     = {Boston},
1059    year        = 1986,
1060    edition     = {1st},
1061    series      = {Addison-Wesley Series in Computer Science}
1062}
1063
1064@book{c++:v2,
1065    keywords    = {C++},
1066    contributer = {pabuhr@plg},
1067    author      = {Bjarne Stroustrup},
1068    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1069    publisher   = {Addison-Wesley},
1070    address     = {Boston},
1071    year        = 1991,
1072    edition     = {2nd},
1073}
1074
1075@book{c++:v3,
1076    keywords    = {C++},
1077    contributer = {pabuhr@plg},
1078    author      = {Bjarne Stroustrup},
1079    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1080    publisher   = {Addison Wesley Longman},
1081    year        = 1997,
1082    edition     = {3rd},
1083}
1084
1085@manual{Csharp,
1086    keywords    = {C#},
1087    contributer = {pabuhr@plg},
1088    title       = {C\# Language Specification, Standard ECMA-334},
1089    organization= {ECMA International Standardizing Information and Communication Systems},
1090    month       = jun,
1091    year        = 2006,
1092    edition     = {4th},
1093}
1094
1095@article{Buhr85,
1096    keywords    = {goto, multi-exit loop},
1097    contributer = {pabuhr@plg},
1098    author      = {P. A. Buhr},
1099    title       = {A Case for Teaching Multi-exit Loops to Beginning Programmers},
1100    journal     = sigplan,
1101    volume      = 20,
1102    number      = 11,
1103    month       = nov,
1104    year        = 1985,
1105    pages       = {14-22}
1106}
1107
1108@inproceedings{Necula02,
1109    author      = {Necula, George C. and McPeak, Scott and Weimer, Westley},
1110    title       = {{CCured}: Type-safe Retrofitting of Legacy Code},
1111    booktitle   = {Proceedings of the 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},
1112    series      = {POPL '02},
1113    year        = {2002},
1114    location    = {Portland, Oregon},
1115    pages       = {128-139},
1116    publisher   = {ACM},
1117    address     = {New York, NY, USA},
1118}
1119
1120@techreport{cforall-ug,
1121    keywords    = {cforall, user guide},
1122    contributer = {pabuhr@plg},
1123    author      = {Peter A. Buhr and Glen Ditchfield and David Till and Charles R. Zarnke},
1124    title       = {\textsf{C}$\mathbf{\forall}$ Users Guide, Version 0.1},
1125    institution = {Department of Computer Science, University of Waterloo},
1126    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1127    month       = oct,
1128    year        = 2001,
1129    note        = {\href{http://plg.uwaterloo.ca/~cforall/cfa.ps}{http://\-plg.uwaterloo.ca/\-$\sim$cforall/\-cfa.ps}},
1130}
1131
1132@manual{cforall-refrat,
1133    keywords    = {polymorphism},
1134    contributer = {gjditchfield@plg},
1135    author      = {Glen Ditchfield},
1136    title       = {Cforall Reference Manual and Rationale},
1137    edition     = {Revision 1.82},
1138    month       = jan,
1139    year        = 1998,
1140    note        = {{\small\textsf{ftp://\-plg.uwaterloo.ca/\-pub/\-Cforall/\-refrat.ps.gz}}},
1141}
1142
1143@inproceedings{Tarditi18,
1144    keywords    = {Checked C},
1145    contributer = {a3moss@uwaterloo.ca},
1146    author      = {Tarditi, David and Elliott, Archibald Samuel and Ruef, Andrew and Hicks, Michael},
1147    title       = {Checked C: Making C Safe by Extension},
1148    booktitle   = {2018 IEEE Cybersecurity Development (SecDev)},
1149    year = {2018},
1150    month = {September},
1151    pages = {53-60},
1152    publisher = {IEEE},
1153    url = {https://www.microsoft.com/en-us/research/publication/checkedc-making-c-safe-by-extension/},
1154}
1155
1156@misc{Clang,
1157    keywords = {clang},
1158    contributer = {a3moss@uwaterloo.ca},
1159    title = {Clang: a {C} language family frontend for {LLVM}},
1160    howpublished = {\href{https://clang.llvm.org/}{https://\-clang.llvm.org/}}
1161}
1162
1163@book{Yourdon79,
1164    keywords    = {software engineering},
1165    contributer = {pabuhr@plg},
1166    editor      = {Edward Nash Yourdon},
1167    title       = {Classics in Software Engineering},
1168    publisher   = {Yourdon Press},
1169    address     = {New York},
1170    year        = 1979,
1171}
1172
1173@inproceedings{Crnogorac98,
1174    keywords    = {inheritance anomaly},
1175    contributer = {pabuhr@plg},
1176    author      = {Lobel Crnogorac and Anand S. Rao and Kotagiri Ramamohanarao},
1177    title       = {Classifying Inheritance Mechanisms in Concurrent Object-Oriented Programming},
1178    editor      = {Eric Jul},
1179    booktitle   = {{ECOOP}~'98---Object-Oriented Programming},
1180    series      = {Lecture Notes in Computer Science},
1181    publisher   = {Springer},
1182    volume      = 1445,
1183    year        = 1998,
1184    pages       = {571-601},
1185    ISBN        = {3-540-64737-6},
1186    ISSN        = {0302-9743},
1187    abstract    = {
1188        Inheritance is one of the key concepts in object-oriented rogramming. However, the
1189        usefulness of inheritance in concurrent object-oriented programming is greatly
1190        reduced by the problem of inheritance anomaly. Inheritance anomaly is manifested
1191        by undesirable re-definitions of inherited code. The problem is aggravated by the
1192        lack of a formal analysis, with a multitude of differing proposals and conflicting
1193        opinions causing the current state of research, and further directions, to be
1194        unclear. In this paper we present a formal analysis of inheritance anomaly in
1195        concurrent object-oriented programming. Starting from a formal definition of the
1196        problem we develop a taxonomy of the anomaly, and use it to classify the various
1197        proposals. As a result, the major ideas, trends and limitations of the various
1198        proposals are clearly exposed. Formal analysis of the anomaly and a thorough
1199        exposition of its causes and implications are the pre-requisites for a successful
1200        integration of inheritance and concurrency.
1201    },
1202}
1203
1204@book{CLU,
1205    keywords    = {CLU},
1206    contributer = {gjditchfield@plg},
1207    author      = {Barbara Liskov and Russell Atkinson and Toby Bloom and Eliot
1208                Moss and J. Craig Schaffert and Robert Scheifler and Alan Snyder},
1209    title       = {CLU Reference Manual},
1210    publisher   = {Springer},
1211    address     = {New York},
1212    year        = 1981,
1213    volume      = 114,
1214    series      = {Lecture Notes in Computer Science}
1215}
1216
1217@manual{Cobol14,
1218    keywords    = {ISO/IEC Cobol 14},
1219    contributer = {pabuhr@plg},
1220    author      = {Cobol14},
1221    title       = {Programming Languages -- {Cobol} ISO/IEC 1989:2014},
1222    edition     = {2nd},
1223    institution = {International Standard Organization},
1224    address     = {\href{https://www.iso.org/standard/51416.html}{https://\-www.iso.org/\-standard/\-51416.html}},
1225    year        = 2014,
1226}
1227
1228@article{coagulation,
1229    keywords    = {register allocation, instruction selection, jello},
1230    contributer = {gjditchfield@plg},
1231    author      = {Michael Karr},
1232    title       = {Code Generation by Coagulation},
1233    journal     = sigplan,
1234    year        = 1984,
1235    month       = jun,
1236    volume      = 19,
1237    number      = 6,
1238    pages       = {1-12},
1239    note        = {Proceedings of the ACM SIGPLAN '84 Symposium on Compiler Construction},
1240    abstract    = {
1241        This paper describes a new approach to code-generation.  The
1242        central tenet is that there must be a more intimate coupling
1243        between register allocation and instruction selection than exists
1244        in present-day technology.  This is achieved by generating code in
1245        very small regions and gradually coalescing the part of the program
1246        that is ``compiled''.
1247    },
1248}
1249
1250@article{Soloway83,
1251    keywords    = {goto, structure programming},
1252    contributer = {pabuhr@plg},
1253    author      = {E. Soloway and J. Bonar and K. Ehrlich},
1254    title       = {Cognitive Strategies and Looping Constructs: An Empirical Study},
1255    journal     = cacm,
1256    month       = nov,
1257    year        = 1983,
1258    volume      = 26,
1259    number      = 11,
1260    pages       = {853-860},
1261}
1262
1263@inproceedings{Odersky01,
1264 keywords = {Scala},
1265 contributer = {a3moss@uwaterloo.ca},
1266 author = {Odersky, Martin and Zenger, Christoph and Zenger, Matthias},
1267 title = {Colored Local Type Inference},
1268 booktitle = {Proceedings of the 28th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},
1269 series = {POPL '01},
1270 year = {2001},
1271 isbn = {1-58113-336-7},
1272 location = {London, United Kingdom},
1273 pages = {41--53},
1274 numpages = {13},
1275 url = {http://doi.acm.org/10.1145/360204.360207},
1276 doi = {10.1145/360204.360207},
1277 acmid = {360207},
1278 publisher = {ACM},
1279 address = {New York, NY, USA},
1280}
1281
1282@book{sml:commentary,
1283    author      = {Robin Milner and Mads Tofte},
1284    title       = {Commentary on Standard {ML}},
1285    publisher   = {MIT Press},
1286    address     = {Cambridge},
1287    year        = 1991
1288}
1289
1290@article{Hyman66,
1291    keywords    = {mutual exclusion, software solution, incorrect},
1292    contributer = {pabuhr@plg},
1293    author      = {Harris Hyman},
1294    title       = {Comments on a Problem in Concurrent Programming Control},
1295    journal     = cacm,
1296    month       = jan,
1297    year        = 1966,
1298    volume      = 9,
1299    number      = 1,
1300    pages       = {45},
1301    note        = {Letter to the Editor}
1302}
1303
1304@inproceedings{clos,
1305    keywords    = {},
1306    contributer = {gjditchfield@plg},
1307    author      = {Linda G. DeMichiel and Richard P. Gabriel},
1308    title       = {The Common Lisp Object System: An Overview},
1309    booktitle   = {ECOOP '87. European Conference on Object-Oriented Programming},
1310    year        = 1987,
1311    pages       = {151-170},
1312    publisher   = {Springer}
1313}
1314
1315@book{CommonLisp,
1316    keywords    = {common lisp},
1317    contributer = {pabuhr@plg},
1318    author      = {Guy Steele},
1319    title       = {COMMON LISP: The Language},
1320    publisher   = {Digital Press},
1321    address     = {New York},
1322    year        = 1984
1323}
1324
1325@article{CommonLoops,
1326    author      = {D. Bobrow and K. Kahn and G. Kiczales and L. Masinter and M. Stefik and F. Zdybel},
1327    title       = {CommonLoops: Merging Common Lisp and Object-Oriented Programming},
1328    address     = {Portland, Oregon, U.S.A.},
1329    journal     = {Proc. ACM Conf. on Object-Oriented Systems, Languages and Applications},
1330    year        = 1986,
1331    month       = sep,
1332    pages       = {17-29},
1333}
1334
1335@article{co-overview,
1336    keywords    = {CommonObjects, implementation, encapsulation},
1337    contributer = {gjditchfield@plg},
1338    author      = {Alan Snyder},
1339    title       = {CommonObjects: An Overview},
1340    journal     = sigplan,
1341    year        = 1986,
1342    month       = oct,
1343    volume      = 21,
1344    number      = 10,
1345    pages       = {19-28},
1346    note        = {Object Oriented Programming Workshop}
1347}
1348
1349@article{CSP,
1350    keywords    = {CSP, concurrency},
1351    contributer = {pabuhr@plg},
1352    author      = {C. A. R. Hoare},
1353    title       = {Communicating Sequential Processes},
1354    journal     = cacm,
1355    month       = aug,
1356    year        = 1978,
1357    volume      = 21,
1358    number      = 8,
1359    pages       = {666-677}
1360}
1361
1362@book{Hoare85,
1363    author      = {C. A. R. Hoare},
1364    title       = {Communicating Sequential Processes},
1365    year        = 1985,
1366    isbn        = {0-13-153271-5},
1367    publisher   = {Prentice-Hall},
1368    address     = {Upper Saddle River, NJ, USA},
1369    note        = {\href{http://www.usingcsp.com/cspbook.pdf}{http://\-www.usingcsp.com/\-cspbook.pdf}},
1370}
1371
1372@article{Hansen72a,
1373    keywords    = {monitors, automatic signal},
1374    contributer = {pabuhr@plg},
1375    author      = {Per {Brinch Hansen}},
1376    title       = {A Comparison of Two Synchronizing Concepts},
1377    journal     = acta,
1378    volume      = 1,
1379    year        = 1972,
1380    pages       = {190-199},
1381}
1382
1383@book{Aho06,
1384    author      = {Alfred V. Aho and Monica S. Lam and Ravi Sethi and Jeffrey D. Ullman},
1385    title       = {Compilers: Principles, Techniques, and Tools},
1386    edition     = {2nd},
1387    year        = {2006},
1388    publisher   = {Addison-Wesley Longman Publishing},
1389    address     = {Boston, MA, USA},
1390}
1391
1392@article{Bacon94,
1393    keywords    = {parallelizing compiler},
1394    contributer = {pabuhr@plg},
1395    author      = {David F. Bacon and Susan L. Graham and Oliver J. Sharp},
1396    title       = {Compiler Transformations for High-Performance Com\-puting},
1397    journal     = acmcs,
1398    volume      = 26,
1399    number      = 4,
1400    month       = dec,
1401    year        = 1994,
1402    pages       = {345-420},
1403}
1404
1405@inproceedings{Berger01,
1406    author      = {Emery D. Berger and Benjamin G. Zorn and Kathryn S. McKinley},
1407    title       = {Composing High-Performance Memory Allocators},
1408    booktitle   = {{SIGPLAN} Conference on Programming Language Design and Implementation},
1409    pages       = {114-124},
1410    year        = 2001,
1411    url         = {http://citeseer.ist.psu.edu/berger01composing.html}
1412} 
1413
1414@article{Andrews83,
1415    keywords    = {general concurrency},
1416    contributer = {pabuhr@plg},
1417    author      = {Gregory R. Andrews and Fred B. Schneider},
1418    title       = {Concepts and Notations for Concurrent Programming},
1419    journal     = acmcs,
1420    volume      = 15,
1421    number      = 1,
1422    month       = mar,
1423    year        = 1983,
1424    pages       = {3-43},
1425}
1426
1427@mastersthesis{Mok97,
1428    author      = {Wing Yeung Russell Mok},
1429    title       = {Concurrent Abnormal Event Handling Mechanisms},
1430    school      = {University of Waterloo},
1431    year        = 1997,
1432    month       = sep,
1433    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1434    note        = {\href{http://plg.uwaterloo.ca/theses/MokThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-MokThesis.pdf}},
1435}
1436
1437@article{Gehani86,
1438    keywords    = {Concurrent programming, C, Distributed systems, rendezvous},
1439    contributer = {dgharriss@plg},
1440    author      = {N. H. Gehani and W. D. Roome},
1441    title       = {{Concurrent C}},
1442    journal     = spe,
1443    volume      = 16,
1444    number      = 9,
1445    month       = sep,
1446    year        = 1986,
1447    pages       = {821-844},
1448    abstract    = {
1449        Our objective is to enhance C so that it can be used to write
1450        concurrent programs that can run efficiently on both single computers
1451        and multicomputers.  Our concurrent programming extensions to C are
1452        based on the {\it rendezvous\/} concept.  These extensions include
1453        mechanisms for the declaration and creation of processes, for process
1454        synchronization and interaction, for process termination and abortion.
1455        We give a rationale for our decisions and compare Concurrent C
1456        extensions with the concurrent programming facilities in Ada.
1457        Concurrent C has been implemented on the UNIX system running on a
1458        single processor.  A distributed version of Concurrent C is being
1459        implemented.
1460   },
1461   comment      = {
1462        Select with guarded and screened accepts.  Typed processes.
1463        Process-valued expressions and process variables.  Processes have
1464        execution priority: Create {\em process-type-name}(args) [with
1465        priority(p)], and the priority can be changed on the fly.  Complicated
1466        guard/screen structure on accept: accept {\em transaction}(param names)
1467        [suchthat (exp)] [by (exp)] [compoundstatement].  Accepts cannot
1468        appear in functions!  Can specify timeouts on transaction calls.
1469        Code examples: buffer process, dining philosophers, lock manager.
1470        Section on diffs between Concurrent C and Ada.
1471   }
1472}
1473
1474@article{ConcurrentC++,
1475    keywords    = {concurrency, C++},
1476    contributer = {pabuhr@plg},
1477    author      = {N. H. Gehani and W. D. Roome},
1478    title       = {Concurrent {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}: Concurrent Programming with Class(es)},
1479    journal     = spe,
1480    month       = dec,
1481    year        = 1988,
1482    volume      = 18,
1483    number      = 12,
1484    pages       = {1157-1177}
1485}
1486
1487@article{Courtois71,
1488    keywords    = {reader and writer, p and v},
1489    contributer = {pabuhr@plg},
1490    author      = {P. J. Courtois and F. Heymans and D. L. Parnas},
1491    title       = {Concurrent Control with Readers and Writers},
1492    journal     = cacm,
1493    volume      = 14,
1494    number      = 10,
1495    month       = oct,
1496    year        = 1971,
1497    pages       = {667-668},
1498    annote      = {
1499                Many errors in the two solutions.
1500    }
1501}
1502
1503@misc{NThreadCode13,
1504    keywords    = {N-thread software-solution mutual exclusion},
1505    contributer = {pabuhr@plg},
1506    key         = {concurrent locking},
1507    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
1508    title       = {concurrent-locking},
1509    howpublished= {\href{https://github.com/pabuhr/concurrent-locking}{https://\-github.com/\-pabuhr/\-concurrent-locking}},
1510}
1511
1512@incollection{Reppy93,
1513    keywords    = {ML, concurrency, continuation passing},
1514    contributer = {pabuhr@plg},
1515    author      = {John H. Reppy},
1516    title       = {Concurrent {ML}: Design, Application and Semantics},
1517    booktitle   = {Functional Programming, Concurrency, Simulation and Automated Reasoning},
1518    editor      = {P. E. Lauer},
1519    pages       = {165-198},
1520    publisher   = {Springer},
1521    address     = {Berlin, DE},
1522    year        = 1993,
1523    ISBN        = {3-540-56883-2},
1524    abstract    = {
1525        Concurrent ML (CML) is a high-level language for concurrent
1526        programming. It is an extension of Standard ML (SML) and is implemented
1527        on top of Standard ML of New Jersey (SML/NJ). CML is a practical
1528        language and is being used to build real systems. It demonstrates that
1529        one need not sacrifice high-level notation in order to have good
1530        performance. CML is also a well-defined language. In the tradition of
1531        SML, it has a formal semantics and its type-soundness has been
1532        proven.},
1533    note        = {
1534        Proceedings of International Lecture Series 1991-92, McMaster
1535        UniversityLecture Notes in Computer Science 693.},
1536}
1537
1538@article{BLASE-2,
1539    keywords    = {concurrency, BLASE-2},
1540    contributer = {pabuhr@plg},
1541    author      = {Piyush Mehrotra and John Van Rosendale},
1542    title       = {Concurrent Object Access in BLASE~2},
1543    journal     = sigplan,
1544    volume      = 24,
1545    number      = 4,
1546    month       = apr,
1547    year        = 1989,
1548    pages       = {40-42},
1549    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming,
1550                   Sept. 26--27, 1988, San Diego, California, U.S.A},
1551}
1552
1553@techreport{Kafura88,
1554    keywords    = {objects, concurrency},
1555    contributer = {pabuhr@plg},
1556    author      = {Dennis Kafura},
1557    title       = {Concurrent Object-Oriented Real-Time Systems Research},
1558    institution = {Department of Computer Science, Virginia Polytechnic},
1559    number      = {TR 88-47},
1560    year        = 1988
1561}
1562
1563@article{Buhr92a,
1564    keywords    = {C++, concurrency, light-weight process, shared memory},
1565    contributer = {pabuhr@plg},
1566    author      = {P. A. Buhr and Glen Ditchfield and R. A. Stroobosscher and B. M. Younger and C. R. Zarnke},
1567    title       = {$\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}: Concurrency in the Object-Oriented Language {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
1568    journal     = spe,
1569    volume      = 22,
1570    number      = 2,
1571    month       = feb,
1572    year        = 1992,
1573    pages       = {137-172},
1574}
1575
1576@manual{uC++,
1577    keywords    = {C++, concurrency, light-weight process, shared memory},
1578    contributer = {pabuhr@plg},
1579    key         = {uC++},
1580    author      = {Peter A. Buhr},
1581    title       = {$\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Annotated Reference Manual, Version 7.0.0},
1582    organization= {University of Waterloo},
1583    month       = sep,
1584    year        = 2018,
1585    note        = {\href{https://plg.uwaterloo.ca/~usystem/pub/uSystem/uC++.pdf}{https://\-plg.uwaterloo.ca/\-$\sim$usystem/\-pub/\-uSystem/uC++.pdf}},
1586}
1587
1588@book{Burns93,
1589    keywords    = {concurrency, Pascal},
1590    contributer = {pabuhr@plg},
1591    author      = {Alan Burns and Geoff Davies},
1592    title       = {Concurrent Programming},
1593    publisher   = {Addison Wesley Longman},
1594    year        = 1993,
1595}
1596
1597@article{Hansen73a,
1598    keywords    = {monitors},
1599    contributer = {pabuhr@plg},
1600    author      = {Per {Brinch Hansen}},
1601    title       = {Concurrent Programming Concepts},
1602    journal     = spe,
1603    month       = dec,
1604    year        = 1973,
1605    volume      = 5,
1606    number      = 4,
1607    pages       = {223-245},
1608}
1609
1610@book{Lea97,
1611    keywords    = {concurrency, Java},
1612    contributer = {pabuhr@plg},
1613    author      = {Doug Lea},
1614    title       = {Concurrent Programming in {J}ava: Design Principles and Patterns},
1615    publisher   = {Addison-Wesley},
1616    address     = {Boston},
1617    year        = 1997,
1618    edition     = {1st},
1619}
1620
1621@book{Hartley98,
1622    keywords    = {concurrency, Java},
1623    contributer = {pabuhr@plg},
1624    author      = {Stephen J. Hartley},
1625    title       = {Concurrent Programming: The {J}ava Programming Language},
1626    publisher   = {Oxford University Press},
1627    year        = 1998,
1628    edition     = {1st},
1629}
1630
1631@book{Lea00,
1632    keywords    = {concurrency, Java},
1633    contributer = {pabuhr@plg},
1634    author      = {Doug Lea},
1635    title       = {Concurrent Programming in {J}ava: Design Principles and Patterns},
1636    publisher   = {Addison-Wesley},
1637    address     = {Boston},
1638    year        = 2000,
1639    edition     = {2nd},
1640}
1641
1642@book{ConcurrentC,
1643    keywords    = {concurrency, C},
1644    contributer = {pabuhr@plg},
1645    author      = {N. H. Gehani and W. D. Roome},
1646    title       = {The {Concurrent C} Programming Language},
1647    publisher   = {Silicon Press},
1648    address     = {Summit},
1649    year        = 1989,
1650}
1651
1652@mastersthesis{Sun15,
1653    author      = {Sun, Xianda},
1654    title       = {Concurrent High-performance Persistent Hash Table In {J}ava},
1655    school      = {School of Computer Sc., University of Waterloo},
1656    year        = 2015,
1657    optaddress  = {Waterloo, Ontario, Canada, N2L 3G1},
1658    note        = {\href{https://uwspace.uwaterloo.ca/handle/10012/10013}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-10013}},
1659}
1660
1661@book{Andrews91:book,
1662    keywords    = {concurrency},
1663    contributer = {pabuhr@plg},
1664    author      = {Gregory R. Andrews},
1665    title       = {Concurrent Programming: Principles and Practice},
1666    publisher   = {Benjamin/Cummings Publish\-ing},
1667    address     = {Redwood City},
1668    year        = 1991,
1669}
1670
1671@article{Buhr05a,
1672    keywords    = {concurrency, myths},
1673    contributer = {pabuhr@plg},
1674    author      = {Peter A. Buhr and Ashif S. Harji},
1675    title       = {Concurrent Urban Legends},
1676    journal     = ccpe,
1677    month       = aug,
1678    year        = 2005,
1679    volume      = 17,
1680    number      = 9,
1681    pages       = {1133-1172},
1682}
1683
1684@mastersthesis{Delisle18,
1685    keywords    = {concurrency, Cforall},
1686    contributer = {pabuhr@plg},
1687    author      = {Thierry Delisle},
1688    title       = {Concurrency in \textsf{C}$\mathbf{\forall}$},
1689    school      = {School of Computer Science, University of Waterloo},
1690    year        = 2018,
1691    optaddress  = {Waterloo, Ontario, Canada, N2L 3G1},
1692    note        = {\href{https://uwspace.uwaterloo.ca/handle/10012/12888}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-12888}},
1693}
1694
1695@article{Delisle18b,
1696    keywords    = {concurrency, Cforall},
1697    contributer = {pabuhr@plg},
1698    author      = {Thierry Delisle and Peter A. Buhr},
1699    title       = {Concurrency in \textsf{C}$\mathbf{\forall}$},
1700    year        = 2018,
1701    journal     = spe,
1702    pages       = {1-32},
1703    note        = {submitted},
1704}
1705
1706@techreport{Buhr90,
1707    keywords    = {objects, concurrency},
1708    contributer = {gjditchfield@plg},
1709    author      = {P. A. Buhr and G. J. Ditchfield and B. M. Younger and C. R. Zarnke}, 
1710    title       = {Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
1711    institution = {Department of Computer Science, University of Waterloo},
1712    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1713    number      = {CS-90-18},
1714    month       = may,
1715    year        = 1990
1716}
1717
1718@book{Burns98,
1719    keywords    = {concurrency, Ada},
1720    author      = {Alan Burns and Andy Wellings},
1721    title       = {Concurrency in {Ada}},
1722    publisher   = {Cambridge University Press},
1723    year        = 1998,
1724    edition     = {2nd},
1725}
1726
1727@book{Bernstein93,
1728    keywords    = {concurrency},
1729    author      = {Arthur J. Bernstein and Philip M. Lewis},
1730    title       = {Concurrency in Programming and Database Systems},
1731    publisher   = {Jones and Bartlett},
1732    year        = 1993,
1733}
1734
1735@inproceedings{Pitman01,
1736    keywords    = {LISP, exception handling},
1737    contributer = {pabuhr@plg},
1738    author      = {Kent M. Pitman},
1739    title       = {Condition Handling in the Lisp Language Family},
1740    booktitle   = {Exception Handling},
1741    publisher   = {Springer},
1742    volume      = 2022,
1743    series      = {LNCS},
1744    year        = 2001,
1745    pages       = {39-59}
1746}
1747
1748@inbook{enhancement,
1749    keywords    = {bounded polymorphism, Comandos},
1750    contributer = {gjditchfield@plg},
1751    author      = {Chris Horn},
1752    title       = {Conformace, Genericity, Inheritance and Enhancement},
1753    pages       = {223-233},
1754    publisher   = {Springer},
1755    year        = 1987,
1756    volume      = 276,
1757    series      = "Lecture Notes in Computer Science",
1758    note        = "ECOOP '87 European Conference on Object-Oriented Programming",
1759    summary     = {
1760        Considers effect of conformance on Meyer's conclusions in
1761        \cite{polymorphism}.
1762
1763        Implementing a swap function as a member of a type {\cd Swappable}
1764        with {\cd in out Top} parameters doesn't work, because conformance
1765        requires arguments to be of type {\cd Top}.
1766
1767        An enhancive type has a type parameter, bounded by some type, and
1768        defines members.  Types conforming to the bound can be passed as
1769        arguments to create types with the extra members.  The signature of
1770        the enhanced type is based on the signature of the argument, not the
1771        bound, as if enhancive types were macros.  Hence enhanced types do not
1772        necessarily conform to each other.  Types conforming to the bound
1773        conform to enhanced types, which allows new functions to be applied
1774        to old types.
1775
1776        Enhancive types are not generic types.  If the argument is omitted,
1777        the bound is used as a default.  Assignment of enhanced types to
1778        default-enhanced types is allowed (enhanced types conform to the
1779        default-enhanced type).  This is (probably) statically type-safe,
1780        because arguments must conform to the bound, and the new members
1781        only use operations defined for the bound.
1782
1783        With facilities for member renaming and deletion, enhancive types
1784        provide the equivalent of constrained generic types.
1785    }
1786}
1787
1788@misc{Taylor10,
1789    keywords    = {const, poisoning},
1790    contributer = {pabuhr@plg},
1791    author      = {Ian Lance Taylor},
1792    title       = {const},
1793    month       = oct,
1794    year        = 2010,
1795    howpublished= {\href{https://www.airs.com/blog/archives/428}
1796                  {https://www.airs.com/\-blog/\-archives/\-428}},
1797}
1798
1799@phdthesis{Ditchfield92,
1800    keywords    = {C, parametric polymorphism, overloading},
1801    contributer = {pabuhr@plg},
1802    author      = {Glen Jeffrey Ditchfield},
1803    title       = {Contextual Polymorphism},
1804    school      = {Department of Computer Science, University of Waterloo},
1805    year        = 1992,
1806    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1807    note        = {\href{http://plg.uwaterloo.ca/theses/DitchfieldThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-DitchfieldThesis.pdf}}
1808}
1809
1810@inproceedings{frameworks:HHG90,
1811    keywords    = {formal},
1812    contributer = {pabuhr@plg},
1813    author      = {Richard Helm and Ian M. Holland and Dipayan Gangopadhyay},
1814    title       = {Contracts: Specifying Behavioural Compositions in Cbject-Oriented Systems},
1815    booktitle   = {Proceedings of ACM Symposium on Object-Oriented Programming: Systems, Languages and Applications},
1816    year        = 1990,
1817    pages       = {169-180},
1818}
1819
1820@article{Wand80,
1821    keywords    = {concurrency, continuation},
1822    contributer = {pabuhr@plg},
1823    author      = {Mitchell Wand},
1824    title       = {Continuation-Based Multiprocessing},
1825    publisher   = {The Lisp Conference},
1826    journal     = {Conference Record of the 1980 Lisp Conference},
1827    pages       = {19-28},
1828    year        = 1980,
1829}
1830
1831@article{Hieb90,
1832    keywords    = {continuations, concurrency},
1833    contributer = {pabuhr@plg},
1834    author      = {Robert Hieb and R. Kent Dybvig},
1835    title       = {Continuations and Concurrency},
1836    journal     = sigplan,
1837    volume      = 25,
1838    number      = 3,
1839    month       = mar,
1840    year        = 1990,
1841    pages       = {128-136},
1842    note        = {Proceedings of the Second ACM SIGPLAN Symposium on Principles \& Practise of Parallel Programming,
1843                   March. 14--16, 1990, Seattle, Washington, U.S.A},
1844}
1845
1846@inproceedings{Haynes84,
1847    keywords    = {continuations, coroutines, Scheme},
1848    contributer = {pabuhr@plg},
1849    author      = {Christopher T. Haynes and Daniel P. Friedman and Mitchell Wand},
1850    title       = {Continuations and Coroutines},
1851    booktitle   = {Conference Record of the 1984 {ACM} Symposium on Lisp and Functional Programming},
1852    organization= {Association for Computing Machinery},
1853    month       = aug,
1854    year        = 1984,
1855    pages       = {293-298},
1856    abstract    = {
1857        The power of first class continuations is demonstrated by implementing
1858        a variety of coroutine mechanisms using only continuations and
1859        functional abstraction. The importance of general abstraction
1860        mechanisms such as continuations is discussed.},
1861}
1862
1863@inproceedings{Zahn74,
1864    keywords    = {goto, structured programming},
1865    contributer = {pabuhr@plg},
1866    author      = {C. T. Zahn},
1867    title       = {Control Statement for Natural Top-down Structured Programming},
1868    booktitle   = {Symposium on Programming Languages},
1869    address     = {Paris, France},
1870    year        = 1974,
1871}
1872
1873@unpublished{Ditchfield:conversions,
1874    contributer = {a3moss@uwaterloo.ca},
1875    author      = {Glen Ditchfield},
1876    title       = {Conversions for \textsf{C}$\mathbf{\forall}$},
1877    note        = {\href{http://plg.uwaterloo.ca/~cforall/Conversions/index.html}{http://\-plg.uwaterloo.ca/\-$\sim$cforall/\-Conversions/\-index.html}},
1878    month       = {Nov},
1879    year        = {2002},
1880    urldate     = {28 July 2016},
1881}
1882
1883@techreport{Dijkstra65,
1884    keywords    = {concurrency, Dekker's algorithm, semaphores},
1885    contributer = {pabuhr@plg},
1886    author      = {Edsger W. Dijkstra},
1887    title       = {Cooperating Sequential Processes},
1888    institution = {Technological University},
1889    address     = {Eindhoven, Netherlands},
1890    year        = 1965,
1891    note        = {Reprinted in \cite{Genuys68} pp. 43--112.}
1892}
1893
1894@book{Marlin80,
1895    keywords    = {coroutines},
1896    contributer = {pabuhr@plg},
1897    author      = {Christopher D. Marlin},
1898    title       = {Coroutines: A Programming Methodology, a Language Design and an Implementation},
1899    publisher   = {Springer},
1900    address     = {New York},
1901    year        = 1980,
1902    volume      = 95,
1903    series      = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis}
1904}
1905 
1906@article{Wang71,
1907    keywords    = {coroutines},
1908    contributer = {pabuhr@plg},
1909    author      = {Arne Wang and Ole-Johan Dahl},
1910    title       = {Coroutine Sequencing in a Block Structured Environment},
1911    journal     = "BIT",
1912    volume      = 11,
1913    month       = nov,
1914    year        = 1971,
1915    pages       = {425-449},
1916}
1917 
1918@article{Castagna95,
1919    keywords    = {type-systems, covariance, contravariance},
1920    contributer = {pabuhr@plg},
1921    author      = {Giuseppe Castagna},
1922    title       = {Covariance and Contravariance : Conflict without a Cause},
1923    journal     = toplas,
1924    volume      = 17,
1925    number      = 3,
1926    month       = may,
1927    year        = 1995,
1928    pages       = {341-447},
1929}
1930
1931@book{Fischer88,
1932    keywords    = {compiler construction},
1933    author      = {Charles N. Fischer and Richard J. {LeBlanc, Jr.}},
1934    title       = {Crafting a Compiler},
1935    publisher   = {Benjamin Cummings},
1936    year        = 1991,
1937}
1938
1939@misc{CS343,
1940    keywords    = {uC++ teaching},
1941    contributer = {pabuhr@plg},
1942    key         = {Peter Buhr},
1943    title       = {CS343},
1944    year        = 2018,
1945    howpublished= {\href{https://www.student.cs.uwaterloo.ca/~cs343}{https://\-www.student.cs.uwaterloo.ca/\-$\sim$cs343}},
1946}
1947
1948@inproceedings{Jim02,
1949    keywords    = {C dialect, parametric polymorphic, safe memory allocation},
1950    contributer = {pabuhr@plg},
1951    author      = {Trevor Jim and Greg Morrisett and Dan Grossman and Michael Hicks and James Cheney and and Yanling Wang},
1952    title       = {{C}yclone: A Safe Dialect of {C}},
1953    booktitle   = {USENIX Annual Technical Conference},
1954    organization= {USENIX Association},
1955    address     = {Monterey, California, U.S.A.},
1956    month       = jun,
1957    year        = 2002,
1958    pages       = {275-288},
1959}
1960
1961% D
1962
1963@manual{D,
1964    keywords    = {D programming language},
1965    contributer = {pabuhr@plg},
1966    title       = {{D} Programming Language},
1967    author      = {Walter Bright and Andrei Alexandrescu},
1968    organization= {Digital Mars},
1969    year        = 2016,
1970    note        = {\href{http://dlang.org/spec/spec.html}{http://\-dlang.org/\-spec/\-spec.html}},
1971}
1972
1973@techreport{Cui90,
1974    keywords    = {exception handling},
1975    contributer = {pabuhr@plg},
1976    author      = {Qian Cui},
1977    title       = {Data-Oriented Exception Handling},
1978    institution = {Department of Computer Science, University of Maryland},
1979    address     = {College Park, Maryland, U.S.A., 20742},
1980    number      = {CS-TR-2384},
1981    month       = jan,
1982    year        = 1990,
1983}
1984
1985@article{Cui92,
1986    contributer = {rkrische@plg},
1987    author      = {Qian Cui and John Gannon},
1988    title       = {Data-oriented Exception Handling},
1989    journal     = {IEEE Transactions on Software Engineering},
1990    month       = may,
1991    year        = 1992,
1992    volume      = 18,
1993    number      = 5,
1994    pages       = {393-401},
1995}
1996
1997@manual{SIMULA87,
1998    keywords    = {Simula standard},
1999    contributer = {gjditchfield@plg},
2000    title       = {Databehandling -- Programspr{\aa}k -- {SIMULA}},
2001    organization= {Standardiseringskommissionen i Sverige},
2002    note        = {Svensk Standard SS 63 61 14},
2003    year        = 1987,
2004    abstract    = {Standard for the programming language SIMULA. Written in English.}
2005}
2006
2007@article{Galil91,
2008    keywords    = {union-find},
2009    contributer = {a3moss@uwaterloo.ca},
2010    title       = {Data structures and algorithms for disjoint set union problems},
2011    author      = {Galil, Zvi and Italiano, Giuseppe F},
2012    journal     = {ACM Computing Surveys (CSUR)},
2013    volume      = 23,
2014    number      = 3,
2015    pages       = {319--344},
2016    year        = 1991,
2017    publisher   = {ACM},
2018}
2019
2020@article{Liskov75,
2021    keywords    = {abstract data types, encapsulation, verification},
2022    contributer = {gjditchfield@plg},
2023    author      = {Barbara H. Liskov},
2024    title       = {Data Types and Program Correctness},
2025    journal     = sigplan,
2026    year        = 1975,
2027    month       = jul,
2028    volume      = 10,
2029    number      = 7,
2030    pages       = {16-17},
2031    summary     = {
2032        Type definitions should contain the implementation of the type and
2033        its operations.  The grouping makes programs simpler and more
2034        understandable.  Encapsulating the definition aids verification and
2035        forces a precise specification of the interface.
2036    }
2037}
2038
2039@article{dtav,
2040    keywords    = {Russell, types},
2041    contributer = {gjditchfield@plg},
2042    author      = {James Donahue and Alan Demers},
2043    title       = {Data Types are Values},
2044    journal     = toplas,
2045    month       = jul,
2046    year        = 1985,
2047    volume      = 7,
2048    number      = 3,
2049    pages       = {426-445},
2050    comment     = {
2051        Data types are sets of operations providing interpretations of
2052        values from a meaningless, typeless universal value space.  Types
2053        and operations are also contained in this value space.
2054
2055        Functions returning types replace generic types.
2056
2057        Polymorphic functions have type parameters.  Evaluation is not
2058        macro expansion:
2059        \begin{verbatim}
2060            R == func [n:val integer; T:type[]] val integer
2061                {if n > 0 => r[n-1, Array[1,10,T]] # n <= 0 => 17 fi}
2062        \end{verbatim}
2063    }
2064}
2065
2066@article{Holt72,
2067    keywords    = {concurrency, deadlock},
2068    contributer = {pabuhr@plg},
2069    author      = {Richard C. Holt},
2070    title       = {Some Deadlock Properties of Computer Systems},
2071    journal     = acmcs,
2072    volume      = 4,
2073    number      = 3,
2074    month       = sep,
2075    year        = 1972,
2076    pages       = {179-196},
2077}
2078
2079@misc{debug-malloc,
2080    keywords    = {memory allocation debugger},
2081    contributer = {gjditchfield@plg},
2082    author      = {Conor P. Cahill},
2083    title       = {debug\_malloc},
2084    howpublished= {comp.sources.unix, volume 22, issue 112},
2085    abstract    = {
2086        This package is a collection of routines which are a drop-in
2087        replacement for the malloc(3), memory(3), string(3), and bstring(3)
2088        library functions.
2089    }
2090}
2091
2092@book{sml,
2093    keywords    = {},
2094    contributer = {pabuhr@plg},
2095    author      = {Robin Milner and Mads Tofte and Robert Harper},
2096    title       = {The Definition of Standard {ML}},
2097    publisher   = {MIT Press},
2098    address     = {Cambridge},
2099    year        = 1990
2100}
2101
2102@techreport{sml:old,
2103    keywords    = {},
2104    contributer = {gjditchfield@plg},
2105    author      = {Robert Harper and Robin Milner and Mads Tofte},
2106    title       = {The Definition of Standard {ML}, Version 2},
2107    institution = {Department of Computer Science, University of Edinburgh},
2108    year        = 1988,
2109    address     = {The King's Buildings, Edinburgh EH9 3JZ},
2110    type        = {LFCS Report Series}, month = aug, number = {ECS-LFCS-88-62}
2111}
2112
2113@inproceedings{Reynolds72,
2114    keywords    = {continuation},
2115    contributer = {pabuhr@plg},
2116    author      = {John Reynolds},
2117    title       = {Definitional Interpreters for Higher Order Programming Languages},
2118    booktitle   = {ACM Conference Proceedings},
2119    organization= {ACM},
2120    year        = 1972,
2121    pages       = {717-740}
2122}
2123
2124@article{Buhr16,
2125    keywords    = {Dekker's algorithm, software solution, mutual exclusion, performance experiment},
2126    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
2127    title       = {Dekker's Mutual Exclusion Algorithm Made RW-Safe},
2128    journal     = ccpe,
2129    volume      = 28,
2130    number      = 1,
2131    pages       = {144-165},
2132    month       = jan,
2133    year        = 2016,
2134}
2135
2136@misc{steelman,
2137    keywords    = {Ada},
2138    contributer = {gjditchfied@plg},
2139    author      = {High Order Language Working Group},
2140    title       = {Department of Defense Requirements for High Order Computer Programming Languages},
2141    month       = jun, year = 1978,
2142    note        = {Reprinted in \cite{pldesign}.}
2143}
2144
2145@incollection{Tsay98,
2146    keywords    = {local spins, mutual exclusion, read/write atomicity, refinement, scalability},
2147    author      = {Yih-Kuen Tsay},
2148    title       = {Deriving a scalable algorithm for mutual exclusion},
2149    booktitle   = {Distributed Computing},
2150    editor      = {Shay Kutten},
2151    volume      = {1499},
2152    series      = {LNCS},
2153    publisher   = {Springer},
2154    address     = {Berlin Heidelberg},
2155    year        = {1998},
2156    pages       = {393-407},
2157}
2158
2159@book{Aho74,
2160    keywords    = {algorithms, textbook, union-find},
2161    contributer = {a3moss@uwaterloo.ca},
2162    title       = {The Design and Analysis of Computer Algorithms},
2163    author      = {Aho, Alfred V and Hopcroft, John E and Ullman, Jeffrey D},
2164    year        = {1974},
2165    publisher   = {Addison-Wesley},
2166    address     = {Reading, MA, USA}
2167}
2168
2169@article{Conway63,
2170    keywords    = {coroutine, original},
2171    contributer = {pabuhr@plg},
2172    author      = {Melvin E. Conway},
2173    title       = {Design of a Separable Transition-Diagram Compiler},
2174    journal     = cacm,
2175    month       = jul,
2176    year        = 1963,
2177    volume      = 6,
2178    number      = 7,
2179    pages       = {396-408},
2180}
2181
2182@book{Stroustrup94,
2183    keywords    = {C++},
2184    contributor = {wyrmok@plg},
2185    author      = {Bjarne Stroustrup},
2186    title       = {The Design and Evolution of {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2187    publisher   = {Addison-Wesley},
2188    address     = {Boston},
2189    year        = 1994
2190}
2191
2192@inproceedings{st:concurrent,
2193    keywords    = {concurrency, Smalltalk, futures},
2194    contributer = {gjditchfield@plg},
2195    author      = {Yasuhiko Yokote and Mario Tokoro},
2196    title       = {The Design and Implementation of {ConcurrentSmalltalk}},
2197    crossref    = "OOPSLA86",
2198    pages       = {331-340},
2199    comment     = {
2200        Objects are ordinary Smalltalk objects or ``atomic'' objects, which
2201        process messages one at a time in FIFO order.  Asynchronous method
2202        calls are made by appending ``\&'' at the call site.  The sender does
2203        not wait for a reply.  If the method returns a value, it
2204        (immediately?) returns a CBox object, which is like a future.  The
2205        sender can send the ``receive'' message to the CBox, which blocks
2206        until the CBox contains a value.
2207
2208        A method can execute the ``\verb|^|'' statement to return an object
2209        and terminate, or it can execute ``\verb|^^|'' to return an object
2210        and continue execution.  If ``\verb|^^foo|'' is executed after
2211        ``\verb|^^bar|'', foo is discarded, since bar has already been
2212        returned.
2213
2214        The article does not say whether asynchronous messages can be sent
2215        to ordinary objects, or whether ordinary messages can be sent to
2216        atomic objects.
2217    }
2218}
2219
2220@inproceedings{Ichbiah83,
2221    keywords    = {Ada, packages, generics},
2222    contributer = {gjditchfield@plg},
2223    author      = {Jean D. Ichbiah},
2224    title       = {On the Design of {Ada}},
2225    booktitle   = {Information Processing 83},
2226    year        = 1983,
2227    month       = sep, pages = {1-10},
2228    editor      = {R. E. A. Mason},
2229    organization= {IFIP},
2230    publisher = {North-Holland},
2231    summary = {
2232        Packages group related declarations or subprograms, and encapsulate
2233        data types.  Separate interfaces and bodies promotes information
2234        hiding by removing the need to scan the body, allows the body to be
2235        confidential, and provides a better specification of the contract
2236        between client and implementor.  Generics are an efficient way to
2237        factor out parts of similar definitions.
2238    }
2239}
2240
2241@book{Motet96,
2242    keywords    = {Ada, exception handling},
2243    contributer = {wyrmok@plg},
2244    author      = {G. Motet and A. Mapinard and J. C. Geoffroy},
2245    title       = {Design of Dependable {A}da Software},
2246    publisher   = {Prentice-Hall},
2247    address     = {Englewood Cliffs},
2248    year        = 1996,
2249}
2250 
2251@article{Richardson93,
2252    keywords    = {C++, persistence, database},
2253    contributer = {pabuhr@plg},
2254    author      = {Joel E. Richardson and Michael J. Carey and Daniel T. Schuh},
2255    title       = {The Design of the {E} Programming Language},
2256    journal     = toplas,
2257    month       = jul,
2258    year        = 1993,
2259    volume      = 15,
2260    number      = 3,
2261    pages       = {494-534},
2262}
2263
2264@article{Hansen81b,
2265    keywords    = {concurrency, monitor, critical region},
2266    contributer = {pabuhr@plg},
2267    author      = {Per {Brinch Hansen}},
2268    title       = {The Design of {E}dison},
2269    journal     = spe,
2270    volume      = 11,
2271    number      = 4,
2272    month       = apr,
2273    year        = 1981,
2274    pages       = {363-396},
2275}
2276
2277@book{Gamma95,
2278    keywords    = {design patterns},
2279    author      = {Erich Gamma and Richard Helm and Ralph Johnson and John Vlissides},
2280    title       = {Design Patterns: Elements of Reusable Object-Oriented Software},
2281    publisher   = {Addison-Wesley},
2282    address     = {Boston},
2283    year        = 1995,
2284    series      = {Professional Computing Series},
2285}
2286
2287@inproceedings{Wirth74,
2288    keywords    = {},
2289    contributer = {gjditchfield@plg},
2290    author      = {Niklaus Wirth},
2291    title       = {On the Design of Programming Languages},
2292    booktitle   = {Information Processing 74},
2293    year        = 1974,
2294    pages       = {386-393},
2295    publisher   = {North Holland Publishing Company},
2296    note        = {Reprinted in \cite{pldesign}.}
2297}
2298
2299@techreport{forceone,
2300    keywords    = {Parametric polymorphism, ForceOne},
2301    contributer = {gjditchfield@plg},
2302    author      = {Andrew K. Wright},
2303    title       = {Design of the Programming Language {ForceOne}},
2304    institution = {University of Waterloo},
2305    month       = feb, year = 1987,
2306    number      = {CS-87-10}
2307}
2308
2309@techreport{x-2,
2310    keywords    = {object based},
2311    contributer = {gjditchfield@plg},
2312    author      = {David W. Sandberg},
2313    title       = {The Design of the Programming Language {X-2}},
2314    institution = {Oregon State University},
2315    year        = 1985,
2316    address     = {Department of Computer Science, Corvallis, Oregon, 97331},
2317    number      = {85-60-1}
2318}
2319
2320@article{design,
2321    keywords    = {Smalltalk, designing classes},
2322    contributer = {gjditchfield@plg},
2323    author      = {Ralph E. Johnson and Brian Foote},
2324    title       = {Designing Reusable Classes},
2325    journal     = joop,
2326    year        = 1988,
2327    volume      = 1, number = 2, pages = {22-35},
2328    comment     = {
2329        Abstract classes represent standard protocols.  ``It is better to
2330        inherit from an abstract class than from a concrete class''.
2331        Frameworks are collections of related abstract classes.  Successful
2332        abstractions are discovered, not designed.
2333
2334        Protocols: ``If an operation X is implemented by performing a
2335        similar operation on the components of the receiver, then that
2336        operation should also be named X''.  Eliminate case analysis by
2337        creating classes with the same operations.  Create classes to
2338        represent bundles of parameters.  Shrink methods larger than 30
2339        lines.
2340
2341        Hierarchies should be deep and narrow.  Subclasses should be
2342        specializations.
2343
2344        Frameworks: split large classes.  Factor implementation differences
2345        into subcomponents.  Separate methods that do not share instance
2346        variables into components that reflect the different views of the
2347        object.  Send messages to components, not self.  Reduce implicit
2348        parameter passing through instance variables.
2349    }
2350}
2351
2352@article{dim:c++,
2353    keywords    = {Dimensional Analysis, C++},
2354    contributer = {gjditchfield@plg},
2355    author      = {Robert F. Cmelic and Narain Gehani},
2356    title       = {Dimensional Analysis with {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2357    journal     = {IEEE Software},
2358    month       = may, year = 1988,
2359    volume      = 5, number = 3, pages = {21-29}
2360}
2361
2362@article{Wegner87,
2363    contributer = {pabuhr@plg},
2364    author      = {Peter Wegner},
2365    title       = {Dimensions of Object--Based Language Design},
2366    journal     = sigplan,
2367    volume      = 22,
2368    number      = 12,
2369    month       = dec,
2370    year        = 1987,
2371    pages       = {168-182},
2372    note        = {Proceedings of the OOPSLA'87 Conference, Oct. 4--8, 1987, Orlando, Florida},
2373}
2374
2375@book{Dijkstra76,
2376    keywords    = {concurrent assignment},
2377    author      = {E. W. Dijkstra},
2378    title       = {A Discipline of Programming},
2379    publisher   = {Prentice-Hall},
2380    address     = {Englewood Cliffs},
2381    year        = 1976,
2382}
2383
2384@book{Lynch96,
2385    keywords    = {distributed algorithms},
2386    author      = {Nancy A. Lynch},
2387    title       = {Distributed Algorithms},
2388    publisher   = {Morgan Kaufmann},
2389    year        = 1996,
2390}
2391
2392@book{Tanenbaum02,
2393    keywords    = {distributed programming},
2394    author      = {Andrew S. Tanenbaum and Maarten van Steen},
2395    title       = {Distributed Systems: Principles and Paradigms},
2396    publisher   = {Prentice-Hall},
2397    address     = {Englewood Cliffs},
2398    year        = 2002,
2399}
2400
2401@inproceedings{Cargill90,
2402    keywords    = {concurrency},
2403    contributer = {pabuhr@plg},
2404    author      = {Tom A. Cargill},
2405    title       = {Does {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Really Need Multiple Inheritance?},
2406    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference Proceedings},
2407    organization= {USENIX Association},
2408    address     = {San Francisco, California, U.S.A.},
2409    month       = apr,
2410    year        = 1990,
2411    pages       = {315-323}
2412}
2413
2414@misc{Dotty-github,
2415    keywords = {dotty,scala},
2416    contributer = {a3moss@uwaterloo.ca},
2417    author = {Martin Odersky},
2418    title = {Dotty},
2419    howpublished = {\href{https://github.com/lampepfl/dotty}{https://\-github.com/\-lampepfl/\-dotty}},
2420    note = {Acessed: 2019-02-22}
2421}
2422
2423@unpublished{Duff83,
2424    keywords    = {C, switch statement, control flow},
2425    contributer = {pabuhr@plg},
2426    author      = {Tom Duff},
2427    title       = {Duff's Device},
2428    month       = nov,
2429    year        = 1983,
2430    note        = {\href{http://www.lysator.liu.se/c/duffs-device.html}{http://\-www.lysator.liu.se/\-c/\-duffs-device.html}}
2431}
2432
2433@manual{dwarf2,
2434    keywords    = {Debugging DWARF2 specification},
2435    contributer = {rkrische@plg},
2436    title       = {DWARF Debugging Information Format},
2437    organization= {Unix International Programming Languages SIG},
2438    publisher   = {Unix International},
2439    address     = {Waterview Corporate Center, 20 Waterview Boulevard, Parsippany, NJ 07054},
2440    year        = {1993}
2441}
2442
2443@article{classicada,
2444    keywords    = {Classic Ada},
2445    contributer = {gjditchfield@plg},
2446    author      = {Cameron M. Donaldson},
2447    title       = {Dynamic Binding and Inheritance in an Object-Oriented {Ada} Design},
2448    journal     = {Journal of Pascal, {Ada} \& Modula-2},
2449    year        = 1990,
2450    month       = {jul/aug}, volume = 9, number = 4, pages = {12-19},
2451    comment     = {
2452        Classes are like packages: they can contain subprograms, types,
2453        variables, generic instantiations, and exceptions.  They can also
2454        contain class methods, instance methods, and instance variables,
2455        and define creation and initialization subprograms or methods for
2456        instances.  Single inheritance provides inheritance of
2457        implementations. Dynamic binding is done with a {\em send}
2458        statement that invokes a class or instance method.  A preprocessor
2459        converts Classic Ada to normal Ada.
2460    }
2461}
2462
2463@article{Costanza03,
2464    keywords    = {dynamic call},
2465    contributer = {pabuhr@plg},
2466    author      = {Pascal Costanza},
2467    title       = {Dynamic Scoped Functions as the Essence of {AOP}},
2468    journal     = sigplan,
2469    volume      = 38,
2470    number      = 8,
2471    month       = aug,
2472    year        = 2003,
2473    pages       = {29-35},
2474}
2475
2476% E
2477
2478@inproceedings{Wegbreit71,
2479    keywords    = {polymorphism},
2480    contributer = {pabuhr@plg},
2481    author      = {B. Wegbreit},
2482    title       = {The ECL Programming System},
2483    booktitle   = {Proceedings of AFIPS 1971 FJCC},
2484    publisher   = {AFIPS Press, vol. 39},
2485    address     = {Montvale, New Jersey, U.S.A},
2486    year        = 1971,
2487    pages       = {253-262},
2488}
2489
2490@manual{JavaScript,
2491    keywords    = {JavaScript},
2492    contributer = {pabuhr@plg},
2493    title       = {ECMAScript 2015 Language Specification {JavaScript}},
2494    organization= {ECAM International},
2495    address     = {Rue du Rhone 114, CH-1204 Geneva, Switzerland},
2496    month       = jun,
2497    year        = 2015,
2498    note        = {6th Edition}
2499}
2500
2501@inproceedings{Peterson77,
2502    keywords    = {N-thread software-solution mutual exclusion},
2503    contributer = {pabuhr@plg},
2504    author      = {Gary L. Peterson and Michael J. Fischer},
2505    title       = {Economical Solutions for the Critical Section Problem in a Distributed System (Extended Abstract)},
2506    booktitle   = {Proceedings of the Ninth Annual ACM Symposium on Theory of Computing},
2507    series      = {STOC '77},
2508    year        = 1977,
2509    location    = {Boulder, Colorado, USA},
2510    pages       = {91--97},
2511    numpages    = {7},
2512    publisher   = {ACM},
2513    address     = {New York, NY, USA},
2514}
2515
2516@article{Hansen81a,
2517    keywords    = {concurrency, monitor, critical region},
2518    contributer = {pabuhr@plg},
2519    author      = {Per {Brinch Hansen}},
2520    title       = {{E}dison---a Multiprocessor Language},
2521    journal     = spe,
2522    volume      = 11,
2523    number      = 4,
2524    month       = apr,
2525    year        = {1981},
2526    pages       = {325-361},
2527}
2528
2529@article{Tarjan75,
2530 keywords = {union-find},
2531 contributer = {a3moss@uwaterloo.ca},
2532 author = {Tarjan, Robert Endre},
2533 title = {Efficiency of a Good But Not Linear Set Union Algorithm},
2534 journal = {J. ACM},
2535 issue_date = {April 1975},
2536 volume = {22},
2537 number = {2},
2538 month = apr,
2539 year = {1975},
2540 issn = {0004-5411},
2541 pages = {215--225},
2542 numpages = {11},
2543 url = {http://doi.acm.org/10.1145/321879.321884},
2544 doi = {10.1145/321879.321884},
2545 acmid = {321884},
2546 publisher = {ACM},
2547 address = {New York, NY, USA},
2548} 
2549
2550@book{Eiffel,
2551    keywords    = {Eiffel},
2552    contributer = {pabuhr@plg},
2553    author      = {Bertrand Meyer},
2554    title       = {Eiffel: The Language},
2555    publisher   = {Prentice-Hall},
2556    address     = {Englewood Cliffs},
2557    year        = 1992,
2558    series      = {Prentice-Hall Object-Oriented Series},
2559}
2560
2561@article{WS:overload,
2562    keywords    = {compilation},
2563    contributer = {gjditchfield@plg},
2564    author      = {Peter J. L. Wallis and Bernhard W. Silverman},
2565    title       = {Efficient Implementation of the {Ada} Overloading Rules},
2566    journal     = ipl,
2567    year        = 1980,
2568    month       = apr, volume = 10, number = 3, pages = {120-123},
2569    comment     = {
2570        The ``two-pass'' algorithm.  An upward pass over a parse tree
2571        calculates the set of possible result types of operators.  The
2572        root must have exactly one type, produced in one way.  A
2573        downward pass selects the version of the operator that produces the
2574        desired result type, thus setting the result types of subtrees.
2575        See \cite{D:overload}.
2576    }
2577}
2578
2579@techreport{Habermann80,
2580    keywords    = {Ada, threads},
2581    contributer = {pabuhr@plg},
2582    author      = {A. N. Habermann and I. R. Nassi},
2583    title       = {Efficient Implementation of {Ada} Tasks},
2584    institution = {Carnegie-Mellon University},
2585    number      = {CMU-CS-80-103},
2586    year        = 1980
2587}
2588
2589@article{Emerald,
2590    keywords    = {concurrency, polymorphism},
2591    contributer = {pabuhr@plg},
2592    author      = {Rajendra K. Raj and Ewan Tempero and Henry M. Levy and Andrew P. Black and Norman C. Hutchinson and Eric Jul},
2593    title       = {Emerald: A General-Purpose Programming Language},
2594    journal     = spe,
2595    month       = jan,
2596    year        = 1991,
2597    volume      = 21,
2598    number      = 1,
2599    pages       = {91-118}
2600}
2601
2602@InProceedings{chambers89a,
2603    keywords    = {maps, delegation},
2604    author      = "Craig Chambers and David Ungar and Elgin Lee",
2605    title       = "An Efficient Implementation of {SELF}, a Dynamically-Typed
2606                 Object-Oriented Language Based on Prototypes",
2607    crossref    = "OOPSLA89",
2608    pages       = {49-70}
2609}
2610
2611@article{oop:encapsulation,
2612    keywords    = {Encapsulation, Inheritance, Subclasses, Multiple Inheritance},
2613    contributer = {gjditchfield@plg},
2614    author      = {Alan Snyder},
2615    title       = {Encapsulation and Inheritance in Object-Oriented Programming
2616        Languages},
2617    journal     = sigplan,
2618    volume      = {21},    number = {11},
2619    pages       = {38-45},
2620    month       = nov, year = 1986,
2621    comment     = {
2622        Client, child interfaces should be distinct.  Child interface
2623        shouldn't grant total access to parent.
2624
2625        Rules for redefining parent variable name in a child affect
2626        re-implementation of the parent.
2627
2628        Inheritance can be a promise to obey the semantics of the parent,
2629        or code reuse; the two may be contradictory.  Unification
2630        exposes use of inheritance: a child can not be re-implemented
2631        without breaking code that assumes that it is a subclass of the
2632        original parent.  If a class uses the names of its parents'
2633        ancestors, then inheritance is part of the parent's child
2634        interface.
2635
2636        Linearizing a multiple inheritance tree means that a class's use of
2637        calls on super need to be understood before it is used as a parent.
2638        Merging repeated ancestors exposes inheritance if an ancestor is
2639        re-implemented.  Forbidding inheritance of distinct methods with
2640        the same name exposes implementation of ancestors.  Proposed
2641        solution treats the set of ancestors as a tree.
2642    }
2643}
2644
2645@article{st:encapsulator,
2646    keywords    = {encapsulator, Smalltalk, monitor},
2647    contributer = {gjditchfield@plg},
2648    author      = {Geoffrey A. Pascoe},
2649    title       = {Encapsulators: A New Software Paradigm in Smalltalk-80},
2650    journal     = sigplan,
2651    volume      = {21},    number       = {11},
2652    pages       = {341-346},
2653    month       = nov, year = 1986,
2654    comment     = {
2655        Encapsulators are objects that surround other objects.
2656        Pre- and post-actions are performed when messages are sent to the
2657        encapsulated object.  They are created here by sending the message
2658        object: to an encapsulator class.  Examples given are monitors,
2659        atomic objects, and Model (for model-view-controller interfaces).
2660
2661        Encapsulator classes use a family of selectors that the
2662        encapsulated object will not respond to.  Messages for the
2663        encapsulated object are passed on by trapping them with the
2664        doesNotUnderstand method.  Various fiddles were needed when setting
2665        up the class and metaclass hierarchies.  A few selectors (==,
2666        class) always directly invoke primitive methods; they can't be
2667        used.
2668
2669        Can an encapsulated object be an encapsulator?  Probably, but the
2670        middle object's selectors are inaccessible.
2671    }
2672}
2673
2674@manual{EPT,
2675    keywords    = {concurrency, light-weight threads},
2676    contributer = {pabuhr@plg},
2677    key         = {Encore},
2678    title       = {Encore Parallel Thread Manual, 724-06210},
2679    organization= {Encore Computer Corporation},
2680    month       = may,
2681    year        = 1988,
2682}
2683
2684@manual{Erlang,
2685    keywords    = {Erlang},
2686    contributer = {pabuhr@plg},
2687    key         = {Erlang},
2688    title       = {Erlang/OTP System Documentation 8.1},
2689    organization= {Erlang AB},
2690    month       = sep,
2691    year        = 2016,
2692    note        = {\href{http://erlang.org/doc/pdf/otp-system-documentation.pdf}{http://\-erlang.org/\-doc/\-pdf/\-otp-system-documentation.pdf}},
2693}
2694
2695@inproceedings{MH88,
2696    keywords    = {modules, general sums, general products},
2697    contributer = {gjditchfield@plg},
2698    author      = {John C. Mitchell and Robert Harper},
2699    title       = {The Essence of {ML}},
2700    booktitle   = popl,
2701    year        = 1988,
2702    pages       = {28-46}
2703}
2704
2705@book{LeVerrand,
2706    keywords    = {},
2707    author      = {D. Le Verrand},
2708    title       = {Evaluating {Ada}},
2709    publisher   = {North Oxford Academic},
2710    year        = 1985
2711}
2712
2713@inproceedings{Bloom79,
2714    keywords    = {concurrency},
2715    contributer = {pabuhr@plg},
2716    author      = {Toby Bloom},
2717    title       = {Evaluating Synchronization Mechanisms},
2718    booktitle   = {Proceedings of the Seventh Symposium on Operating Systems Principles},
2719    organization= {ACM SIGOPS},
2720    address     = {Pacific Grove, California, U.S.A},
2721    month       = dec,
2722    year        = 1979,
2723    pages       = {24-32}
2724}
2725
2726@inproceedings{XaaS,
2727    keywords    = {Everything as a Service, Anything as a Service, Cloud computing, SOA},
2728    contributer = {pabuhr@plg},
2729    author      = {Duan, Yucong and Fu, Guohua and Zhou, Nianjun and Sun, Xiaobing and Narendra, Nanjangud C. and Hu, Bo},
2730    title       = {Everything As a Service (XaaS) on the Cloud: Origins, Current and Future Trends},
2731    booktitle   = {Proceedings of the 2015 IEEE 8th International Conference on Cloud Computing},
2732    series      = {CLOUD'15},
2733    year        = {2015},
2734    pages       = {621--628},
2735    publisher   = {IEEE Computer Society},
2736    address     = {Washington, DC, USA},
2737}
2738
2739@article{Buhr06a,
2740    keywords    = {concurrency, C++, uC++},
2741    contributer = {pabuhr@plg},
2742    author      = {Peter A. Buhr and Richard C. Bilson},
2743    title       = {Examining $\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} :
2744                   High-level Object-Oriented Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2745    journal     = {Dr. Dobb's Journal : Software Tools for the Professional Programmer},
2746    month       = feb,
2747    year        = 2006,
2748    volume      = 31,
2749    number      = 2,
2750    pages       = {36-40},
2751}
2752
2753@article{ExceptionalC,
2754    keywords    = {exception handling, asynchronous events},
2755    contributer = {wyrmok@plg},
2756    author      = {N. H. Gehani},
2757    title       = {Exceptional {C} or {C} with Exceptions},
2758    journal     = spe,
2759    year        = 1992,
2760    month       = oct,
2761    volume      = 22,
2762    number      = 10,
2763    pages       = {827-848},
2764    comment     = {
2765        It is the most extensive exceptional handling mechanism thus
2766        far. Though it doesn't have Mesa resumption, it has
2767        asynchronous signal which is more general and abstract than
2768        the unix signal mechanism.  It has an Eiffel like retry
2769        mechanism. Consequently, the scope of guarded region is not
2770        immediately terminated when an exception is raised. In fact,
2771        an exception handler creates a scope under its guarded
2772        region.
2773        }
2774}
2775
2776@incollection{Buhr02,
2777    keywords    = {exception handling},
2778    contributer = {pabuhr@plg},
2779    author      = {Peter A. Buhr and Ashif Harji and W. Y. Russell Mok},
2780    title       = {Exception Handling},
2781    editor      = {Marvin V. Zelkowitz},
2782    booktitle   = {Advances in COMPUTERS},
2783    publisher   = {Academic Press},
2784    address     = {London},
2785    volume      = 56,
2786    year        = 2002,
2787    pages       = {245-303},
2788}
2789
2790@article{Cargill94,
2791    keywords    = {exception handling},
2792    contributer = {pabuhr@plg},
2793    author      = {Tom Cargill},
2794    title       = {Exception Handling: a False Sense of Security},
2795    journal     = {{C}{\kern-.2em\hbox{\large\texttt{+\kern-.2em+}}} Report},
2796    year        = 1994,
2797    month       = nov,
2798    volume      = 6,
2799    number      = 9,
2800    note        = {http://www.informit.com/\-content/\-images/\-020163371x/\-supplements/\-Exception\_\-Handling\_\-Article.\-html}
2801}
2802
2803@article{Knudsen84,
2804    keywords    = {static exception handling, BETA, sequel},
2805    contributer = {wyrmok@plg},
2806    author      = {J{\o}rgen Lindskov Knudsen},
2807    title       = {Exception Handling --- A Static Approach},
2808    journal     = spe,
2809    year        = 1984,
2810    month       = may,
2811    volume      = 14,
2812    number      = 5,
2813    pages       = {429-449},
2814}
2815
2816@article{Drew94,
2817    keywords    = {exceptions, exception handling},
2818    contributer = {wyrmok@plg},
2819    author      = {Steven J. Drew and K. John Gough},
2820    title       = {Exception Handling: Expecting the Unexpected},
2821    journal     = {Computer Languages},
2822    year        = 1994,
2823    month       = may,
2824    volume      = 20,
2825    number      = 2,
2826    comment     = {
2827        A recent and good survey on various exception handling mechanisms found
2828        in imperative programming languages. It classifies various mechanism in
2829        terms of flow control and scopes. Asynchronous exceptions and signals
2830        are also covered as Exceptional C is in the survey.
2831        }
2832}
2833
2834@article{Koenig90,
2835    keywords    = {exception handling},
2836    contributer = {pabuhr@plg},
2837    author      = {Andrew Koenig and Bjarne Stroustrup},
2838    title       = {Exception Handling for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2839    journal     = joop,
2840    month       = {July/August},
2841    year        = 1990,
2842    volume      = 3,
2843    number      = 2,
2844    pages       = {16-33},
2845}
2846
2847@article{Lee83,
2848    keywords    = {exception handling, C},
2849    contributer = {pabuhr@plg},
2850    author      = {P. A. Lee},
2851    title       = {Exception Handling in {C} Programs},
2852    journal     = spe,
2853    volume      = 13,
2854    number      = 5,
2855    month       = may,
2856    year        = 1983,
2857    pages       = {389-405},
2858}
2859
2860@article{Liskov79,
2861    keywords    = {exception handling},
2862    contributer = {pabuhr@plg},
2863    author      = {Barbara H. Liskov and Alan Snyder},
2864    title       = {Exception Handling in {CLU}},
2865    journal     = ieeese,
2866    month       = nov,
2867    year        = 1979,
2868    volume      = {SE-5},
2869    number      = 6,
2870    pages       = {546-558},
2871}
2872
2873@article{Szalas85,
2874    keywords    = {concurrency, C++},
2875    contributer = {pabuhr@plg},
2876    author      = {Andrzej Szalas and Danuta Szczepanska},
2877    title       = {Exception Handling in Parallel Computations},
2878    journal     = sigplan,
2879    publisher   = {ACM},
2880    address     = {New York, NY, USA},
2881    volume      = 20,
2882    number      = 10,
2883    month       = oct,
2884    year        = 1985,
2885    pages       = {95-104},
2886}
2887
2888@article{MacLaren77,
2889    keywords    = {exception handling, PL/I},
2890    contributer = {pabuhr@plg},
2891    author      = {M. Donald MacLaren},
2892    title       = {Exception Handling in {PL/I}},
2893    journal     = sigplan,
2894    volume      = 12,
2895    number      = 3,
2896    month       = mar,
2897    year        = 1977,
2898    pages       = {101-104},
2899    note        = {Proceedings of an ACM Conference on Language Design for Reliable Software,
2900                   March 28--30, 1977, Raleigh, North Carolina, U.S.A.},
2901}
2902
2903@article{Goodenough75,
2904    keywords    = {exception handling},
2905    contributer = {pabuhr@plg},
2906    author      = {J. B. Goodenough},
2907    title       = {Exception Handling: Issues and a Proposed Notation},
2908    journal     = cacm,
2909    month       = dec,
2910    year        = 1975,
2911    volume      = 18,
2912    number      = 12,
2913    pages       = {683-696},
2914}
2915
2916@article{Lampson80,
2917    keywords    = {monitors},
2918    contributer = {pabuhr@plg},
2919    author      = {B. W. Lampson and D. D. Redell},
2920    title       = {Experience with Processes and Monitors in Mesa},
2921    journal     = cacm,
2922    volume      = 23,
2923    number      = 2,
2924    month       = feb,
2925    year        = 1980,
2926    pages       = {105-117},
2927}
2928
2929@inproceedings{Shopiro87,
2930    keywords    = {concurrency},
2931    contributer = {pabuhr@plg},
2932    author      = {Jonathan E. Shopiro},
2933    title       = {Extending the {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Task System for Real-Time Control},
2934    booktitle   = {Proceedings and Additional Papers {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Workshop},
2935    organization= {USENIX Association},
2936    address     = {Santa Fe, New Mexico, U.S.A},
2937    month       = nov,
2938    year        = 1987,
2939    pages       = {77-94}
2940}
2941
2942@article{Modula-2+,
2943    keywords    = {Modula-2, exceptions, garbage collection, concurrency},
2944    contributer = {gjditchfield@plg},
2945    author      = {Paul Rovner},
2946    title       = {Extending Modula-2 to Build Large, Integrated Systems},
2947    journal     = {IEEE Software},
2948    month       = nov,
2949    year        = 1986,
2950    volume      = 3,
2951    number      = 6,
2952    pages       = {46-57},
2953    comment     = {
2954        Exceptions can have a parameter.  Procedures can declare the
2955        exceptions they can propagate; others are converted to {\tt
2956        SYSTEM.Fail}.  If they don't, all exceptions propagate.
2957        Block cleanup statements execute no matter how control leaves the
2958        block.
2959
2960        {\tt REF t} is a garbage-collected pointer.  A {\tt REFANY} can be
2961        assigned any {\tt REF t}.  Open array types can be used in
2962        parameter and {\tt REF} types.  {\tt NEW} creates arrays of fixed,
2963        dynamically determined size.
2964
2965        The {\tt THREAD} module provides lightweight processes, semaphores,
2966        and conditions.  A statement {\tt LOCK {\em semaphore} DO
2967        {\em statements} END} is built in.
2968
2969        {\tt SAFE} modules do run-time checks, and only import {\tt
2970        SAFE} modules.  One implementation module can implement several
2971        definition modules.  Opaque type implementations can be
2972        repeated in modules that import its definition, so implementation
2973        modules can collaborate.  The linker checks that all
2974        implementations are the same.
2975    }
2976}
2977
2978@misc{GCCExtensions,
2979    contributer = {a3moss@uwaterloo.ca},
2980    key         = {C Extensions},
2981    author      = {{C Extensions}},
2982    title       = {Extensions to the {C} Language Family},
2983    year        = 2014,
2984    howpublished= {\href{https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html}{https://\-gcc.gnu.org/\-onlinedocs/\-gcc-4.7.2/\-gcc/\-C\-Extensions.html}},
2985}
2986
2987@inproceedings{BNRPascal,
2988    keywords    = {concurrency, rendezvous},
2989    contributer = {pabuhr@plg},
2990    author      = {R. Kamel and N. Gammage},
2991    title       = {Experience with Rendezvous},
2992    booktitle   = {Proceedings of the 1988 International Conference on Computer Languages},
2993    month       = oct,
2994    year        = 1988,
2995    pages       = {143-149}
2996}
2997
2998@inproceedings{Patwary10,
2999    keywords    = {union-find},
3000    contributer = {a3moss@uwaterloo.ca},
3001    author      = {Patwary, Md. Mostofa Ali and Blair, Jean and Manne, Fredrik},
3002    editor      = {Festa, Paola},
3003    title       = {Experiments on Union-Find Algorithms for the Disjoint-Set Data Structure},
3004    booktitle   = {Experimental Algorithms},
3005    year        = 2010,
3006    publisher   = {Springer Berlin Heidelberg},
3007    address     = {Berlin, Heidelberg},
3008    pages       = {411--423},
3009    isbn        = {978-3-642-13193-6}
3010}
3011
3012% F
3013
3014@inproceedings{Knudsen01,
3015    keywords    = {Beta, exception handling},
3016    contributer = {pabuhr@plg},
3017    author      = {J{\o}rgen Lindskov Knudsen},
3018    title       = {Fault Tolerance and Exception Handling in {BETA}},
3019    booktitle   = {Exception Handling},
3020    publisher   = {Springer},
3021    volume      = 2022,
3022    series      = {Lecture Notes in Computer Science},
3023    year        = 2001,
3024    pages       = {1-17}
3025}
3026
3027@article{Lamport87,
3028    keywords    = {software solutions, mutual exclusion, fast},
3029    contributer = {pabuhr@plg},
3030    author      = {Leslie Lamport},
3031    title       = {A Fast Mutual Exclusion Algorithm},
3032    journal     = tocs,
3033    volume      = 5,
3034    number      = 1,
3035    month       = jan,
3036    year        = {1987},
3037    pages       = {1-11},
3038    publisher   = {ACM},
3039    address     = {New York, NY, USA},
3040}
3041
3042@article{Hesselink17,
3043    keywords    = {concurrency, mutual exclusion, performance experiment, software solutions},
3044    title       = {Fast mutual exclusion by the {T}riangle algorithm},
3045    author      = {Wim H. Hesselink and Peter A. Buhr and David Dice},
3046    journal     = ccpe,
3047    volume      = 30,
3048    number      = 4,
3049    year        = 2018,
3050    month       = feb,
3051    publisher   = {John Wiley \& Sons},
3052    note        = {\href{https://doi.org/10.1002/cpe.4183}{https://\-doi.org/\-10.1002/\-cpe.4183}}
3053}
3054
3055@article{Yang95,
3056    keywords    = {software solutions, N-thread, mutual exclusions},
3057    contributer = {pabuhr@plg},
3058    author      = {Jae-Heon Yang and James H. Anderson},
3059    title       = {A Fast, Scalable Mutual Exclusion Algorithm},
3060    journal     = {Distributed Computing},
3061    publisher   = {Springer-Verlag},
3062    volume      = {9},
3063    number      = {1},
3064    year        = {1995},
3065    pages       = {51-60},
3066}
3067
3068@manual{WindowsFibers,
3069    keywords    = {threads, fibers},
3070    contributer = {pabuhr@plg},
3071    author      = {Windows},
3072    title       = {Fibers},
3073    organization= {Microsoft, Windows Development Center},
3074    address     = {\href{https://docs.microsoft.com/en-us/windows/desktop/ProcThread/fibers}{https://\-docs.microsoft.com/\-en-us/\-windows/\-desktop/\-ProcThread/\-fibers}},
3075    year        = 2018,
3076}
3077
3078@inproceedings{F-bound,
3079    keywords    = {},
3080    contributer = {gjditchfield@plg},
3081    author      = {Peter Canning and William Cook and Walter Hill and Walter Olthoff and John C. Mitchell},
3082    title       = {F-Bounded Polymorphism for Object-Oriented Programming},
3083    booktitle   = {Fourth International Conference on Functional Programming Languages and Computer Architecture},
3084    year        = 1989,
3085    month       = sep,
3086    pages       = {273-280}
3087}
3088
3089@mastersthesis{Wasik08,
3090    author      = {Ayelet Wasik},
3091    title       = {Features of a Multi-Threaded Memory Allocator},
3092    school      = {University of Waterloo},
3093    year        = 2008,
3094    month       = jan,
3095    address     = {Waterloo, Ontario, Canada, N2L 3G1},
3096    note        = {\textsf{http://uwspace.uwaterloo.ca/\-bitstream/\-10012/\-3501/\-1/\-Thesis.pdf}},
3097}
3098
3099@article{Holzmann94,
3100    keywords    = {semaphore, flags},
3101    contributer = {pabuhr@plg},
3102    author      = {Gerard J. Holzmann and Bj\"{o}rn Pehrson},
3103    title       = {The First Data Networks},
3104    journal     = {Scientific American},
3105    month       = jan,
3106    year        = 1994,
3107    volume      = 12,
3108    number      = 1,
3109    pages       = {124-129},
3110}
3111
3112@article{Bohm66,
3113    keywords    = {goto, structured programming},
3114    contributer = {pabuhr@plg},
3115    author      = {C. B\"{o}hm and G. Jacopini},
3116    title       = {Flow diagrams, Turing Machines and Languages with only two Formation Rules},
3117    journal     = cacm,
3118    month       = may,
3119    year        = 1966,
3120    volume      = 9,
3121    number      = 5,
3122    pages       = {366-371},
3123}
3124
3125@manual{Folly,
3126    keywords    = {Folly},
3127    contributer = {pabuhr@plg},
3128    author      = {Folly},
3129    title       = {Facebook Open-source Library},
3130    organization= {Facebook},
3131    address     = {\href{https://github.com/facebook/folly}{https://\-github.com/\-facebook/\-folly}},
3132    year        = 2018,
3133}
3134
3135@manual{Fortran95,
3136    keywords    = {Fortran 95},
3137    contributer = {pabuhr@plg},
3138    key         = {Fortran95},
3139    title       = {Fortran 95 Standard, ISO/IEC 1539},
3140    organization= {Unicomp, Inc.},
3141    address     = {7660 E. Broadway, Tucson, Arizona, U.S.A, 85710},
3142    month       = jan,
3143    year        = 1997,
3144}
3145
3146@manual{Fortran08,
3147    keywords    = {ISO/IEC Fortran 08},
3148    contributer = {pabuhr@plg},
3149    author      = {Fortran08},
3150    title       = {Programming Languages -- {Fortran} Part 1:Base Language ISO/IEC 1539-1:2010},
3151    edition     = {3rd},
3152    publisher   = {International Standard Organization},
3153    address     = {\href{https://www.iso.org/standard/50459.html}{https://\-www.iso.org/\-standard/\-50459.html}},
3154    year        = 2010,
3155}
3156
3157@manual{Fortran18,
3158    keywords    = {ISO/IEC Fortran 10},
3159    contributer = {pabuhr@plg},
3160    author      = {Fortran18},
3161    title       = {Programming Languages -- {Fortran} Part 1:Base Language ISO/IEC 1539-1:2018},
3162    edition     = {4rd},
3163    publisher   = {International Standard Organization},
3164    address     = {\href{https://www.iso.org/standard/72320.html}{https://\-www.iso.org/\-standard/\-72320.html}},
3165    year        = 2018,
3166}
3167
3168@book{Andrews00:book,
3169    keywords    = {concurrency},
3170    contributer = {pabuhr@plg},
3171    author      = {Gregory R. Andrews},
3172    title       = {Foundations of Multithreaded, Parallel and Distributed Programming},
3173    publisher   = {Addison--Wesley},
3174    year        = 2000,
3175}
3176
3177@article{Agha89,
3178    keywords    = {actors, concurrency},
3179    contributer = {pabuhr@plg},
3180    author      = {Gul A. Agha},
3181    title       = {Foundational Issues in Concurrent Computing},
3182    journal     = sigplan,
3183    month       = apr,
3184    year        = 1989,
3185    volume      = 24,
3186    number      = 4,
3187    pages       = {60-65},
3188    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming,
3189                   Sept. 26--27, 1988, San Diego, California, U.S.A},
3190}
3191
3192@article{ool,
3193    keywords    = {},
3194    contributer = {gjditchfield@plg},
3195    author      = {Douglas T. Ross},
3196    title       = {Toward Foundations for the Understanding of Type},
3197    journal     = sigplan,
3198    year        = 1976,
3199    volume      = 11,
3200    pages       = {63-65},
3201    note        = {Conference on Data: Abstraction, Definition and Structure},
3202    summary     = {
3203        Possibly the first use (without definition, alas) of the phrase
3204        "object oriented language".  Metaphysical to the point of incoherence.
3205    }
3206}
3207
3208@article{frames,
3209    keywords    = {frames},
3210    contributer = {gjditchfield@plg},
3211    author      = {Paul G. Basset},
3212    title       = {Frame-Based Software Engineering},
3213    journal     = {IEEE Software},
3214    month       = jul, year = 1987,
3215    volume      = 4, number = 4, pages = {9-16}
3216}
3217
3218@misc{Sutter05c,
3219    contributer = {pabuhr@plg},
3220    title       = {The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software},
3221    author      = {Herb Sutter},
3222    howpublished= {\url{http://www.gotw.ca/publications/concurrency-ddj.htm}},
3223    year        = {2005},
3224    note        = {originally Dr. Dobb's Journal 30(3)},
3225}
3226
3227@article{Sutter05,
3228    keywords    = {concurrency, C++},
3229    contributer = {pabuhr@plg},
3230    author      = {Herb Sutter},
3231    title       = {A Fundamental Turn Toward Concurrency in Software},
3232    journal     = {Dr. Dobb's Journal : Software Tools for the Professional Programmer},
3233    month       = mar,
3234    year        = 2005,
3235    volume      = 30,
3236    number      = 3,
3237    pages       = {16-22},
3238}
3239
3240@inproceedings{Dony01,
3241    keywords    = {Smalltalk, exception handling},
3242    contributer = {pabuhr@plg},
3243    author      = {Chistophe Dony},
3244    title       = {A Fully Object-Oriented Exception Handling System: Rationale and Smalltalk Implementation},
3245    booktitle   = {Exception Handling},
3246    publisher   = {Springer},
3247    volume      = 2022,
3248    series      = {Lecture Notes in Computer Science},
3249    year        = 2001,
3250    pages       = {18-38}
3251}
3252
3253@misc{FW,
3254    key         = {FW},
3255    contributer = {gjditchfield@plg},
3256    title       = {Funk \& Wagnalls Standard Desk Dictionary},
3257    year        = 1980
3258}
3259
3260@book{Knuth73V1,
3261    contributer = {pabuhr@plg},
3262    author      = {Donald E. Knuth},
3263    title       = {Fundamental Algorithms},
3264    series      = {The Art of Computer Programming},
3265    publisher   = {Addison-Wesley},
3266    address     = {Boston},
3267    year        = 1973,
3268    volume      = 1,
3269    edition     = {2nd},
3270}
3271
3272@inproceedings{Strachey,
3273    keywords    = {polymorphism},
3274    contributer = {gjditchfield@plg},
3275    author      = {C. Strachey},
3276    title       = {Fundamental Concepts in Programming Languages},
3277    booktitle   = {Lecture Notes for the International Summer School in Computer Programming},
3278    year        = 1967,
3279    month       = aug,
3280    address     = {Copenhagen},
3281    comment     = {
3282        Defines ad-hoc and parametric polymorphism.
3283    }
3284}
3285
3286@article{Eisenberg72,
3287    keywords    = {concurrency, N-Process solution, O(N)},
3288    contributer = {pabuhr@plg},
3289    author      = {Murray A. Eisenberg and Michael R. McGuire},
3290    title       = {Further Comments on {D}ijkstra's Concurrent Programming Control Problem},
3291    journal     = cacm,
3292    month       = nov,
3293    year        = 1972,
3294    volume      = 15,
3295    number      = 11,
3296    pages       = {999},
3297}
3298
3299% G
3300
3301@article{Boehm88,
3302    keywords    = {conservative garbage collection, C},
3303    contributer = {gjditchfield@plg},
3304    author      = {Hans-Juergen Boehm and Mark Weiser},
3305    title       = {Garbage Collection in an Uncooperative Environment},
3306    journal     = spe,
3307    month       = sep,
3308    year        = 1988,
3309    volume      = 18,
3310    number      = 9,
3311    pages       = {807-820}
3312}
3313
3314@manual{gcc,
3315    keywords    = {},
3316    contributer = {gjditchfield@plg},
3317    title       = {GCC},
3318    author      = {Richard M. Stallman},
3319    organization= {Free Software Foundation},
3320    address     = {Cambridge}
3321}
3322
3323@article{doUpon,
3324    keywords    = {formal verification, axiomatic semantics, control structures},
3325    contributer = {gjditchfield@plg},
3326    author      = {Ed Anson},
3327    title       = {A Generalized Iterative Construct and Its Semantics},
3328    journal     = toplas,
3329    volume      = {9},    number = {4},
3330    pages       = {567-581},
3331    month       = oct, year = 1987,
3332    comment     = {
3333        \begin{verbatim}
3334            do
3335                   P1 -> L1
3336               [] P2 -> L2
3337            ...
3338               [] Pm -> Lm
3339            upon
3340                   Q1 -> M1
3341               [] Q2 -> M2
3342            ...
3343               [] qn -> mn
3344            od
3345        \end{verbatim}
3346
3347        If there is an i such that Qi is true, execute Mi and terminate.
3348        Otherwise, if there is an i such that Pi is true, execute Li and
3349        repeat the loop.  Otherwise, fail.
3350    }
3351}
3352
3353@unpublished{Bilson,
3354    keywords    = {generic programming, generics, polymorphism},
3355    contributor = {a3moss@plg},
3356    author      = {Richard C. Bilson and Glen Ditchfield and Peter A. Buhr},
3357    title       = {Generic Programming with Inferred Models},
3358}
3359
3360@article{Haskell,
3361    keywords    = {lazy evaluation, type class},
3362    contributer = {pabuhr},
3363    author      = {Paul Hudak and Joseph H. Fasel},
3364    title       = {A Gentle Introduction to Haskell},
3365    journal     = sigplan,
3366    volume      = 27,
3367    number      = 5,
3368    month       = may,
3369    year        = 1992,
3370    pages       = {T1-53},
3371}
3372
3373@manual{GMP,
3374    keywords    = {GMP arbitrary-precision library},
3375    contributer = {pabuhr@plg},
3376    key         = {GMP},
3377    title       = {{GNU} Multiple Precision Arithmetic Library},
3378    address     = {GNU},
3379    year        = 2016,
3380    note        = {\href{https://gmplib.org}{https://\-gmplib.org}},
3381}
3382
3383@manual{Go,
3384    keywords    = {Go programming language},
3385    contributer = {pabuhr@plg},
3386    author      = {Robert Griesemer and Rob Pike and Ken Thompson},
3387    title       = {{Go} Programming Language},
3388    organization= {Google},
3389    year        = 2009,
3390    note        = {\href{http://golang.org/ref/spec}{http://\-golang.org/\-ref/\-spec}},
3391}
3392
3393@article{Dijkstra68a,
3394    keywords    = {goto},
3395    contributer = {pabuhr@plg},
3396    author      = {Edsger W. Dijkstra},
3397    title       = {Go To Statement Considered Harmful},
3398    journal     = cacm,
3399    month       = mar,
3400    year        = 1968,
3401    volume      = 11,
3402    number      = 3,
3403    pages       = {147-148},
3404    note        = {Reprinted in \cite{Yourdon79} pp. 29--36.},
3405}
3406
3407@misc{GObject,
3408    keywords    = {GObject},
3409    contributor = {a3moss@uwaterloo.ca},
3410    key         = {GObject},
3411    organization= {The {GNOME} Project},
3412    title       = {{GO}bject Reference Manual},
3413    year        = 2014,
3414    howpublished= {https://developer.gnome.org/gobject/stable/},
3415}
3416
3417@article{Choi91,
3418    keywords    = {contra-variance, functions},
3419    contributer = {pabuhr@plg},
3420    author      = {Injun Choi and Michael V. Mannino},
3421    title       = {Graph Interpretation of Methods: A Unifying Framework for Polymorphism in Object-Oriented Programming},
3422    journal     = {OOPS Messenger},
3423    volume      = 2,
3424    number      = 1,
3425    month       = jan,
3426    year        = 1991,
3427    pages       = {38-54},
3428}
3429
3430@misc{GNU-C,
3431    keywords    = {C, ANSI C},
3432    contributer = {pabuhr@plg},
3433    author      = {Richard Stallman},
3434    title       = {The Free Software Foundation's Gnu {C} Compiler},
3435    howpublished= {Free Software Foundation, 1000 Mass Ave., Cambridge, MA, U.S.A., 02138},
3436    year        = 1989,
3437}
3438
3439@article{Dijkstra:green,
3440    keywords    = {ada},
3441    contributer = {gjditchfield@plg},
3442    author      = {Edsger W. Dijkstra},
3443    title       = {On the GREEN Language submitted to the DoD},
3444    journal     = sigplan,
3445    year        = 1978,
3446    month       = oct,
3447    volume      = 13,
3448    number      = 10,
3449    pages       = {16-21}
3450}
3451
3452@inproceedings{Miller02,
3453    keywords    = {exception handling},
3454    contributer = {pabuhr@plg},
3455    author      = {Robert Miller and Anand Tripathi},
3456    title       = {The Guardian Model for Exception Handling in Distributed Systems},
3457    booktitle   = {21st Symposium on Reliable Distributed Systems},
3458    organization= {IEEE},
3459    address     = {Suita, Japan},
3460    year        = 2002,
3461    month       = oct,
3462    pages       = {304-313}
3463}
3464
3465@phdthesis{Chen09,
3466    author      = {Jun Chen},
3467    title       = {Guided Testing of Concurrent Programs Using Value Schedules},
3468    school      = {University of Waterloo},
3469    year        = 2009,
3470    month       = sep,
3471    address     = {Waterloo, Ontario, Canada, N2L 3G1},
3472    note        = {\textsf{http://uwspace.uwaterloo.ca/bitstream/\-10012/\-4735/\-1/\-Chen-Jun.pdf}},
3473}
3474
3475@misc{GNU-C++,
3476    keywords    = {C++, GNU C},
3477    contributer = {pabuhr@plg},
3478    author      = {Michael D. Tiemann},
3479    title       = {User's Guide to GNU {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
3480    howpublished= {Free Software Foundation, 1000 Mass Ave., Cambridge, MA, U.S.A., 02138},
3481    month       = mar,
3482    year        = 1990,
3483}
3484
3485% H
3486
3487@manual{Haskell10,
3488    keywords    = {Haskell},
3489    contributer = {pabuhr@plg},
3490    author      = {Haskell},
3491    title       = {Haskell 2010 Language Report},
3492    edition     = {{S}imon {M}arlow},
3493    year        = 2010,
3494    note        = {\href{https://haskell.org/definition/haskell2010.pdf}{https://\-haskell.org/\-definition/\-haskell2010.pdf}},
3495}
3496
3497@article{Michael04a,
3498    keywords    = {Lock-free, synchronization, concurrent programming, memory management, multiprogramming, dynamic data structures},
3499    author      = {Maged M. Michael},
3500    title       = {Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects},
3501    journal     = ieeepds,
3502    volume      = 15,
3503    number      = 6,
3504    month       = jun,
3505    year        = 2004,
3506    pages       = {491-504},
3507    publisher   = {IEEE Press},
3508    address     = {Piscataway, NJ, USA},
3509}
3510
3511@techreport{Hermes90,
3512    keywords    = {processes, distributed computing},
3513    contributer = {pabuhr@plg},
3514    author      = {Robert E. Strom and David F. Bacon and Arthur P. Goldberg and Andy Lowry and Daniel M. Yellin and Shaula Alexander Yemini}, 
3515    title       = {Hermes: A Language for Distributed Computing},
3516    institution = {IBM T. J. Watson Research Center},
3517    address     = {Yorktown Heights, New York, U.S.A., 10598},
3518    month       = oct,
3519    year        = 1990,
3520}
3521
3522@book{Hermes91,
3523    keywords    = {processes, distributed computing},
3524    contributer = {pabuhr@plg},
3525    author      = {Robert E. Strom and David F. Bacon and Arthur P. Goldberg and Andy Lowry and Daniel M. Yellin and Shaula Alexander Yemini}, 
3526    title       = {Hermes: A Language for Distributed Computing},
3527    publisher   = {Prentice-Hall},
3528    address     = {Englewood Cliffs},
3529    series      = {Innovative Technology},
3530    year        = 1991,
3531}
3532
3533@article{katzenelson83b,
3534    contributer = {gjditchfield@plg},
3535    author      = "Jacob Katzenelsen",
3536    title       = "Higher Level Programming and Data Abstraction---A Case Study using Enhanced C",
3537    journal     = spe,
3538    year        = 1983,
3539    volume      = 13,
3540    number      = 7,
3541    pages       = {577-596},
3542    month       = jul
3543}
3544
3545@techreport{Hoare73,
3546    keywords    = {},
3547    contributer = {gjditchfield@plg},
3548    author      = {C. A. R. Hoare},
3549    title       = {Hints on Programming Language Design},
3550    institution = {Stanford University Computer Science Department},
3551    year        = 1973,
3552    month       = dec,
3553    number      = {CS-73-403},
3554    note        = {Reprinted in \cite{pldesign}.}
3555}
3556
3557@article{Dijkstra71,
3558    keywords    = {monitor, secretary},
3559    contributer = {pabuhr@plg},
3560    author      = {E. W. Dijkstra},
3561    title       = {Hierarchical Ordering of Sequential Processes},
3562    journal     = acta,
3563    volume      = 1,
3564    pages       = {115-138},
3565    year        = 1971,
3566}
3567
3568@article{Hesselink17b,
3569    keywords    = {concurrency, mutual exclusion, performance experiment, software solutions},
3570    title       = {High-Contention Mutual Exclusion by Elevator Algorithms},
3571    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
3572    journal     = ccpe,
3573    volume      = 30,
3574    number      = 18,
3575    year        = 2018,
3576    month       = sep,
3577    publisher   = {John Wiley \& Sons},
3578    note        = {\href{https://doi.org/10.1002/cpe.4475}{https://\-doi.org/\-10.1002/\-cpe.4475}},
3579}
3580
3581@article{Buhr15a,
3582    keywords    = {software solution, mutual exclusion, performance experiment},
3583    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
3584    title       = {High-Performance {$N$}-Thread Software Solutions for Mutual Exclusion},
3585    journal     = ccpe,
3586    volume      = 27,
3587    number      = 3,
3588    pages       = {651-701},
3589    month       = mar,
3590    year        = 2015,
3591}
3592
3593@article{Ackermann28,
3594    keywords    = {recursion, Ackermann function},
3595    contributer = {pabuhr@plg},
3596    author      = {Wilhelm Ackermann},
3597    title       = {Zum Hilbertschen Aufbau der reellen Zahlen},
3598    publisher   = {Springer},
3599    journal     = mathann,
3600    number      = 1,
3601    volume      = 99,
3602    pages       = {118-133},
3603    month       = dec,
3604    year        = 1928,
3605}
3606
3607@inproceedings{typeclass,
3608    keywords    = {Hindley/Miller type systems, Haskell},
3609    contributer = {gjditchfield@plg},
3610    author      = {Philip Wadler and Stephen Blott},
3611    title       = {How to make {\em Ad-Hoc} Polymorphism Less {\em Ad-Hoc}},
3612    booktitle   = popl,
3613    year        = 1989,
3614    pages       = {60-76},
3615    organization= {Association for Computing Machinery}
3616}
3617
3618% I
3619
3620@book{IBM370,
3621    keywords    = {370, IBM},
3622    contributer = {pabuhr@plg},
3623    key         = {IBM370},
3624    title       = {{IBM} System/370 Principles of Operation},
3625    publisher   = {IBM},
3626    number      = {GA22-7000-8},
3627    month       = oct,
3628    year        = 1981,
3629    edition     = {9th}
3630}
3631
3632@book{Icon,
3633    keywords    = {Icon},
3634    contributer = {pabuhr@plg},
3635    author      = {Ralph E. Griswold and Madge T. Griswold},
3636    title       = {The Icon Programming Language},
3637    publisher   = {Prentice-Hall},
3638    address     = {Englewood Cliffs},
3639    year        = 1983,
3640}
3641
3642@inproceedings{Valois94,
3643    keywords    = {lock free, queue},
3644    contributer = {pabuhr@plg},
3645    author      = {John D. Valois},
3646    title       = {Implementing Lock-Free Queues},
3647    booktitle   = {Seventh International Conference on Parallel and Distributed Computing Systems},
3648    address     = {Las Vegas, Nevada, U.S.A.},
3649    year        = {1994},
3650    pages       = {64-69},
3651}
3652
3653@article{Hehner81,
3654    keywords    = {concurrency, critical section, bakery algorithm},
3655    contributer = {pabuhr@plg},
3656    author      = {Eric C. R. Hehner and R. K. Shyamasundar},
3657    title       = {An Implementation of {P} and {V}},
3658    journal     = ipl,
3659    year        = 1981,
3660    month       = aug,
3661    volume      = 12,
3662    number      = 4,
3663    pages       = {196-198},
3664}
3665
3666@incollection{Steenkiste91,
3667    keywords    = {lisp},
3668    contributer = {gjditchfield@plg},
3669    author      = {Peter A. Steenkiste},
3670    title       = {The Implementation of Tags and Run-Time Checking},
3671    booktitle   = {Topics in Advanced Language Implementation},
3672    pages       = {3-24},
3673    year        = 1991,
3674    editor      = {Peter Lee},
3675    chapter     = {1},
3676    publisher   = {The MIT Press}
3677}
3678
3679@techreport{Roberts89,
3680    keywords    = {},
3681    contributer = {pabuhr@plg},
3682    author      = {Eric S. Roberts},
3683    title       = {Implementing Exceptions in {C}},
3684    institution = {Digital Systems Research Center},
3685    address     = {130 Lytton Avenue, Palo Alto, California, 94301},
3686    number      = {40},
3687    month       = mar,
3688    year        = 1989,
3689}
3690
3691@mastersthesis{Bilson03,
3692    keywords    = {Cforall, parametric polymorphism, overloading},
3693    contributer = {pabuhr@plg},
3694    author      = {Richard C. Bilson},
3695    title       = {Implementing Overloading and Polymorphism in \textsf{C}$\mathbf{\forall}$},
3696    school      = {School of Computer Science, University of Waterloo},
3697    year        = 2003,
3698    address     = {Waterloo, Ontario, Canada, N2L 3G1},
3699    note        = {\href{http://plg.uwaterloo.ca/theses/BilsonThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-BilsonThesis.pdf}},
3700}
3701
3702@article{Buhr05b,
3703    keywords    = {monitor, automatic signal, implicit signal},
3704    contributer = {pabuhr@plg},
3705    author      = {Peter A. Buhr and Ashif S. Harji},
3706    title       = {Implicit-signal monitors},
3707    journal     = toplas,
3708    volume      = 27,
3709    number      = 6,
3710    month       = nov,
3711    year        = 2005,
3712    issn        = {0164-0925},
3713    pages       = {1270--1343},
3714    publisher   = {ACM Press},
3715    address     = {New York, NY, USA},
3716}
3717
3718@article{Galler64,
3719    keywords    = {union-find, original},
3720    contributer = {a3moss@uwaterloo.ca},
3721    title       = {An improved equivalence algorithm},
3722    author      = {Galler, Bernard A and Fisher, Michael J},
3723    journal     = {Communications of the ACM},
3724    volume      = {7},
3725    number      = {5},
3726    pages       = {301--303},
3727    year        = {1964},
3728    publisher   = {ACM}
3729}
3730
3731@phdthesis{Barghi18,
3732    keywords    = {concurrency, user threads, actors},
3733    contributer = {pabuhr@plg},
3734    author      = {Saman Barghi},
3735    title       = {Improving the Performance of User-level Runtime Systems for Concurrent Applications},
3736    school      = {School of Computer Science, University of Waterloo},
3737    year        = 2018,
3738    month       = sep,
3739    optaddress  = {Waterloo, Ontario, Canada, N2L 3G1},
3740    note        = {\href{https://uwspace.uwaterloo.ca/handle/10012/13935}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-13935}},
3741}
3742
3743@article{Baker77,
3744    author      = {Henry C. Baker, Jr. and Carl Hewitt},
3745    title       = {The Incremental Garbage Collection of Processes},
3746    journal     = {SIGART Bulletin},
3747    publisher   = {ACM},
3748    address     = {New York, NY, USA},
3749    month       = aug,
3750    year        = 1977,
3751    pages       = {55-59},
3752    issn        = {0163-5719},
3753}
3754
3755@book{Algol68,
3756    keywords    = {Algol68},
3757    contributer = {pabuhr@plg},
3758    author      = {C. H. Lindsey and S. G. van der Meulen},
3759    title       = {Informal Introduction to ALGOL 68},
3760    publisher   = {North-Holland},
3761    address     = {London},
3762    year        = 1977,
3763}
3764
3765@inproceedings{Cook90,
3766    keywords    = {f-bounded polymorhpism, lambda calculus},
3767    contributer = {gjditchfield@plg},
3768    author      = {William R. Cook and Walter L. Hill and Peter S. Canning},
3769    title       = {Inheritance is Not Subtyping},
3770    booktitle   = popl,
3771    year        = 1990,
3772    pages       = {125-135},
3773    organization= {Association for Computing Machinery},
3774    abstract    = {
3775        In typed object-oriented languages the subtype relation is
3776        typically based on the inheritance hierarchy.  This approach,
3777        however, leads either to insecure type-systems or to restrictions
3778        on inheritance that make it less flexible than untyped Smalltalk
3779        inheritance.  We present a new typed model of inheritance that
3780        allows more of the flexibility of Smalltalk inheritance within a
3781        statically-typed system.  Significant features of our analysis are
3782        the introduction of polymorphism into the typing of inheritance and
3783        the uniform application of inheritance to objects, classes and
3784        types.  The resulting notion of {\em type inheritance} allows us to
3785        show that the type of an inherited object is an inherited type but
3786        not always a subtype.
3787    }
3788}
3789
3790@inproceedings{MMR92,
3791    keywords    = {},
3792    contributer = {gjditchfield@plg},
3793    author      = {Robert E. Minnear and Patrick A. Muckelbauer and Vincent F. Russo},
3794    title       = {Integrating the {Sun Microsystems} {XDR/RPC} Protocols
3795                  into the {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Stream Model},
3796    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference Proceedings},
3797    year        = 1992,
3798    month       = aug,
3799    pages       = {295-312},
3800    organization= {USENIX Association},
3801    address     = {2590 Ninth Street, Suite 215, Berkeley, CA 94710},
3802    abstract    = {
3803        This paper reports our experiences integrating the Sun Microsystems
3804        RPC and XDR protocol specifications into the C++ model of
3805        input/output streams.  As part of the {\it Renaissance} operating
3806        system project, we wish to construct network servers and clients,
3807        written in C++, which interoperate with existing UNIX clients
3808        and servers.  We discovered that, although it would be possible to
3809        re-implement the procedural based XDR/RPC implementation
3810        distributed by Sun Microsystems in C++, it is far cleaner to
3811        integrate the protocols with the C++ I/O stream model.  We
3812        feel the resulting model provides a cleaner way of implementing RPC
3813        clients and servers without losing functionality or compatibility
3814        with existing clients and servers.
3815    }
3816}
3817
3818@inproceedings{Zuo08,
3819    keywords    = {shared memory systems,intelligent multiport memory,multiprocessors systems,shared memory system},
3820    author      = {Wang Zuo and Wang Zuo and Li Jiaxing},
3821    title       = {An Intelligent Multi-Port Memory},
3822    booktitle   = {Symposium on Intelligent Information Technology Application Workshops, Shanghai, China},
3823    month       = dec,
3824    year        = 2008,
3825    pages       = {251-254},
3826    publisher   = {IEEE Computer Society},
3827    address     = {Los Alamitos, CA, USA},
3828}
3829
3830@book{Francez96,
3831    keywords    = {await, formal},
3832    contributer = {pabuhr@plg},
3833    author      = {Nissim Francez and Ira R. Forman},
3834    title       = {Interacting Processes: A Multiparty Approach to Coordinated Distributed Programming},
3835    publisher   = {Addison-Wesley},
3836    address     = {Boston},
3837    series      = {ACM Press Books},
3838    year        = 1996,
3839}
3840
3841@article{Labreche90,
3842    keywords    = {concurrency, C++},
3843    contributer = {pabuhr@plg},
3844    author      = {Pierre Labr{\`{e}}che},
3845    title       = {Interactors: A Real-Time Executive with Multiparty Interactions in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
3846    journal     = sigplan,
3847    volume      = 25,
3848    number      = 4,
3849    month       = apr,
3850    year        = 1990,
3851    pages       = {20-32},
3852}
3853
3854@inproceedings{interfaces,
3855    keywords    = {parameterized interfaces, classes, recursion/inheritance},
3856    contributer = {gjditchfield@plg},
3857    author      = {Peter S. Canning and William R. Cook and Walter L. Hill and
3858        Walter G. Olthoff},
3859    title       = {Interfaces for Strongly-Typed Object-Oriented Programming},
3860    crossref    = "OOPSLA89",
3861    pages       = {457-467},
3862    abstract    = {
3863        This paper develops a system of explicit interfaces for
3864        object-oriented programming.  The system provides the benefits of
3865        module interfaces found in languages like Ada and Modula-2 while
3866        preserving the expressiveness that gives untyped object-oriented
3867        languages like Smalltalk their flexibility.  Interfaces are
3868        interpreted as polymorphic types to make the system sufficiently
3869        powerful.  We use interfaces to analyze the properties of
3870        inheritance, and identify three distinct kinds of inheritance in
3871        object-oriented programming, corresponding to objects, classes, and
3872        interfaces, respectively.  Object interfaces clarify the
3873        distinction between interface containment and inheritance and give
3874        insight into limitations caused by equating the notions of type and
3875        class in many typed object-oriented programming languages.
3876        Interfaces also have practical consequences for design,
3877        specification, and maintenance of object-oriented systems.
3878    }
3879}
3880
3881@phdthesis{Girard72,
3882    keywords    = {universal quantification},
3883    contributer = {gjditchfield@plg},
3884    author      = {J.-Y. Girard},
3885    title       = {Interpretation fonctionelle et elimination des coupures de
3886        l'arithmetique d'ordre superieur},
3887    school      = {Universite Paris},
3888    year        = {1972}
3889}
3890
3891@article{Karaorman93,
3892    keywords    = {Eiffel, concurrency libraries},
3893    contributer = {pabuhr@plg},
3894    author      = {Murat Karaorman and John Bruno},
3895    title       = {Introducing Concurrency to a Sequential Language},
3896    journal     = cacm,
3897    month       = sep,
3898    year        = 1993,
3899    volume      = 36,
3900    number      = 9,
3901    pages       = {103-116}
3902}
3903
3904@book{Corman92,
3905    keywords    = {PRAM, parallel algorithms},
3906    contributer = {pabuhr@plg},
3907    author      = {Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest},
3908    title       = {Introduction to Algorithms},
3909    publisher   = {MIT Press/McGraw-Hill},
3910    address     = {Cambridge},
3911    series      = {Electrical Engineering and Computer Science Series},
3912    year        = 1992,
3913}
3914
3915@book{Hopcroft79,
3916    keywords    = {finite-state machine, push-dowm automata},
3917    contributer = {pabuhr@plg},
3918    author      = {John E. Hopcroft and Jeffrey D. Ullman},
3919    title       = {Introduction to Automata Theory, Languages and Computation},
3920    publisher   = {Addison-Wesley},
3921    address     = {Boston},
3922    year        = 1979,
3923}
3924
3925@techreport{walker87,
3926    keywords    = {CCS},
3927    contributer = {gjditchfield@plg},
3928    author      = {David Walker},
3929    title       = {Introduction to a Calculus of Communicating Systems},
3930    institution = {Laboratory for Foundations of Computer Science},
3931    year        = 1987,
3932    address     = {Department of Computer Science, University of Edinburgh, Edinburgh EH9 3JZ},
3933    month       = jun,
3934    number      = {ECS-LFCS-87-22},
3935}
3936
3937@article{katzenelson83a,
3938    author      = {Jacob Katzenelson},
3939    title       = {Introduction to Enhanced C (EC)},
3940    journal     = spe,
3941    volume      = 13,
3942    number      = 7,
3943    year        = 1983,
3944    month       = jul,
3945    pages       = {551-576},
3946}
3947
3948@book{Deitel90,
3949    keywords    = {concurrency, operating systems},
3950    contributer = {pabuhr@plg},
3951    author      = {Harvey M. Deitel},
3952    title       = {An Introduction to Operating Systems},
3953    publisher   = {Addison-Wesley},
3954    address     = {Boston},
3955    year        = 1990,
3956    edition     = {2nd},
3957}
3958
3959@techreport{Birrell89,
3960    keywords    = {threads, monitors},
3961    contributer = {pabuhr@plg},
3962    author      = {Andrew D. Birrell},
3963    title       = {An Introduction to Programming with Threads},
3964    institution = {Digital Systems Research Center},
3965    address     = {130 Lytton Avenue, Palo Alto, California, 94301},
3966    number      = {35},
3967    month       = jan,
3968    year        = 1989,
3969    note        = {{\textsf{http://www.hpl.hp.com/\-techreports/\-Compaq-DEC/\-SRC-RR-35.html}}},
3970
3971}
3972
3973@article{t/o,
3974    keywords    = {Trellis/Owl},
3975    contributer = {gjditchfield@plg},
3976    author      = {Craig Schaffert and Topher Cooper and Bruce Bullis and Mike Kilian and Carrie Wilpot},
3977    title       = {An Introduction to Trellis/Owl},
3978    journal     = sigplan,
3979    volume      = 21,
3980    number      = 11,
3981    year        = 1986,
3982    month       = nov,
3983    pages       = {9-16},
3984}
3985
3986@inproceedings{Pharr12,
3987    title       = {ispc: A {SPMD} compiler for high-performance CPU programming},
3988    author      = {Pharr, Matt and Mark, William R},
3989    booktitle   = {Innovative Parallel Computing (InPar), 2012},
3990    pages       = {1--13},
3991    year        = {2012},
3992    month       = may,
3993    address     = {San Jose, CA, USA},
3994    publisher   = {IEEE},
3995}
3996
3997@inproceedings{DeLozier13,
3998    keywords    = {C++, local pointers, memory safety, type-safety},
3999    author      = {DeLozier, Christian and Eisenberg, Richard and Nagarakatte, Santosh and Osera, Peter-Michael and Martin, Milo M.K. and Zdancewic, Steve},
4000    title       = {{I}ronclad {C++}: A Library-augmented Type-safe Subset of {C++}},
4001    booktitle   = {Proceedings of the 2013 ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages \& Applications},
4002    series      = {OOPSLA'13},
4003    year        = {2013},
4004    address     = {Indianapolis, Indiana, USA},
4005    pages       = {287-304},
4006    publisher   = {ACM},
4007}
4008
4009@inproceedings{Hibbard77,
4010    keywords    = {algol-68, concurrency},
4011    contributer = {pabuhr@plg},
4012    author      = {Peter G. Hibbard and P. Knueven and B. W. Leverett},
4013    title       = {Issues in the Efficient Implementation and Use of Multiprocessing in {Algol} 68},
4014    booktitle   = {Proceedings of the 5th Annual iii Conference},
4015    address     = {Guidel, France},
4016    month       = may,
4017    year        = 1977,
4018    pages       = {203-221}
4019}
4020
4021@inproceedings{Miller97,
4022    keywords    = {exception handling, software-engineering},
4023    contributer = {pabuhr@plg},
4024    author      = {Robert Miller and Anand Tripathi},
4025    title       = {Issues with Exception Hnadling in Object-Oriented Systems},
4026    booktitle   = {ECOOP'97},
4027    publisher   = {Springer},
4028    volume      = 1241,
4029    series      = {Lecture Notes in Computer Science},
4030    year        = 1997,
4031    pages       = {85-103}
4032}
4033   
4034@article{Murer96,
4035    keywords    = {interators, generators, cursors},
4036    contributer = {pabuhr@plg},
4037    author      = {Stephan Murer and Stephen Omohundro and David Stoutamire and Clemens Szyperski},
4038    title       = {Iteration Abstraction in Sather},
4039    journal     = toplas,
4040    month       = jan,
4041    year        = 1996,
4042    volume      = 18,
4043    number      = 1,
4044    pages       = {1-15},
4045}
4046
4047% J
4048                 
4049@book{Java,
4050    keywords    = {Java},
4051    contributer = {pabuhr@plg},
4052    author      = {James Gosling and Bill Joy and Guy Steele and Gilad Bracha},
4053    title       = {The {Java} Language Specification},
4054    publisher   = {Addison-Wesley},
4055    address     = {Reading},
4056    year        = 2000,
4057    edition     = {2nd},
4058}
4059
4060@manual{Java8,
4061    keywords    = {Java SE 8},
4062    contributer = {pabuhr@plg},
4063    author      = {James Gosling and Bill Joy and Guy Steele and Gilad Bracha and Alex Buckley},
4064    title       = {{Java} Language Specification},
4065    publisher   = {Oracle},
4066    year        = 2015,
4067    edition     = {{J}ava {SE} 8},
4068}
4069
4070@manual{Java11,
4071    keywords    = {Java SE 11},
4072    contributer = {pabuhr@plg},
4073    author      = {James Gosling and Bill Joy and Guy Steele and Gilad Bracha and Alex Buckley and Daniel Smith},
4074    title       = {{Java} Language Specification},
4075    publisher   = {Oracle},
4076    month       = sep,
4077    year        = 2018,
4078    edition     = {{J}ava {SE} 11},
4079}
4080
4081@manual{JDK1.1,
4082    keywords    = {JDK 1.1},
4083    contributer = {pabuhr@plg},
4084    author      = {{Multithreading Models}},
4085    title       = {JDK 1.1 for Solaris Developer's Guide},
4086    publisher   = {Oracle},
4087    address     = {\href{https://docs.oracle.com/cd/E19455-01/806-3461/6jck06gqk/index.html#ch2mt-41}{https://\-docs.oracle.com/\-cd/\-E19455-01/\-806-3461/\-6jck06gqk/\-index.html\#ch2mt-41}},
4088    year        = 2010,
4089}
4090
4091@manual{JUC,
4092    keywords    = {Java concurrency library},
4093    contributer = {pabuhr@plg},
4094    title       = {java.util.concurrency},
4095    author      = {Doug Lea},
4096    organization= {Oracle},
4097    year        = 2014,
4098    note        = {\href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html}{http://docs.oracle.com/\-javase/7/\-docs/\-api/\-java/\-util/\-concurrent/\-package-summary.html}},
4099}
4100
4101% K
4102
4103@inproceedings{Buhr96b,
4104    author      = {Peter A. Buhr and Martin Karsten and Jun Shih},
4105    title       = {{\small\textsf{KDB}}: A Multi-threaded Debugger for Multi-threaded Applications},
4106    booktitle   = {Proc. of SPDT'96: SIGMETRICS Symp. on Parallel and Distributed Tools},
4107    publisher   = {ACM Press},
4108    address     = {Philadelphia, Pennsylvania, U.S.A.},
4109    month       = may,
4110    year        = 1996,
4111    pages       = {80-87},
4112}
4113
4114@article{Duggan96,
4115    keywords    = {concurrency, critical section},
4116    contributer = {pabuhr@plg},
4117    author      = {Dominic Duggan and Gordon V. Cormack and John Ophel},
4118    title       = {Kinded Type Inference for Parametric Overloading},
4119    journal     = acta,
4120    volume      = 33,
4121    number      = 1,
4122    year        = 1996,
4123    pages       = {21-68},
4124}
4125
4126@article{Peter35,
4127    keywords    = {recursion, Ackermann function},
4128    contributer = {pabuhr@plg},
4129    author      = {R{\'{o}}zsa P{\'{e}}ter},
4130    title       = {Konstruktion nichtrekursiver Funktionen},
4131    publisher   = {Springer},
4132    journal     = mathann,
4133    number      = 111,
4134    volume      = 1,
4135    pages       = {42-60},
4136    month       = dec,
4137    year        = 1935,
4138}
4139
4140% L
4141
4142@TechReport{WVWR88:L,
4143    contributer = {gjditchf@plg},
4144    author      = {Hanno Wupper and Jan Vytopil and Martin Wieczorek and Dick de Reus},
4145    title       = {{L}_{3333}: A Simple Language with Static Typing of Hard Real-Time Constraints},
4146    institution = {Department of Informatics, Faculty of Science, Catholic University Nijmegen},
4147    year        = 1988,
4148    number      = {88-3},
4149    address     = {Katholieke Universiteit Nijmegen, Fakulteit der Wiskunde
4150                   en Natuurwetenschappen, Infomatica V, Toernooiveld, 6512
4151                   ED Nijmegen, The Netherlands},
4152    month       = apr,
4153    annote      = {A polymorphic typed lambda calculus with \begin{itemize}
4154                   \item A trivial type, ``!'', with a single element.
4155                   \item Labelled types, distinct from each other.
4156                   ``!False'' and ``!True'' are distinct types, each
4157                   containing a single value serving as boolean false and
4158                   true.  ``2'' is an abbreviation for ``!0 succ succ'', the
4159                   type containing only 2.
4160                   \item Disjunction types ``\{| !False, !True |\}''.  Interval
4161                   types are abbreviations for disjunctions.
4162                   \item Conjunction types ``\{\& real Re, real Im \&\}'', where
4163                   ``Re'' and ``Im'' are type labels that distinguish between the
4164                   fields.
4165                   \item Pair types ``\{^ a, b ^\}'', for use in recursive types
4166                   and dyadic infix functions.
4167                   \item Function types, universal types, existential types,
4168                   and subtyping (viewed as coercion), as in Fun.
4169                   \end{itemize}
4170                   Disjunctions and conjunctions types are associative and
4171                   commutative (i.e. flat).  Each type has a matching
4172                   constructor.  Functions use pattern matching on type
4173                   labels to strip labels and extract conjunction fields:
4174                   \begin{verbatim}
4175                   \lambda n {0...1000000 Guilders}. ... n ...
4176                   -- both argument and n are amounts in Guilders.
4177                   \lambda n {0...1000000} Guilders. ... n ...
4178                   -- argument in Guilders, but n is in 0...1000000.
4179                   \end{verbatim}
4180                   ``Function bundles'' (conjunctions of functions), applied
4181                   to arguments, replace Dijkstra's guarded if...fi, but the
4182                   bundles are first-class and the guards are part of their
4183                   type.
4184
4185                   The same trick used to define the type ``2'' is used to
4186                   move absolute times into the type system, to allow static
4187                   checking. ``0`'' denotes a time before the system begins
4188                   execution.  ``\#`'' denotes ``eventually'', and ``?`''
4189                   denotes ``maybe never''.  ``a\\t'' and ``a@t'' are types
4190                   of a value of type a that will be available no later
4191                   (earlier) than time t.  Universals and existentials use
4192                   subtyping to parameterize functions by start time:
4193                   \begin{verbatim}
4194                   let f {\forall t > \#`}. {a\t} \on {b\t+d}
4195                   f{then} y -- argument y must be available at time ``then''.
4196                   \end{verbatim}
4197                   Functions can return before their arguments are available
4198                   if they don't use them.  However, function {\em bundles}
4199                   can't return until their result type is known, so the
4200                   lower and upper time bounds of the bundle are the
4201                   second-last upper bound of the component functions: at
4202                   that time, there is only one alternative left.
4203
4204                   Explicit time parameterization allows slack in time
4205                   specification.  Tools could point out slack or determine
4206                   degree of parallelism.}
4207}
4208
4209@mastersthesis{Clarke90,
4210    keywords    = {concurrency, postponing requests},
4211    contributer = {pabuhr@plg},
4212    author      = {Charles L. A. Clarke},
4213    title       = {Language and Compiler Support for Synchronous Message Passing Architectures},
4214    school      = {University of Waterloo},
4215    year        = 1990,
4216    address     = {Waterloo, Ontario, Canada, N2L 3G1}
4217}
4218
4219@article{Tennent77,
4220    keywords    = {abstraction, correspondence, Pascal},
4221    contributer = {gjditchfield@plg},
4222    author      = {R. D. Tennent},
4223    title       = {Language Design Methods Based on Semantic Principles},
4224    journal     = acta,
4225    year        = 1977,
4226    volume      = 8,
4227    number      = 2,
4228    pages       = {97-112},
4229    note        = {reprinted in \cite{pldesign}},
4230    abstract    = {
4231        Two language design methods based on principles derived from the
4232        denotational approach to programming language semantics are
4233        described and illustrated by an application to the language Pascal.
4234        The principles are, firstly, the correspondence between parametric
4235        and declarative mechanisms and secondly, a principle of abstraction
4236        for programming languages adapted from set theory.  Several useful
4237        extensions and generalizations of Pascal emerge by applying these
4238        principles, including a solution to the array parameter problem,
4239        and a modularization facility.
4240    },
4241}
4242
4243@article{Liskov86,
4244    keywords    = {synchronous communication, concurrency},
4245    contributer = {pabuhr@plg},
4246    author      = {Barbara Liskov and Maurice Kerlihy and Lucy Gilbert},
4247    title       = {Limitations of Synchronous Communication with Static
4248                   Process Structure in Languages for Distributed Computing},
4249    journal     = {},
4250    volume      = {},
4251    number      = {},
4252    month       = {},
4253    year        = {},
4254    pages       = {},
4255}
4256
4257@article{Linda,
4258    keywords    = {Linda, concurrency},
4259    contributer = {pabuhr@plg},
4260    author      = {Nicholas Carriero and David Gelernter},
4261    title       = {Linda in Context},
4262    journal     = cacm,
4263    volume      = 32,
4264    number      = 4,
4265    month       = apr,
4266    year        = 1989,
4267    pages       = {444-458}
4268}
4269
4270@manual{libmill,
4271    keywords    = {libmill},
4272    contributer = {pabuhr@plg},
4273    author      = {libmill},
4274    title       = {{G}o-style concurrency in {C}, Version 1.18},
4275    organization= {libmill},
4276    address     = {\href{http://libmill.org/documentation.html}{http://\-libmill.org/\-documentation.html}},
4277    month       = jan,
4278    year        = 2017,
4279}
4280
4281@book{Weissman67,
4282    keywords    = {lisp},
4283    author      = {Clark Weissman},
4284    title       = {Lisp 1.5 Primer},
4285    publisher   = {Dickenson Publishing},
4286    address     = {Belmont},
4287    year        = 1967,
4288}
4289
4290@article{Pierce00,
4291 keywords = {Scala},
4292 contributer = {a3moss@uwaterloo.ca},
4293 author = {Pierce, Benjamin C. and Turner, David N.},
4294 title = {Local Type Inference},
4295 journal = {ACM Trans. Program. Lang. Syst.},
4296 issue_date = {Jan. 2000},
4297 volume = {22},
4298 number = {1},
4299 month = jan,
4300 year = {2000},
4301 issn = {0164-0925},
4302 pages = {1--44},
4303 numpages = {44},
4304 url = {http://doi.acm.org/10.1145/345099.345100},
4305 doi = {10.1145/345099.345100},
4306 acmid = {345100},
4307 publisher = {ACM},
4308 address = {New York, NY, USA},
4309 keywords = {polymorphism, subtyping, type inference},
4310} 
4311
4312@article{Sundell08,
4313    keywords    = {lock free, deque},
4314    contributer = {pabuhr@plg},
4315    author      = {H{\r{a}}kan Sundell and Philippas Tsigas},
4316    title       = {Lock-free Deques and Doubly Linked Lists},
4317    journal     = {J. Parallel Distrib. Comput.},
4318    volume      = 68,
4319    number      = 7,
4320    year        = 2008,
4321    pages       = {1008-1020},
4322}
4323
4324@misc{Matsakis17,
4325    keywords    = {Rust, Chalk, PROLOG},
4326    contributer = {a3moss@uwaterloo.ca},
4327    author      = {Nicholas Matsakis},
4328    title       = {Lowering {Rust} traits to logic},
4329    month       = jan,
4330    year        = 2017,
4331    howpublished= {\href{http://smallcultfollowing.com/babysteps/blog/2017/01/26/lowering-rust-traits-to-logic/}
4332                  {http://smallcultfollowing.com/\-babysteps/\-blog/\-2017/\-01/\-26/\-lowering-rust-traits-to-logic/}},
4333    optnote     = {Accessed: 2019-01},
4334}
4335
4336@article{Cormack89,
4337    keywords    = {parsing, LR, error recovery},
4338    contributer = {pabuhr@plg},
4339    author      = {Gordon V. Cormack},
4340    title       = {An {LR} Substring Parser for Noncorrecting Syntax Error Recovery},
4341    journal     = sigplan,
4342    volume      = 24,
4343    number      = 7,
4344    month       = jul,
4345    year        = 1989,
4346    pages       = {161-169},
4347    note        = {Proceedings of the {SIGPLAN}~'89 Conference on Programming Language Design and Implementation}
4348}
4349
4350@manual{Lua,
4351    keywords    = {Lua},
4352    contributer = {pabuhr@plg},
4353    author      = {Lua},
4354    title       = {Lua 5.3 Reference Manual},
4355    address     = {\href{https://www.lua.org/manual/5.3}{https://\-www.lua.org/\-manual/\-5.3}},
4356    year        = 2018,
4357}
4358
4359% M
4360
4361@book{M68K,
4362    keywords    = {M680XX, Motorola},
4363    contributer = {pabuhr@plg},
4364    key         = {Motorola},
4365    title       = {M68000 Family Programmer's Reference Manual},
4366    publisher   = {Motorola},
4367    year        = 1992,
4368}
4369
4370@misc{Haberman16,
4371    keywords    = {C++ template expansion},
4372    contributer = {a3moss@uwaterloo.ca},
4373    author      = {Josh Haberman},
4374    title       = {Making arbitrarily-large binaries from fixed-size {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} code},
4375    year        = 2016,
4376    howpublished= {\href{http://blog.reverberate.org/2016/01/making-arbitrarily-large-binaries-from.html}
4377                  {
4378          {http://blog.reverberate.org/\-2016/\-01/\-making-arbitrarily-large-binaries-from.html}
4379          }},
4380    optnote     = {Accessed: 2016-09},
4381}
4382
4383@article{c++libs,
4384    keywords    = {directory structure},
4385    contributer = {gjditchfield@plg},
4386    author      = {J. M. Coggins and G. Bollella},
4387    title       = {Managing {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Libraries},
4388    journal     = sigplan,
4389    year        = 1989,
4390    month       = jun, volume = 24, number = 6, pages = {37-48},
4391    abstract    = {
4392        This paper describes a scheme we have used to manage a large
4393        library written in the C++ language.  The scheme imposes a
4394        directory structure, and represents dependency hierarchy in a
4395        globally accessible file we call the 'prelude' file.  We also
4396        discuss the structure of the description files (makefiles) used
4397        with the UNIX options we have found to be useful in reducing the
4398        size of the library, and how to minimize recompilation time after
4399        trivial changes to the source code of the library.
4400    }
4401}
4402
4403@inproceedings{mprof,
4404    keywords    = {malloc},
4405    contributer = {gjditchfield@plg},
4406    author      = {Benjamin Zorn and Paul Hilfinger},
4407    title       = {A Memory Allocation Profiler for {C} and Lisp Programs},
4408    booktitle   = {Summer 1988 {USENIX} proceedings},
4409    year        = 1988
4410}
4411
4412@manual{MMTk,
4413    keywords    = {Java memory management},
4414    contributer = {pabuhr@plg},
4415    title       = {MMTk: The Memory Management Toolkit},
4416    author      = {Steve Blackburn and Robin Garner and Daniel Frampton},
4417    month       = sep,
4418    year        = 2006,
4419    note        = {\textsf{http://cs.anu.edu.au/\-$\sim$Robin.Garner/\-mmtk-guide.pdf}},
4420}
4421
4422@article{Adve10,
4423    keywords    = {Java memory management},
4424    contributer = {pabuhr@plg},
4425    author      = {Sarita V. Adve and Hans-J. Boehm},
4426    title       = {Memory Models: A Case for Rethinking Parallel Languages and Hardware},
4427    journal     = cacm,
4428    volume      = 53,
4429    number      = 8,
4430    month       = aug,
4431    year        = 2010,
4432    pages       = {90-101},
4433    publisher   = {ACM},
4434    address     = {New York, NY, USA},
4435}
4436@techreport{Mesa,
4437    keywords    = {monitors, packages},
4438    contributer = {pabuhr@plg},
4439    author      = {James G. Mitchell and William Maybury and Richard Sweet},
4440    title       = {Mesa Language Manual},
4441    institution = {Xerox Palo Alto Research Center},
4442    number      = {CSL--79--3},
4443    month       = apr,
4444    year        = 1979
4445}
4446
4447@article{Andrews89,
4448    keywords    = {semaphore, split-binary, baton},
4449    contributer = {pabuhr@plg},
4450    author      = {Gregory R. Andrews},
4451    title       = {A Method for Solving Synronization Problems},
4452    journal     = scp,
4453    volume      = 13,
4454    number      = 4,
4455    month       = dec,
4456    year        = 1989,
4457    pages       = {1-21},
4458}
4459
4460@inproceedings{Mitchell78,
4461    keywords    = {Mesa},
4462    contributer = {pabuhr@plg},
4463    author      = {James G. Mitchell},
4464    title       = {Mesa: A Designer's User Perspective},
4465    booktitle   = {Spring CompCom 78},
4466    organization= {Sixteenth IEEE Computer Society International Conference},
4467    address     = {San Francisco, California, U.S.A.},
4468    month       = feb,
4469    year        = 1978,
4470    pages       = {36-39},
4471    note        = {IEEE Catalog No. 78CH1328-4C},
4472}
4473
4474@article{Gentleman81,
4475    keywords    = {messages, concurrency},
4476    contributer = {pabuhr@plg},
4477    author      = {W. Morven Gentleman},
4478    title       = {Message Passing between Sequential Processes:
4479                   the Reply Primitive and the Administrator Concept},
4480    journal     = spe,
4481    month       = may,
4482    year        = 1981,
4483    volume      = 11,
4484    number      = 5,
4485    pages       = {435-466}
4486}
4487
4488@article{Cormack88,
4489    keywords    = {concurrency},
4490    contributer = {pabuhr@plg},
4491    author      = {G. V. Cormack},
4492    title       = {A Micro Kernel for Concurrency in C},
4493    journal     = spe,
4494    month       = may,
4495    year        = 1988,
4496    volume      = 18,
4497    number      = 4,
4498    pages       = {485-491}
4499}
4500
4501@article{Buhr90a,
4502    keywords    = {concurrency, light-weight process, shared memory},
4503    contributer = {pabuhr@plg},
4504    author      = {Peter A. Buhr and Richard A. Stroobosscher},
4505    title       = {The $\mu${S}ystem: Providing Light-Weight Concurrency on Shared-Memory Multiprocessor Computers Running {UNIX}},
4506    journal     = spe,
4507    volume      = 20,
4508    number      = 9,
4509    month       = sep,
4510    year        = 1990,
4511    pages       = {929-963},
4512}
4513
4514@techreport{uSystem,
4515    keywords    = {C, concurrency, light-weight process, shared memory},
4516    contributer = {pabuhr@plg},
4517    author      = {Peter A. Buhr and Hamish I. Macdonald and Richard A. Stroobosscher},
4518    title       = {$\mu${S}ystem Annotated Reference Manual, Version 4.4.3},
4519    institution = {Department of Computer Science, University of Waterloo},
4520    address     = {Waterloo, Ontario, Canada, N2L 3G1},
4521    month       = sep,
4522    year        = 1994,
4523    note        = {\href{https://plg.uwaterloo.ca/~usystem/pub/uSystem/uSystem.pdf}{https://\-plg.uwaterloo.ca/\-$\sim$usystem/\-pub/\-uSystem/\-uSystem.pdf}},
4524}
4525
4526@book{Mips4000,
4527    key         = {Mips4000},
4528    title       = {MIPS R4000 Microprocessor User's Manual},
4529    publisher   = {MIPS Computer Systems Inc},
4530    year        = 1991,
4531}
4532
4533@inproceedings{Mjolner,
4534    keywords    = {Mjolner, hierarchical windows},
4535    contributer = {pabuhr@plg},
4536    author      = {G\"{o}rel Hedin and Boris Magnusson},
4537    title       = {The Mj{\o}lner Environment: Direct Interaction with Abstractions},
4538    booktitle   = {Proceedings of the European Conference on Object Oriented Programming},
4539    organization= {ECOOP'88},
4540    publisher   = {Springer},
4541    volume      = 322,
4542    editor      = {S. Gjessing and K. Nygaard},
4543    address     = {Oslo, Norway},
4544    month       = aug,
4545    year        = 1988,
4546    pages       = {41-54},
4547    note        = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis},
4548}
4549
4550@article{Skillicorn98,
4551    keywords    = {parallel models},
4552    contributer = {pabuhr@plg},
4553    author      = {David B. Skillicorn and Domenico Talia},
4554    title       = {Models and Languages for Parallel Computation},
4555    journal     = acmcs,
4556    volume      = 30,
4557    number      = 2,
4558    month       = jun,
4559    year        = 1998,
4560    pages       = {123-169},
4561}
4562
4563@article{Werther96,
4564    keywords    = {C++, language syntax},
4565    contributer = {pabuhr@plg},
4566    author      = {Ben Werther and Damian Conway},
4567    title       = {A Modest Proposal: {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Resyntaxed},
4568    journal     = sigplan,
4569    volume      = 31,
4570    number      = 11,
4571    month       = nov,
4572    year        = 1996,
4573    pages       = {74-82},
4574}
4575
4576@book{Alexandrescu01,
4577    keywords    = {c design-patterns programming},
4578    contributer = {pabuhr@plg},
4579    author      = {Andrei Alexandrescu},
4580    title       = {Modern C++ Design: Generic Programming and Design Patterns Applied},
4581    publisher   = {Addison-Wesley Professional},
4582    address     = {Boston},
4583    month       = feb,
4584    year        = 2001,
4585    isbn        = {0201704315},
4586}
4587
4588@book{Tanenbaum92,
4589    keywords    = {concurrency, operating systems},
4590    contributer = {pabuhr@plg},
4591    author      = {Andrew S. Tanenbaum},
4592    title       = {Modern Operating Systems},
4593    publisher   = {Prentice-Hall},
4594    address     = {Englewood Cliffs},
4595    year        = 1992,
4596}
4597
4598@article{Wirth77,
4599    keywords    = {modules, coroutines},
4600    contributer = {pabuhr},
4601    author      = {Niklaus Wirth},
4602    title       = {Modula: a Language for Modular Multiprogramming},
4603    journal     = spe,
4604    month       = {January--February},
4605    year        = 1977,
4606    volume      = 7,
4607    number      = 1,
4608    pages       = {3-35},
4609}
4610
4611@book{Harbison92,
4612    contributer = {mhcoffin},
4613    author      = {Samuel P. Harbison},
4614    title       = {Modula-3},
4615    publisher   = {Prentise Hall, Inc.},
4616    year        = {1992},
4617    comment     = {This is a textbook for learning Modula-3.}
4618}
4619
4620@techreport{Modula-3:old,
4621    keywords    = {Modula-3, inheritance, type extension},
4622    contributer = {gjditchfield@plg},
4623    author      = {Luca Cardelli and James Donahue and Lucille Glassman and Mick
4624                   Jordan and Bill Kalsow and Greg Nelson},
4625    title       = {Modula-3 Report},
4626    institution = {Systems Research Center},
4627    address     = {130 Lytton Avenue, Palo Alto, California  94301},
4628    month       = aug,
4629    year        = 1988,
4630    number      = 31
4631}
4632 
4633@article{Dueck90,
4634    keywords    = {attribute grammars},
4635    contributer = {pabuhr@plg},
4636    author      = {Gerald D. P. Dueck and Gordon V. Cormack},
4637    title       = {Modular Attribute Grammars},
4638    journal     = {The Computer Journal},
4639    month       = apr,
4640    year        = 1990,
4641    volume      = 33,
4642    number      = 2,
4643    pages       = {164-172},
4644}
4645
4646@article{Yemini85,
4647    keywords    = {exception handling},
4648    contributer = {pabuhr@plg},
4649    author      = {Shaula Yemini and Daniel M. Berry},
4650    title       = {A Modular Verifiable Exception-Handling Mechanism},
4651    journal     = toplas,
4652    month       = apr,
4653    year        = 1985,
4654    volume      = 7,
4655    number      = 2,
4656    pages       = {214-243},
4657}
4658
4659@article{Buhr95b,
4660    keywords    = {concurrency, monitors, classification},
4661    contributer = {pabuhr@plg},
4662    author      = {Peter A. Buhr and Michel Fortier and Michael H. Coffin},
4663    title       = {Monitor Classification},
4664    journal     = acmcs,
4665    volume      = 27,
4666    number      = 1,
4667    month       = mar,
4668    year        = 1995,
4669    pages       = {63-107},
4670}
4671
4672@article{Hoare74,
4673    keywords    = {monitor},
4674    contributer = {pabuhr@plg},
4675    author      = {C. A. R. Hoare},
4676    title       = {Monitors: An Operating System Structuring Concept},
4677    journal     = cacm,
4678    volume      = 17,
4679    number      = 10,
4680    month       = oct,
4681    year        = 1974,
4682    pages       = {549-557},
4683    annote      = {
4684    }
4685}
4686
4687@inbook{Buhr99a,
4688    keywords    = {concurrency, monitors, classification},
4689    contributer = {pabuhr@plg},
4690    author      = {Peter A. Buhr and Michel Fortier and Michael H. Coffin},
4691    title       = {Encyclopedia of Computer Science and Technology},
4692    chapter     = {Monitor Taxonomy},
4693    publisher   = {Marcel Dekker, Inc},
4694    volume      = {40, supplement 25},
4695    year        = 1999,
4696    pages       = {191-212},
4697}
4698%    editor     = {Allen Kent and James G. Williams},
4699
4700@incollection{MPC,
4701    keywords    = {user-level threading},
4702    contributer = {pabuhr@plg},
4703    author      = {Marc P\'erache and Herv\'e Jourdren and Raymond Namyst},
4704    title       = {MPC: A Unified Parallel Runtime for Clusters of {NUMA} Machines},
4705    booktitle   = {Euro-Par 2008},
4706    pages       = {329-342},
4707    publisher   = {Springer},
4708    address     = {Berlin, Heidelberg},
4709    year        = 2008,
4710    volume      = 5168,
4711    series      = {Lecture Notes in Computer Science},
4712}
4713
4714@manual{MPI,
4715    keywords    = {MPI},
4716    contributer = {pabuhr@plg},
4717    title       = {MPI: A Message-Passing Interface Standard, Version 3.1},
4718    organization= {Message Passing Interface Forum},
4719    address     = {University of Tennessee, Knoxville, Tennessee},
4720    month       = jun,
4721    year        = 2015,
4722    note        = {\href{http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf}{http://www.mpi-forum.org/\-docs/\-mpi-3.1/\-mpi31-report.pdf}},
4723}
4724
4725@article{multilisp,
4726    keywords    = {futures, scheme},
4727    contributer = {gjditchfield@plg},
4728    author      = {Halstead, Jr.,Robert H.},
4729    title       = {Multilisp: A Language for Concurrent Symbolic Programming},
4730    journal     = toplas,
4731    volume      = 7,
4732    number      = 4,
4733    pages       = {501-538},
4734    month       = oct,
4735    year        = 1985,
4736    comment     = {
4737        (future E) begins evaluating the expression E, and
4738        returns a ``future'' representing the value.  When evaluation is
4739        finished, the value of E replaces the future.  Operations that need
4740        the future's value suspend until it is available.  Assignment and
4741        parameter passing do not suspend.  Future introduces concurrency
4742        between the calculation of a value and its use; reference to
4743        futures is a synchronization mechanism.
4744
4745        (pcall F A B ... C) concurrently evaluates F, A, B, ... C, and then
4746        applies F to the arguments.  pcall can be built from future and a
4747        ``touch'' operation.  pcall is included because it may not be easy
4748        to determine that there are no critical sections between the future
4749        expression and the code between the future call and the value's
4750        first use.
4751
4752        (delay E) is like future, but E's process does not begin until its
4753        value is needed.  It provides lazy evaluation.  Replacing delay
4754        with future would launch an infinite number of processes.
4755    }
4756}
4757
4758@techreport{Bretthauer89,
4759    keywords    = {multiple inheritance},
4760    contributer = {pabuhr@plg},
4761    author      = {Harry Bretthauer and Thomas Christaller and J\"{u}rgen Kopp}, 
4762    title       = {Multiple vs. Single Inheritance in Object-oriented Programming Languages. What do we really want?},
4763    institution = {Gesellschaft F\"{u}r Mathematik und Datenverarbeitung mbH},
4764    address     = {Schlo$\beta$ Birlinghoven, Postfach 12 40, D-5205 Sankt Augustin 1, Deutschland},
4765    number      = {Arbeitspapiere der GMD 415},
4766    month       = nov,
4767    year        = 1989,
4768}
4769
4770@inproceedings{c++:multinh,
4771    keywords    = {C++, multiple inheritance, implementation},
4772    contributer = {gjditchfield@plg},
4773    author      = {Bjarne Stroustrup},
4774    title       = {Multiple Inheritance for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
4775    booktitle   = {Proceedings of the Spring '87 EUUG Conference},
4776    month       = may, year = 1987
4777}
4778
4779@inproceedings{st:mult,
4780    keywords    = {smalltalk, multiple inheritance, implementation},
4781    contributer = {gjditchfield@plg},
4782    author      = {Daniel H. H. Ingalls and A. H. Borning},
4783    title       = {Multiple Inheritance in Smalltalk-80},
4784    booktitle   = {Proceedings of the National Conference on Artificial Intelligence},
4785    month       = aug,
4786    year        = 1982,
4787    pages       = {234-238},
4788    organization= {American Association for Artificial Intelligence},
4789    comment     = {
4790        Methods are looked up in the current class, the superclasses, the
4791        supersuperclasses, etc.  The same method can be inherited
4792        repeatedly, but having different methods for the same message is an
4793        error.  Only one copy is made for multiply-inherited fields.
4794
4795        {\tt X.m} is the method m in superclass X.  {\tt super.m} is
4796        allowed if there is no ambiguity; {\tt self super.m} replaces {\tt
4797        super m}.  {\tt all.m} invokes all inherited versions of m.
4798
4799        Methods on the first-superclass chain are found as usual.  Methods
4800        from other superclasses are copied into the class dictionary.  An
4801        error method is created if inherited methods conflict.  The parser
4802        is changed to allow compound selectors.  {\tt Object
4803        messageNotUnderstood} is changed to look for compound selectors and
4804        dynamically add a method with the right name and body to the class.
4805        When methods are edited, they are copied into subclasses and
4806        compound selector versions are deleted, as appropriate.
4807    }
4808}
4809
4810@article{Lamport86I,
4811    keywords    = {software solutions, N-thread, mutual exclusions},
4812    contributer = {pabuhr@plg},
4813    author      = {Leslie Lamport},
4814    title       = {The Mutual Exclusion Problem: Part\,{I}--A Theory of Interprocess Communication},
4815    journal     = jacm,
4816    volume      = 33,
4817    number      = 2,
4818    month       = apr,
4819    year        = 1986,
4820    pages       = {313--326},
4821    numpages    = {14},
4822    publisher   = {ACM},
4823    address     = {New York, NY, USA},
4824}
4825
4826@article{Lamport86II,
4827    keywords    = {software solutions, N-thread, mutual exclusions},
4828    contributer = {pabuhr@plg},
4829    author      = {Leslie Lamport},
4830    title       = {The Mutual Exclusion Problem: Part\,{II}--Statement and Solutions},
4831    journal     = jacm,
4832    volume      = 33,
4833    number      = 2,
4834    month       = apr,
4835    year        = 1986,
4836    pages       = {327--348},
4837    numpages    = {22},
4838    publisher   = {ACM},
4839    address     = {New York, NY, USA},
4840}
4841
4842@article{Burns78,
4843    keywords    = {hardware, N-process solution, O(N)},
4844    contributer = {pabuhr@plg},
4845    author      = {James E. Burns},
4846    title       = {Mutual Exclusion with Linear Waiting Using Binary Shared Variables},
4847    journal     = {SIGACT News},
4848    volume      = 10,
4849    number      = 2,
4850    month       = {Summer},
4851    year        = 1978,
4852    pages       = {42-47},
4853}
4854
4855@inproceedings{Burns80,
4856    keywords    = {N-process software solution},
4857    contributer = {pabuhr@plg},
4858    author      = {James E. Burns and Nancy A. Lynch},
4859    title       = {Mutual Exclusion using Indivisible Reads and Writes},
4860    booktitle   = {Proceedings of the 18th Annual Allerton Conference on Communications, Control and Computing, Monticello, Illinois, USA},
4861    year        = 1980,
4862    pages       = {833-842},
4863    note        = {\href{http://groups.csail.mit.edu/tds/papers/Lynch/allertonconf.pdf}{http://\-groups.csail.mit.edu/\-tds/\-papers/\-Lynch/\-allertonconf.pdf} [Accessed on March 2014]},
4864    optnote     = {\textsf{http://\-groups.csail.mit.edu/\-tds/\-papers/\-Lynch/\-allertonconf.pdf}},
4865}
4866
4867@article{Peterson81,
4868    keywords    = {concurrency, critical section},
4869    contributer = {pabuhr@plg},
4870    author      = {G. L. Peterson},
4871    title       = {Myths About the Mutual Exclusion Problem},
4872    journal     = ipl,
4873    year        = 1981,
4874    month       = jun,
4875    volume      = 12,
4876    number      = 3,
4877    pages       = {115-116},
4878}
4879
4880% N
4881
4882@techreport{Drepper03,
4883    keywords    = {NPTL, threading, 1:1 model},
4884    contributer = {pabuhr@plg},
4885    author      = {Ulrich Drepper and Ingo Molnar},
4886    title       = {The Native POSIX Thread Library for Linux},
4887    institution = {Red Hat},
4888    year        = 2003,
4889    note        = {\href{http://www.cs.utexas.edu/~witchel/372/lectures/POSIX_Linux_Threading.pdf}{http://www.cs.utexas.edu/\-$\sim$witchel/\-372/\-lectures/\-POSIX\_Linux\_Threading.pdf}},
4890}
4891
4892@article{Haddon77,
4893    keywords    = {monitors, nested monitor calls},
4894    contributer = {pabuhr@plg},
4895    author      = {Bruce K. Haddon},
4896    title       = {Nested Monitor Calls},
4897    journal     = osr,
4898    volume      = 11,
4899    number      = 4,
4900    month       = oct,
4901    year        = 1977,
4902    pages       = {18-23},
4903}
4904
4905@inproceedings{nesting,
4906    keywords    = {},
4907    contributer = {gjditchfield@plg},
4908    author      = {Lori A. Clarke and Jack C. Wilenden and Alexander L. Wolf},
4909    title       = {Nesting in {Ada} Programs is for the Birds},
4910    booktitle   = {Proceedings of the ACM-SIGPLAN Symposium on the {Ada}
4911        Programming Language},
4912    year        = 1980,
4913    month       = dec, pages = {139-145},
4914    note        = {SIGPLAN Notices, v. 15, n. 11},
4915    abstract    = {
4916        Given a data abstraction construct like the Ada package and in the
4917        light of current thoughts on programming methodology, we feel that
4918        nesting is an anachronism.  In this paper we propose a nest-free
4919        program style for Ada that eschews nested program units and
4920        declarations within blocks and instead heavily utilizes packages
4921        and context specifications as mechanisms for controlling
4922        visibility.  We view this proposal as a first step toward the
4923        development of programming methods that exploit the novel language
4924        features available in Ada.  Consideration of this proposal's
4925        ramifications for data flow, control flow, and overall program
4926        structure substantiates our contention that a tree structure is
4927        seldom a natural representation of a program and that nesting
4928        therefore generally interferes with program development and
4929        readability.
4930    }
4931}
4932
4933@inproceedings{Buhr88,
4934    keywords    = {nested classes, persistence},
4935    contributer = {pabuhr@plg},
4936    author      = {P. A. Buhr and C. R. Zarnke},
4937    title       = {Nesting in an Object Oriented Language is NOT for the Birds},
4938    booktitle   = {Proceedings of the European Conference on Object Oriented Programming},
4939    publisher   = {Springer},
4940    volume      = 322,
4941    editor      = {S. Gjessing and K. Nygaard},
4942    address     = {Oslo, Norway},
4943    month       = aug,
4944    year        = 1988,
4945    pages       = {128-145},
4946    note        = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis},
4947}
4948
4949@inproceedings{Thompson90new,
4950    keywords    = {Plan 9},
4951    contributer = {pabuhr@plg},
4952    title       = {A New {C} Compiler},
4953    author      = {Ken Thompson},
4954    booktitle   = {Proceedings of the Summer 1990 UKUUG Conference},
4955    year        = 1990,
4956    pages       = {41-51},
4957    note        = {\href{http://doc.cat-v.org/bell_labs/new_c_compilers/new_c_compiler.pdf}{http://\-doc.cat-v.org/\-bell\_labs/\-new\_c\_compilers/\-new\_c\_compiler.pdf}},
4958}
4959
4960@article{Trono94,
4961    author      = {John A. Trono},
4962    title       = {A New Exercise in Concurrency},
4963    journal     = {SIGCSE Bulletin},
4964    volume      = {26},
4965    number      = {3},
4966    month       = sep,
4967    year        = {1994},
4968    pages       = {8-10},
4969    publisher   = {ACM},
4970    address     = {New York, NY, USA},
4971}
4972
4973@article{Anderson01,
4974    keywords    = {software solutions, fast path},
4975    contributer = {pabuhr@plg},
4976    author      = {James H. Anderson and Yong-Jik Kim},
4977    title       = {A New Fast-Path Mechanism For Mutual Exclusion},
4978    journal     = {Distributed Computing},
4979    month       = jan,
4980    year        = 2001,
4981    volume      = 14,
4982    number      = 1,
4983    pages       = {17-29},
4984}
4985
4986@article{Lamport74,
4987    keywords    = {concurrency, N-Process solution, O(N)},
4988    contributer = {pabuhr@plg},
4989    author      = {Leslie Lamport},
4990    title       = {A New Solution of Dijkstra's Concurrent Programming Problem},
4991    journal     = cacm,
4992    month       = aug,
4993    year        = 1974,
4994    volume      = 17,
4995    number      = 8,
4996    pages       = {453-455},
4997}
4998
4999@book{NeWS,
5000    AUTHOR      = {James Gosling and David S. H. Rosenthal and Richelle J. Arden},
5001    TITLE       = {The {NeWS} Book},
5002    PUBLISHER   = {Springer-Verlag},
5003    YEAR        = {1989}
5004}
5005
5006@article{landin,
5007    keywords    = {},
5008    contributer = {gjditchfield@plg},
5009    author      = {P. J. Landin},
5010    title       = {The Next 700 Programing Languages},
5011    journal     = cacm,
5012    year        = 1966,
5013    volume      = 9,
5014    pages       = {157-164},
5015}
5016
5017@misc{nginx,
5018    key         = {nginx},
5019    author      = {{NGINX}},
5020    howpublished= {\href{https://www.nginx.com}{https://\-www.nginx.com}},
5021}
5022
5023@article{Herlihy05,
5024    keywords    = {Multiprocessors, concurrent data structures, dynamic data structures, memory management, nonblocking synchronization},
5025    contributer = {pabuhr@plg},
5026    author      = {Maurice Herlihy and Victor Luchangco and Paul Martin and Mark Moir},
5027    title       = {Nonblocking Memory Management Support for Dynamic-sized Data Structures},
5028    journal     = tocs,
5029    volume      = 23,
5030    number      = 2,
5031    month       = may,
5032    year        = 2005,
5033    pages       = {146-196},
5034    numpages    = {51},
5035    publisher   = {ACM},
5036    address     = {New York, NY, USA},
5037}
5038
5039% O
5040
5041@inproceedings{oop:abcl/1,
5042    keywords    = {concurrency, OOPL, futures},
5043    contributer = {gjditchfield@plg},
5044    author      = {Akinori Yonezawa and Jean-Pierre Briot and Etsuya Shibayama},
5045    title       = {Object-Oriented Concurrent Programming in {ABCL/1}},
5046    crossref    = "OOPSLA86",
5047    pages       = {258-268},
5048    comment     = {
5049        Actions for messages sent to an object are executed concurrently
5050        iff the object has no members.  A select construct specifies a set
5051        of message patterns.
5052
5053        Express messages have priority.  If an express message arrives
5054        while an ordinary message is being processed, the action for the
5055        ordinary message is suspended or aborted and the action for the
5056        express message is executed.  The sender decides which class a
5057        message belongs in.  Non-interruptible sections can be defined.
5058
5059        Message sends can be non-blocking, or can block until a reply is
5060        received, at the sender's option.  The receiver can continue to
5061        execute after sending the reply.
5062
5063        Replies can send back ``futures'', and put values in them later.
5064        Futures are queues of values, not single values.  The caller can
5065        use a ``ready?'' predicate to test for empty queue, or can use
5066        operations to get the first or all queue elements; these operations
5067        block if the queue is empty.
5068    }
5069}
5070
5071@techreport{Schmidt95,
5072    keywords    = {ACE, concurrency, library},
5073    contributer = {pabuhr@plg},
5074    author      = {Douglas C. Schmidt},
5075    title       = {An OO Encapsulation of Lightweight OS Concurrency Mechanisms in the {ACE} Toolkit},
5076    institution = {Washington University in St. Louis},
5077    year        = 1995,
5078    number      = 31,
5079    note        = {{\small\textsf{http://\-www.cs.wustl.edu/\-$\sim$schmidt/\-PDF/\-IPC\_SAP-92.pdf}}},
5080}
5081
5082@inproceedings{OOEx,
5083    keywords    = {Exceptions, object-oriented programming languages},
5084    contributer = {gjditchfield@plg},
5085    author      = {Christophe Dony},
5086    title       = {An Object-oriented Exception Handling System for an Object-oriented Language},
5087    booktitle   = {ECOOP '88. European Conference on Object-Oriented Programming},
5088    year        = 1988,
5089    pages       = {146-161},
5090    editor      = {S. Gjessing and K. Nygaard},
5091    organization= {DND, The Norwegian Computer Society},
5092    publisher   = {Springer},
5093    comment     = {
5094           Objectives:
5095           - Users can define new exceptions.
5096           - Default handlers can be attached to exceptions.
5097           - Handlers can be attached to classes.
5098           - Handlers can be attached to dynamic entities (expressions).
5099           - Exceptions propagate first along the invocation chain.
5100           - Exceptions should be hierarchically organized classes.
5101           - Handlers should take into account the exception hierarchy (i.e.,
5102             should handle raising of sub-exceptions).
5103           The ``exceptional-event'' class has two subclasses.  ``Warning''
5104           has a ``resume'' method, and ``error'' has ``exit'' and
5105           ``retry'' methods.  Signalling an exception creates an instance
5106           of the exception, whose members are used to pass information
5107           back to the handler.  Handlers are instances of class
5108           ``protect-handler'' with a method ``protect {\em expression}'',
5109           or are methods defined for the class or the exception.
5110    }
5111}
5112
5113@article{CommonObjects,
5114    author      = {A. Snyder},
5115    title       = {Object-Oriented Programming for Common Lisp},
5116    address     = {Palo Alto CA},
5117    year        = 1985,
5118    publisher   = {Software Technology Laboratory, Hewlett-Packard Laboratories},
5119    journal     = {Report ATC-85-1},
5120}
5121
5122@book{objective-c,
5123    keywords    = {},
5124    author      = {Brad J. Cox},
5125    title       = {Object-oriented programming; an evolutionary approach},
5126    publisher   = {Addison-Wesley},
5127    address     = {Boston},
5128    year        = 1986
5129}
5130
5131@misc{obj-c-book,
5132    keywords    = {objective-c},
5133    contributor = {pabuhr@plg},
5134    key         = {Objective-C},
5135    author      = {Objective-C},
5136    publisher   = {Apple Inc.},
5137    year        = 2014,
5138    howpublished= {\href{https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC}{https://\-developer.apple.com/\-library/archive/\-documentation/\-Cocoa/\-Conceptual/\-ProgrammingWithObjectiveC}},
5139}
5140
5141@misc{xcode7,
5142    keywords    = {objective-c},
5143    contributor = {a3moss@uwaterloo.ca},
5144    key         = {Xcode},
5145    title       = {{X}code 7 Release Notes},
5146    year        = 2015,
5147    howpublished= {\href{https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html}{https://\-developer.apple.com/\-library/\-content/\-documentation/\-Xcode/\-Conceptual/\-RN-Xcode-Archive/\-Chapters/\-xc7\_release\_notes.html}},
5148}
5149
5150@book{Beta,
5151    keywords    = {Beta, object oriented, concurrency, exceptions},
5152    contributer = {pabuhr@plg},
5153    author      = {Ole Lehrmann Madsen and Birger M{\o}ller-Pedersen and Kristen Nygaard},
5154    title       = {Object-oriented Programming in the {BETA} Programming Language},
5155    publisher   = {Addison-Wesley},
5156    address     = {Boston},
5157    year        = 1993,
5158}
5159
5160@article{Flavors,
5161    author      = {D. A. Moon},
5162    title       = {Object-Oriented Programming with Flavors},
5163    address     = {Portland OR},
5164    month       = sep,
5165    year        = 1986,
5166    journal     = {Proc. ACM Conf. on Object-Oriented Systems, Languages and Applications},
5167}
5168
5169@article{Buhr00b,
5170    keywords    = {concurrency, C++, real-time},
5171    contributer = {pabuhr@plg},
5172    author      = {Peter A. Buhr and Ashif S. Harji and Philipp E. Lim and Jiongxiong Chen},
5173    title       = {Object-Oriented Real-Time Concurrency},
5174    journal     = sigplan,
5175    volume      = 35,
5176    number      = 10,
5177    month       = oct,
5178    year        = 2000,
5179    pages       = {29-46},
5180    note        = {OOPSLA'00, Oct. 15--19, 2000, Minneapolis, Minnesota, U.S.A.},
5181}
5182
5183@book{Meyer88,
5184    keywords    = {Eiffel},
5185    contributer = {pabuhr@plg},
5186    author      = {Bertrand Meyer},
5187    title       = {Object-oriented Software Construction},
5188    publisher   = {Prentice-Hall},
5189    address     = {Englewood Cliffs},
5190    year        = {1988},
5191    series      = {Prentice-Hall International Series in Computer Science},
5192}
5193
5194@article{objectPascal,
5195    keywords    = {objects, modules},
5196    contributer = {gjditchfield@plg},
5197    author      = {Larry Tesler},
5198    title       = {Object Pascal Report},
5199    journal     = {Structured Language World},
5200    year        = 1985,
5201    volume      = 9,
5202    number      = 3,
5203}
5204
5205@misc{obj-c:next,
5206    keywords    = {categories, protocols, Objective C},
5207    contributor = {gjditchfield@angus},
5208    author      = {NeXT Computer, Inc.},
5209    title       = {Objective C Extensions},
5210    howpublished= {On-line documentation in ``NEXTSTEP 3.1 Developer''},
5211    year        = 1993
5212}
5213
5214@book{Galletly96,
5215    keywords    = {occam},
5216    author      = {John Galletly},
5217    title       = {{OCCAM} 2: Including {OCCAM} 2.1},
5218    publisher   = {{UCL} (University College London) Press},
5219    address     = {London},
5220    edition     = {2nd},
5221    year        = 1996,
5222}
5223
5224@techreport{Morrison88,
5225    keywords    = {objects, concurrency, persistence},
5226    contributer = {pabuhr@plg},
5227    author      = {R. Morrison and A. L. Brown and R. Carrick and R. Connor and A. Dearle},
5228    title       = {On the integration of Object-Oriented and Process-Oriented computation in persistent environments},
5229    institution = {Department of Computational Science, University of St. Andrews, Scotland},
5230    number      = {PPRR 57},
5231    month       = jan,
5232    year        = 1988,
5233}
5234
5235@article{Peterson73,
5236    keywords    = {goto, structured programming},
5237    contributer = {pabuhr@plg},
5238    author      = {W. W. Peterson and T. Kasami and N. Tokura},
5239    title       = {On the Capabilities of While, Repeat, and Exit Statements},
5240    journal     = cacm,
5241    month       = aug,
5242    year        = 1973,
5243    volume      = 16,
5244    number      = 8,
5245    pages       = {503-512}
5246}
5247
5248@article{Baker82,
5249    keywords    = {compilation},
5250    contributer = {gjditchfield@plg},
5251    author      = {Theodore P. Baker},
5252    title       = {A One-Pass Algorithm for Overload Resolution in {Ada}},
5253    journal     = toplas,
5254    year        = 1982,
5255    month       = oct,
5256    volume      = 4,
5257    number      = 4,
5258    pages       = {601-614},
5259    abstract    = {
5260        A simple method is presented for detecting ambiguities and finding
5261        the correct interpretations of expressions in the programming
5262        language Ada.  Unlike previously reported solutions to this
5263        problem, which require multiple passes over a tree structure, the
5264        method described here operates in one bottom-up pass, during which
5265        a directed acyclic graph is produced.  The correctness of this
5266        approach is demonstrated by a brief formal argument.
5267    },
5268    comment     = {
5269        See also \cite{D:overload}.
5270        }
5271}
5272
5273@manual{OpenMP,
5274    keywords    = {concurrency, openmp, spmd},
5275    contributer = {pabuhr@plg},
5276    key         = {OpenMP},
5277    title       = {OpenMP Application Program Interface, Version 4.5},
5278    month       = nov,
5279    year        = 2015,
5280    note        = {\href{https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf}{https://\-www.openmp.org/\-wp-content/\-uploads/\-openmp-4.5.pdf}},
5281}
5282
5283@book{Deitel04,
5284    keywords    = {concurrency, operating systems},
5285    contributer = {pabuhr@plg},
5286    author      = {Harvey M. Deitel and Paul J. Deitel and David R. Choffnes},
5287    title       = {Operating Systems},
5288    publisher   = {Pearson Prentice-Hall},
5289    address     = {Englewood Cliffs},
5290    year        = 2004,
5291    edition     = {3rd},
5292}
5293
5294@book{Stalling98,
5295    keywords    = {concurrency, operating systems},
5296    contributer = {pabuhr@plg},
5297    author      = {William Stallings},
5298    title       = {Operating Systems: Internals and Design Principles},
5299    publisher   = {Prentice-Hall},
5300    address     = {Englewood Cliffs},
5301    year        = 1998,
5302    edition     = {3rd},
5303}
5304
5305@book{Stalling01,
5306    keywords    = {concurrency, operating systems},
5307    contributer = {pabuhr@plg},
5308    author      = {William Stallings},
5309    title       = {Operating Systems: Internals and Design Principles},
5310    publisher   = {Prentice-Hall},
5311    address     = {Englewood Cliffs},
5312    year        = 2001,
5313    edition     = {4th},
5314}
5315
5316@book{Silberschatz91,
5317    keywords    = {concurrency, operating systems},
5318    contributer = {pabuhr@plg},
5319    author      = {Abraham Silberschatz and James L. Peterson and Peter Galvin},
5320    title       = {Operating System Concepts},
5321    publisher   = {Addision-Wesley},
5322    address     = {Boston},
5323    year        = 1991,
5324    edition     = {3rd},
5325}
5326
5327@book{Tanenbaum87,
5328    keywords    = {concurrency, operating systems},
5329    contributer = {pabuhr@plg},
5330    author      = {Andrew S. Tanenbaum},
5331    title       = {Operating Systems : Design and Implementation},
5332    publisher   = {Prentice-Hall},
5333    address     = {Englewood Cliffs},
5334    series      = {Software Series},
5335    year        = 1987,
5336}
5337
5338@book{Hansen73,
5339    keywords    = {monitors},
5340    contributer = {pabuhr@plg},
5341    author      = {Per {Brinch Hansen}},
5342    title       = {Operating System Principles},
5343    publisher   = {Prentice-Hall},
5344    address     = {Englewood Cliffs},
5345    year        = 1973,
5346}
5347
5348@book{Bic03,
5349    keywords    = {concurrency, operating systems},
5350    contributer = {pabuhr@plg},
5351    author      = {Lubomir F. Bic and Alan C. Shaw},
5352    title       = {Operating System Principles},
5353    publisher   = {Prentice-Hall},
5354    address     = {Englewood Cliffs},
5355    year        = 2003,
5356}
5357
5358@techreport{milner88,
5359    keywords    = {},
5360    contributer = {gjditchfield@plg},
5361    author      = {Robin Milner},
5362    title       = {Operational and Algebraic Semantics of Concurrent Processes},
5363    institution = {Laboratory for Foundations of Computer Science},
5364    year        = 1988,
5365    address     = {Department of Computer Science, University of Edinburgh, Edinburgh EH9 3JZ},
5366    month       = feb,
5367    number      = {ECS-LFCS-88-46}
5368}
5369
5370@article{Ganzinger80,
5371    contributer = {a3moss@uwaterloo.ca},
5372    author      = {Ganzinger, Harald and Ripken, Knut},
5373    title       = {Operator Identification in {ADA}: Formal Specification, Complexity, and Concrete Implementation},
5374    journal     = {SIGPLAN Notices},
5375    issue_date  = {February 1980},
5376    volume      = {15},
5377    number      = {2},
5378    month       = feb,
5379    year        = {1980},
5380    issn        = {0362-1340},
5381    pages       = {30--42},
5382    numpages    = {13},
5383    url         = {http://doi.acm.org/10.1145/947586.947589},
5384    doi         = {10.1145/947586.947589},
5385    publisher   = {ACM},
5386    address     = {New York, NY, USA}
5387}
5388
5389@article{Ford82,
5390    keywords    = {},
5391    contributer = {pabuhr@plg},
5392    author      = {G. Ford and B. Hansche},
5393    title       = {Optional, Repeatable, and Varying Type Parameters},
5394    journal     = sigplan,
5395    volume      = 17,
5396    number      = 2,
5397    month       = feb,
5398    year        = 1982,
5399    pages       = {41-48},
5400}
5401
5402@manual{pli,
5403    keywords    = {PL/I},
5404    contributer = {gjditchfield@plg},
5405    key         = {IBM},
5406    title       = {{OS} and {DOS} {PL/I} Reference Manual},
5407    organization= {International Business Machines},
5408    edition     = {1st},
5409    month       = sep,
5410    year        = 1981,
5411    note        = {Manual GC26-3977-0},
5412}
5413
5414@techreport{D:overload,
5415    keywords    = {overload resolution, compilation},
5416    contributer = {gjditchfield@plg},
5417    author      = {M. Dausmann et. al.},
5418    title       = {Overloading in {Ada}},
5419    institution = {Universitat Karlsruhe},
5420    year        = 1979,
5421    number      = {23/79},
5422    comment     = {
5423        Probably the earliest description of the two-pass (bottom-up,
5424        top-down) overload resolution algorithm. See also
5425        \cite{PW:overload,WS:overload,PDM:overload,Cor:overload,Bak:overload}.
5426    }
5427}
5428
5429@article{EB87,
5430    keywords    = {packages, private types, assignment, equality},
5431    contributer = {gjditchfield@plg},
5432    author      = {J. Dana Eckart and Richard J. LeBlanc},
5433    title       = {Overloading in the {Ada} Language: Is it too restrictive?},
5434    journal     = {Computer Languages},
5435    year        = 1987,
5436    volume      = 12,
5437    number      = {3/4},
5438    pages       = {163-172},
5439    abstract    = {
5440        Packages in the Ada language provide a mechanism for extending the
5441        language through the development of additional data types.  Such
5442        types can be better integrated into the language using operator
5443        overloading; however, key limitations prevent new types from being
5444        transparently integrated into the language.  Allowing function
5445        names to overload private type names would give a cleaner and
5446        clearer mechanism for building values of these types.  Furthermore,
5447        by allowing redefinitions of ``:='' and by making it easier to
5448        overload ``='' for private types, Ada coud be transformed into a
5449        more expressive language.
5450    }
5451}
5452
5453@article{PW:overload,
5454    keywords    = {compilation},
5455    contributer = {gjditchfield@plg},
5456    author      = {Guido Persch and Georg Winterstein and Manfred Dausman and Sophia Drossopoulou},
5457    title       = {Overloading in Preliminary {Ada}},
5458    journal     = sigplan,
5459    year        = 1980,
5460    month       = nov, volume = 15, number = 11, pages = {47-56},
5461    note        = {Proceedings of the ACM-SIGPLAN Symposium on the {Ada} Programming Language}, 
5462    comment     = {
5463        The two-pass (bottom-up, then top-down) algorithm, with a proof
5464        that two passes suffice.  See also \cite{D:overload}.
5465    }
5466}
5467
5468@article{SR,
5469    keywords    = {concurrency, messages, rendezvous},
5470    contributer = {pabuhr@plg},
5471    author      = {Gregory R. Andrews and Ronald A. Olsson and Michael Coffin and
5472                  Irving Elshoff and Kelvin Nilsen and Titus Purdin and Gregg Townsend},
5473    title       = {An Overview of the {SR} Language and Implementation},
5474    journal     = toplas,
5475    month       = jan,
5476    year        = 1988,
5477    volume      = 10,
5478    number      = 1,
5479    pages       = {51-86},
5480}
5481
5482% P
5483
5484@article{Andrews91,
5485    keywords    = {general concurrency},
5486    contributer = {pabuhr@plg},
5487    author      = {Gregory R. Andrews},
5488    title       = {Paradigms for Process Interaction in Distributed Programs},
5489    journal     = acmcs,
5490    volume      = 23,
5491    number      = 1,
5492    month       = mar,
5493    year        = 1991,
5494    pages       = {49-90},
5495}
5496
5497@book{PPC++,
5498    keywords    = {concurrency, parallel, distributed, C++},
5499    contributer = {pabuhr@plg},
5500    editor      = {Gregory V. Wilson and Paul Lu},
5501    title       = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5502    publisher   = {MIT Press},
5503    series      = {Scientific and Engineering Computation Series},
5504    year        = 1996,
5505    pages       = {1-42},
5506}
5507
5508@incollection{Stroustrup96,
5509    keywords    = {concurrency, C++},
5510    contributer = {pabuhr@plg},
5511    author      = {Bjarne Stroustrup},
5512    title       = {A Perspective on Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5513    editor      = {Gregory V. Wilson and Paul Lu},
5514    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5515    publisher   = {MIT Press},
5516    series      = {Scientific and Engineering Computation Series},
5517    year        = 1996,
5518    pages       = {xxvi-xxvii},
5519}
5520
5521@incollection{Yang96b,
5522    keywords    = {concurrency, C++},
5523    contributer = {pabuhr@plg},
5524    author      = {Shelby X. Yang and Dennis Gannon and Peter Beckman and Jacob Gotwals and Neelakantan Sundaresan},
5525    editor      = {Gregory V. Wilson and Paul Lu},
5526    title       = {p{C}++},
5527    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5528    publisher   = {MIT Press},
5529    address     = {Cambridge},
5530    series      = {Scientific and Engineering Computation Series},
5531    pages       = {507-546},
5532    year        = 1996,
5533}
5534
5535@article{goguen84,
5536    keywords    = {},
5537    contributer = {gjditchfield@plg},
5538    author      = {Goseph A. Goguen},
5539    title       = {Parameterized Programming},
5540    journal     = ieeese,
5541    year        = 1984,
5542    month       = sep, volume = "SE-10", number = 5, pages = {528-543},
5543    abstract    = {
5544        Parameterized programming is a powerful technique for the reliable
5545        reuse of software.  In this technique, modules are parameterized
5546        over very general interfaces that describe what properties of an
5547        environment are required for the module to work correctly.
5548        Reusability is enhanced by the flexibility of the parameterization
5549        mechanism proposed here.  Reliability is further enhanced by
5550        permitting interface requirements to include more than purely
5551        syntactic information.  This paper introduces three new ideas that
5552        seem especially useful in supporting parameterized programming: 1)
5553        {\em theories}, which declare global properties of program modules
5554        and interfaces; 2) {\em views}, which connect theories with program
5555        modules in an elegant way; and 3) {\em module expressions}, a kind
5556        of general structured program transformation which produces new
5557        modules by modifying and combining existing modules.  Although
5558        these ideas are illustrated with some simple examples in the OBJ
5559        programming language, they should also be taken as proposals for an
5560        Ada library system, for adding modules to Prolog, and as
5561        considerations for future language design efforts.  OBJ is an
5562        ultra-high level programming language, based upon rewrite rules,
5563        that incorporates these ideas, and many others from modern
5564        programming methodology.
5565    }
5566}
5567
5568@inproceedings{c++:templates,
5569    author      = {Bjarne Stroustrup},
5570    contributer = {gjditchfield@plg},
5571    title       = {Parameterized Types for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5572    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference},
5573    organization= {USENIX Association},
5574    year        = 1988, pages = {1-18}
5575}
5576
5577@inproceedings{Boehm85,
5578    keywords    = {second-order unification},
5579    contributer = {gjditchfield@plg},
5580    author      = {Hans-J. Boehm},
5581    title       = {Partial Polymorphic Type Inference is Undecidable},
5582    booktitle   = {26th Annual Symposium on Foundations of Computer Science},
5583    year        = 1985,
5584    pages       = {339-345},
5585    organization= {IEEE Computer Society},
5586    publisher   = {IEEE Computer Society Press},
5587    address     = {1730 Massachusetts Avenue, N.W, Washington, D.C. 20036-1903},
5588    summary     = {
5589        Given a base typed lambda calculus with function types, type
5590        abstractions, and a recursive expression \(\mbox{fix } x:t.e\),
5591        then type inference for the partially typed language
5592        \begin{eqnarray}
5593        \lambda x:\tau.e        &\Rightarrow& \lambda x.e       \\
5594        \mbox{fix } x:\tau.e    &\Rightarrow& \mbox{fix } x.e   \\
5595        e \tau                  &\Rightarrow& e ?
5596        \end{eqnarray}
5597        is undecidable.
5598    }
5599}
5600
5601@book{Pascal,
5602    keywords    = {Pascal},
5603    contributer = {pabuhr@plg},
5604    author      = {Kathleen Jensen and Niklaus Wirth},
5605    title       = {{P}ascal User Manual and Report, ISO Pascal Standard},
5606    publisher   = {Springer--Verlag},
5607    year        = 1991,
5608    edition     = {4th},
5609    note        = {Revised by Andrew B. Mickel and James F. Miner}
5610}
5611
5612@book{Pascal:old,
5613    keywords    = {Pascal},
5614    contributer = {pabuhr@plg},
5615    author      = {Kathleen Jensen and Niklaus Wirth},
5616    title       = {{P}ascal User Manual and Report},
5617    publisher   = {Springer--Verlag},
5618    year        = 1975,
5619    edition     = {1st},
5620}
5621
5622@article{Turba85,
5623    keywords    = {Pascal, exception handling, inheritance},
5624    contributer = {pabuhr@plg},
5625    author      = {Thomas N. Turba},
5626    title       = {The {P}ascal Exception Handling Proposal},
5627    journal     = sigplan,
5628    volume      = 20,
5629    number      = 8,
5630    month       = aug,
5631    year        = 1985,
5632    pages       = {93-98},
5633}
5634
5635@manual{Pascal/VS,
5636    keywords    = {PL/I},
5637    contributer = {pabuhr@plg},
5638    key         = {IBM},
5639    title       = {{P}ascal/{VS} Language Reference Manual},
5640    organization= {International Business Machines},
5641    edition     = {1st},
5642    year        = 1981,
5643    note        = {Manual SH20-6168-1},
5644}
5645
5646@misc{perf,
5647    contributer = {pabuhr@plg},
5648    key         = {perf},
5649    author      = {perf},
5650    howpublished= {\href{https://perf.wiki.kernel.org/index.php/Tutorial}{https://\-perf.wiki.kernel.org/\-index.php/\-Tutorial}},
5651}
5652
5653@misc{Verch12,
5654    contributer = {pabuhr@plg},
5655    author      = {Shaun Verch},
5656    title       = {Performance Analysis of 64-Bit Capriccio},
5657    month       = may,
5658    year        = 2012,
5659    howpublished= {\href{http://cs.brown.edu/research/pubs/theses/masters/2012/verch.pdf}{http://cs.brown.edu/\-research/\-pubs/\-theses/\-masters/\-2012/\-verch.pdf}},
5660}
5661
5662@article{Anderson90,
5663    keywords    = {spin locks, back off, performance},
5664    contributer = {pabuhr@plg},
5665    author      = {Thomas E. Anderson},
5666    title       = {The Performance of Spin Lock Alternatives for Shared-Memory Multiprocessors},
5667    journal     = ieeepds,
5668    month       = jan,
5669    year        = 1990,
5670    volume      = 1,
5671    number      = 1,
5672    pages       = {6-16},
5673}
5674
5675@inproceedings{Conchon07,
5676    keywords    = {persistent array, union-find},
5677    contributer = {a3moss@uwaterloo.ca},
5678    title       = {A persistent union-find data structure},
5679    author      = {Conchon, Sylvain and Filli{\^a}tre, Jean-Christophe},
5680    booktitle   = {Proceedings of the 2007 workshop on Workshop on ML},
5681    pages       = {37--46},
5682    year        = {2007},
5683    organization= {ACM}
5684}
5685
5686@article{poly,
5687    keywords    = {Poly, Standard ML, Russell, persistence},
5688    contributer = {gjditchfield@plg},
5689    author      = {David C. J. Matthews},
5690    title       = {Poly Manual},
5691    journal     = sigplan,
5692    month       = sep, year = 1985,
5693    volume      = 20, number = 9, pages = {52-76}
5694}
5695
5696@techreport{Atkinson87b,
5697    keywords    = {naming, persistence},
5698    contributer = {pabuhr@plg},
5699    author      = {M. P. Atkinson and R. Morrison},
5700    title       = {Polymorphic Names and Iterations},
5701    institution = {Universities of Glasgow and St. Andrews, Scotland},
5702    number      = {PPRR-53-87},
5703    month       = nov,
5704    year        = 1987,
5705}
5706
5707@book{Harland,
5708    keywords    = {},
5709    author      = {David M. Harland},
5710    title       = {Polymorphic Programming Languages: Design and Implementation},
5711    publisher   = {Ellis Horwood},
5712    year        = 1984,
5713    series      = {Computers and their Applications},
5714    address     = {Market Cross House, Cooper Street, Chichester, West Sussex, PO19 1EB, England},
5715    summary     = {
5716        The principles of Procedural Abstraction, Data Type Completeness,
5717        Declaration Correspondence, and Orthogonality are ruthlessly applied
5718        to the design of a polymorphic language.
5719    }
5720}
5721
5722@unpublished{poa,
5723    keywords    = {Force N, type inference, reusability, transcendance},
5724    contributer = {gjditchfield@plg},
5725    author      = {G. V. Cormack and A. K. Wright},
5726    title       = {Polymorphism, Overloading, and Abstraction},
5727    note        = {personal communication}
5728}
5729
5730@inproceedings{forceone:impl,
5731    keywords    = {Parametric polymorphism, ForceOne},
5732    contributer = {gjditchfield@plg},
5733    author      = {G. V. Cormack and A. K. Wright},
5734    title       = {Polymorphism in the Compiled Language {ForceOne}},
5735    booktitle   = {Proceedings of the 20th Hawaii International Conference on Systems Sciences},
5736    month       = jan,
5737    year        = 1987,
5738    pages       = {284-292},
5739}
5740
5741@incollection{POOL-T,
5742    keywords    = {objects, concurrency},
5743    contributer = {pabuhr@plg},
5744    author      = {Pierre America},
5745    title       = {POOL-T: A Parallel Object-Oriented Language},
5746    booktitle   = {Object-Oriented Concurrent Programming},
5747    publisher   = {The MIT Press},
5748    year        = 1987,
5749    pages       = {199-220},
5750    editor      = {Akinori Yonezawa and Mario Tokoro}
5751}
5752
5753@article{Hardgrave76,
5754    keywords    = {positional, keyword, parameters, arguments},
5755    contributer = {pabuhr@plg},
5756    author      = {W. T. Hardgrave},
5757    title       = {Positional versus Keyword Parameter Communication in Programming Languages},
5758    journal     = sigplan,
5759    volume      = 11,
5760    number      = 5,
5761    month       = may,
5762    year        = 1976,
5763    pages       = {52-58},
5764}
5765
5766@inproceedings{Rafkind09,
5767    keywords    = {accurate, C programming language, conservative, garbage collection, precise},
5768    contributer = {pabuhr@plg},
5769    author      = {Rafkind, Jon and Wick, Adam and Regehr, John and Flatt, Matthew},
5770    title       = {Precise Garbage Collection for C},
5771    booktitle   = {Proceedings of the 2009 International Symposium on Memory Management},
5772    series      = {ISMM '09},
5773    year        = {2009},
5774    location    = {Dublin, Ireland},
5775    pages       = {39-48},
5776    publisher   = {ACM},
5777    address     = {New York, NY, USA},
5778}
5779
5780@article{Ada:preliminary,
5781    keywords    = {Ada},
5782    contributer = {pabuhr@plg},
5783    author      = {Jean D. Ichbiah and Bernd Krieg-Brueckner and Brian A. Wichmann
5784                   and Henry F. Ledgard and Jean-Claude Heliard and Jean-Raymond Abrial
5785                   and John G. P. Barnes and Olivier Roubine},
5786    title       = {Preliminary {Ada} Reference Manual},
5787    journal     = sigplan,
5788    volume      = 14,
5789    number      = 6,
5790    month       = jun,
5791    year        = 1979,
5792    note        = {Part A},
5793}
5794
5795@techreport{Forsythe,
5796    author      = {John C. Reynolds},
5797    title       = {Preliminary Design of the Programming Language {Forsythe}},
5798    institution = {Carnegie Mellon University},
5799    number      = {CMU-CS-88-159},
5800    month       = jun,
5801    year        = 1988,
5802}
5803
5804@article{PRESTO,
5805    keywords    = {concurrency, threads},
5806    contributer = {dgharriss@plg},
5807    author      = {B. N. Bershad and E. D. Lazowska and H. M. Levy},
5808    title       = {{PRESTO}: A System for Object-oriented Parallel Programming},
5809    journal     = spe,
5810    volume      = 18,
5811    number      = 8,
5812    month       = aug,
5813    year        = 1988,
5814    pages       = {713-732}
5815}
5816
5817@book{Ben-Ari82,
5818    keywords    = {concurrency, parallel, programming languages},
5819    contributer = {pabuhr@plg},
5820    author      = {Mordechai Ben-Ari},
5821    title       = {Principles of Concurrent Programming},
5822    publisher   = {Prentice-Hall International},
5823    address     = {Englewood Cliffs},
5824    year        = 1982,
5825}
5826
5827@book{Tennent81,
5828    author      = {R. D. Tennent},
5829    title       = {Principles of Programming Languages},
5830    publisher   = {Prentice-Hall International},
5831    address     = {Englewood Cliffs},
5832    year        = 1981,
5833    series      = {Series in Computer Science}
5834}
5835
5836@article{Lister77,
5837    keywords    = {monitors, nested monitor calls},
5838    contributer = {pabuhr@plg},
5839    author      = {Andrew Lister},
5840    title       = {The Problem of Nested Monitor Calls},
5841    journal     = osr,
5842    volume      = 11,
5843    number      = 3,
5844    month       = jul,
5845    year        = 1977,
5846    pages       = {5-7},
5847}
5848
5849@article{psa:persistence,
5850    keywords    = {persistence, first-class procedures, closure, PS-Algol, Abstract Data Types},
5851    contributer = {gjditchfield@plg},
5852    author      = {Malcolm P. Atkinson and Ronald Morrison},
5853    title       = {Procedures as Persistent Data Objects},
5854    journal     = toplas,
5855    volume      = {7},    number = {4},
5856    pages       = {539-559},
5857    month       = oct, year = 1985,
5858    comment     = {
5859        PS-Algol has ``structures'', accessible only through ``pntrs''.
5860        Pntrs can refer to any type of structure.  Field references involve
5861        a run-time check.  This, plus first-class procedures, can simulate
5862        abstract data types.  Procedure variables operating on pntrs
5863        simulate ADT operations.  A block defines a structure to implement
5864        the ADT, and assigns procedures to the variables.  Functions
5865        returning structures containing procedures  simulate multiple
5866        implementations and parameterized ADTs.
5867
5868        An outer procedure that returns a procedure that contains
5869        (non-local) references to the outer procedure's parameters
5870        implements partial evaluation.
5871
5872        Modules can be simulated like ADT's.  The module itself is a
5873        structure instance that is placed in persistent storage, and the
5874        module is imported by fetching it from the persistent store.
5875        Multiple instances of modules are easy.  Installation of new
5876        versions can be done by replacing the version in the database.
5877    }
5878}
5879
5880@article{Procol89,
5881    keywords    = {active objects, object-oriented languages, object-based languages, explicit per-object protocol},
5882    contributer = {akgoel@plg},
5883    author      = {Jan van den Bos and Chris Laffra},
5884    title       = {PROCOL: A Parallel Object Language with Protocols},
5885    journal     = sigplan,
5886    volume      = 24,
5887    number      = 10,
5888    month       = oct,
5889    year        = 1989,
5890    pages       = {95-102},
5891    note        = {Proceedings of the OOPSLA'89 Conference, Oct. 1--6, 1989, New Orleans, Lousiana},
5892    abstract    = {},
5893}
5894
5895@inproceedings{Buhr98,
5896    keywords    = {profiling, monitoring, visualization},
5897    contributer = {pabuhr@plg},
5898    author      = {Peter A. Buhr and Robert Denda},
5899    title       = {{$\mu$Profiler} : Profiling User-Level Threads in a Shared-Memory Programming Environment},
5900    booktitle   = {Proc. of 2nd Inter. Symp. on Computing in Object-Oriented Parallel Environments},
5901    series      = {Lecture Notes in Computer Science},
5902    publisher   = {Springer-Verlag},
5903    volume      = 1505,
5904    opteditor   = {Dennis Caromel and Rodney R. Oldehoeft and Marydell Tholburn},
5905    address     = {Santa Fe, New Mexico, U.S.A.},
5906    month       = dec,
5907    year        = 1998,
5908    pages       = {159-166},
5909}
5910
5911@book{PowerPC,
5912    key         = {PowerPC processor},
5913    title       = {Programming Environments Manual for 32-Bit Implementations of the PowerPC ArchitectureARM Architecture},
5914    publisher   = {Freescale Semiconductor},
5915    volume      = {MPCFPE32B},
5916    edition     = {Rev. 3},
5917    month       = 9,
5918    year        = 2005,
5919}
5920
5921@book{Butenhof97,
5922    keywords    = {PThreads, concurrency},
5923    contributer = {pabuhr@plg},
5924    author      = {David R. Butenhof},
5925    title       = {Programming with {POSIX} Threads},
5926    publisher   = {Addison-Wesley},
5927    address     = {Boston},
5928    series      = {Professional Computing},
5929    year        = 1997,
5930}
5931
5932@book{SETL,
5933    keywords    = {SETL},
5934    contributer = {pabuhr@plg},
5935    author      = {J. T. Schwartz and R. B. K. Dewar and E. Dubinsky and E. Schonberg},
5936    title       = {Programming with Sets: An Introduction to {SETL}},
5937    publisher   = {Springer},
5938    address     = {New York, NY, USA},
5939    year        = 1986,
5940}
5941
5942@book{Genuys68,
5943    keywords    = {contains Dijkstra's Cooperating Sequential Processes},
5944    contributer = {pabuhr@plg},
5945    editor      = {F. Genuys},
5946    title       = {Programming Languages},
5947    publisher   = {Academic Press},
5948    address     = {London, New York},
5949    year        = 1968,
5950    note        = {NATO Advanced Study Institute, Villard-de-Lans, 1966}
5951}
5952
5953@manual{ANSI99:C,
5954    keywords    = {ANSI C 99},
5955    contributer = {pabuhr@plg},
5956    title       = {Programming Languages -- {C}},
5957    organization= {International Standard ISO/IEC 9899:1999 (E)},
5958    publisher   = {American National Standards Institute},
5959    address     = {www.ansi.org},
5960    year        = 1999,
5961}
5962
5963@manual{ANSI98:C++,
5964    keywords    = {ANSI C++ 98},
5965    contributer = {pabuhr@plg},
5966    key         = {C++98},
5967    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998},
5968    edition     = {1st},
5969    publisher   = {International Standard Organization},
5970    address     = {\href{https://www.iso.org/standard/25845.html}{https://\-www.iso.org/\-standard/\-25845.html}},
5971    year        = 1998,
5972}
5973
5974@manual{C++14,
5975    keywords    = {ISO/IEC C++ 14},
5976    contributer = {pabuhr@plg},
5977    key         = {C++14},
5978    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:2014},
5979    edition     = {4th},
5980    publisher   = {International Standard Organization},
5981    address     = {\href{https://www.iso.org/standard/64029.html}{https://\-www.iso.org/\-standard/\-64029.html}},
5982    year        = 2014,
5983}
5984
5985@manual{C++17,
5986    keywords    = {ISO/IEC C++ 17},
5987    contributer = {pabuhr@plg},
5988    key         = {C++17},
5989    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:2017},
5990    edition     = {5th},
5991    publisher   = {International Standard Organization},
5992    address     = {\href{https://www.iso.org/standard/68564.html}{https://\-www.iso.org/\-standard/\-68564.html}},
5993    year        = 2017,
5994}
5995
5996@manual{MS:VisualC++,
5997    keywords    = {Microsoft Visual C++},
5998    contributer = {pabuhr@plg},
5999    title       = {Microsoft Visual {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} .NET Language Reference},
6000    organization= {Microsoft Corporation},
6001    year        = 2002,
6002    note        = {Microsoft Press, Redmond, Washington, U.S.A.},
6003}
6004
6005@article{HasselBring00,
6006    keywords    = {concurrency, prototyping},
6007    contributer = {pabuhr@plg},
6008    author      = {Wilhelm Hasselbring},
6009    title       = {Programming Languages and Systems for Prototyping Concurrent Applications},
6010    journal     = acmcs,
6011    volume      = 32,
6012    number      = 1,
6013    month       = mar,
6014    year        = 2000,
6015    pages       = {43-79},
6016}
6017
6018@article{LLgen,
6019    keywords    = {ll(1), parser generator, separate compilation},
6020    contributer = {gjditchfield@plg},
6021    author      = {Dick Grune and Ceriel J. J. Jacobs},
6022    title       = {A Programmer-friendly LL(1) Parser Generator},
6023    journal     = spe,
6024    month       = jan, year = 1988,
6025    volume      = 18, number = 1, pages = {29-33},
6026    comment     = {
6027        LLgen generates C-language recursive-descent parsers.  The input
6028        contains procedure-like rules with alternation and repetition
6029        constructs on the right, and (typed) parameters on the left.
6030        C actions are specified between items in the right side.
6031        Alternation and repetition (reduce and shift) conflicts can be
6032        resolved statically or at run time.
6033
6034        A grammar can be specified in several files.  All files must be
6035        submitted to LLgen at once, but if the C file generated is no
6036        different from the old version, then the old version is not
6037        replaced and hence need not be recompiled, which saves lots of
6038        time.
6039
6040        When an incorrect token is found, the automatic error recovery
6041        algorithm discards tokens until an ``acceptable'' token is found;
6042        if the acceptable token is not correct, a correct one is inserted.
6043    }
6044}
6045
6046@techreport{russell,
6047    keywords    = {Russell},
6048    contributer = {gjditchfield@plg},
6049    author      = {H. Boehm and A. Demers and J. Donahue},
6050    title       = {A Programmer's Introduction to Russell},
6051    institution = {Rice University},
6052    year        = 1985,
6053    number      = {85-16}
6054}
6055
6056@techreport{PDM89,
6057    keywords    = {existential types, universal types},
6058    contributer = {gjditchfield@plg},
6059    author      = {Benjamin Pierce and Scott Dietzen and Spiro Michaylov},
6060    title       = {Programming in Higher-Order Typed Lambda Calculi},
6061    institution = {School of Computer Science, Carnegie Mellon University},
6062    year        = 1989,
6063    address     = {Pittsburg, PA 15213-3890},
6064    month       = mar, number = {CMU-CS-89-111},
6065    abstract    = {
6066        This tutorial presents a hierarchy of increasingly powerful
6067        languages, beginning with Church's simply typed
6068        \(\lambda\)-calculus (\(F_1\)) and the second-order polymorphic
6069        \(\lambda\)-calculus of Girard and Reynolds, and culminating in a
6070        fragment of Girard's \(\omega\)-order polymorphic
6071        \(\lambda\)-calculus (\(F_\omega\)).  Our focus throughout is on
6072        the unusual style of programming that arises in these languages,
6073        where all functions are total and the primary control construct is
6074        iteration rather than general recursion.
6075    }
6076}
6077
6078@book{Modula-2,
6079    keywords    = {modules, coroutines},
6080    contributer = {pabuhr},
6081    author      = {Niklaus Wirth},
6082    title       = {Programming in Modula-2},
6083    publisher   = {Springer},
6084    address     = {New York},
6085    year        = 1988,
6086    edition     = {4th},
6087    series      = {Texts and Monographs in Computer Science},
6088}
6089
6090@manual{Ada,
6091    keywords    = {Ada, packages, tasks, exceptions},
6092    contributer = {pabuhr@plg},
6093    title       = {The Programming Language {Ada}: Reference Manual},
6094    author      = {Ada},
6095    organization= {United States Department of Defense},
6096    edition     = {{ANSI/MIL-STD-1815A-1983}},
6097    month       = feb,
6098    year        = 1983,
6099    note        = {Springer, New York},
6100}
6101
6102@manual{ada:old,
6103    keywords    = {Ada, packages, tasks, exceptions},
6104    contributer = {gjditchfield@plg},
6105    title       = {The Programming Language {Ada}: Reference Manual},
6106    organization= {United States Department of Defense},
6107    publisher   = {Springer},
6108    year        = 1981
6109}
6110
6111@book{Ghezzi,
6112    keywords    = {},
6113    author      = {Carlo Ghezzi and Mehdi Jazayeri},
6114    title       = {Programming Language Concepts},
6115    publisher   = {Wiley},
6116    year        = 1982
6117}
6118
6119@article{ConcurrentPascal,
6120    keywords    = {Concurrent Pascal},
6121    contributer = {pabuhr@plg},
6122    author      = {Per {Brinch Hansen}},
6123    title       = {The Programming Language Concurrent Pascal},
6124    journal     = ieeese,
6125    volume      = 2,
6126    month       = jun,
6127    year        = 1975,
6128    pages       = {199-206}
6129}
6130
6131@phdthesis{Buhr85:thesis,
6132    keywords    = {},
6133    contributer = {pabuhr@plg},
6134    author      = {P. A. Buhr},
6135    title       = {A Programming System},
6136    school      = {University of Manitoba},
6137    year        = {1985}
6138}
6139
6140@techreport{pierce91,
6141    keywords    = {typed lambda calculus},
6142    contributer = {gjditchfield@plg},
6143    author      = {Benjamin C. Pierce},
6144    title       = {Programming with Intersection Types, Union Types, and Polymorphism},
6145    institution = {Carnegie Mellon University},
6146    year        = 1991,
6147    month       = feb,
6148    number      = {CMU-CS-91-106},
6149    annote      = {
6150        Discusses a typed lambda calculus with
6151        \begin{itemize}
6152        \item
6153        Intersection types \(\tau = \tau_1\wedge\tau_2\) with \(\tau \le
6154        \tau_i\) for all \(i\).
6155        \item
6156        Union types \(\tau = \tau_1\vee\tau_2\) with \(\tau_i \le \tau\),
6157        and with implicit coercions from \(tau_i\) to \(\tau\).  Only
6158        operations valid for both element types can be applied to the
6159        union; there are no projections.  Union types are to variant
6160        records as set union is to disjoint set union.
6161        \item
6162        Function types and universal quantification, with subtyping rules.
6163        When functions and arguments intersections, the result of
6164        application is the intersection of all valid combinations.
6165        \item
6166        Distribution rules for combinations of types.
6167        \item
6168        "Union elimination": "case \(x = e\) of \(e'\)", where \(e\) is a
6169        union, has type \(\tau\) if \(e'\) has that type with \(x\) having
6170        every element type of the union.
6171        \item
6172        "Finitary quantification": "for \(t\) in \(\tau_1,\ldots,\tau_n.e\)"
6173        typechecks \(e\) with \(t\) bound to each choice, and intersects
6174        the results.
6175        \end{itemize}
6176
6177        Examples include: type of "natural" numbers, treated as a union of
6178        "zero" and "positive" types; default parameters, faked by using an
6179        argument that is an intersection of a data type and a function
6180        taking an explicit argument.
6181
6182        Unions can be mostly faked, according to Mitchell:
6183        \[\tau_1\vee\tau_2 \equiv
6184             \forall\tau.(\tau_1\on\tau)\wedge(\tau_2\on\tau)\]
6185    }
6186}
6187
6188@article{Moore75,
6189    keywords    = {approximation methods, integrated circuits},
6190    contributer = {pabuhr@plg},
6191    author      = {Gordon E. Moore},
6192    title       = {Progress in Digital Integrated Electronics},
6193    journal     = {Technical Digest, International Electron Devices Meeting, IEEE},
6194    year        = 1975,
6195    pages       = {11-13},
6196}
6197
6198@article{promises,
6199    keywords    = {futures, Argus, call streams, rpc},
6200    contributer = {gjditchfield@plg},
6201    author      = {Barbara Liskov and Liuba Shrira},
6202    title       = {Promises: Linguistic Support for Efficient Asynchronous Procedure Calls in Distributed Systems},
6203    journal     = sigplan,
6204    year        = 1988,
6205    month       = jul,
6206    volume      = 23,
6207    number      = 7,
6208    pages       = {260-267},
6209    note        = {Proceedings of the SIGPLAN '88 Conference on Programming Language Design and Implementation},
6210    abstract    = {
6211        This paper deals with the integration of an efficient asynchronous
6212        remote procedure call mechanism into a programming language.  It
6213        describes a new data type called a {\em promise} that was designed
6214        to support asynchronous calls.  Promises allow a caller to run in
6215        parallel with a call and to pick up the results of the call,
6216        including any exceptions it raises, in a convenient and type-safe
6217        manner.  The paper also discusses efficient composition of
6218        sequences of asynchronous calls to different locations in a
6219        network.
6220    }
6221}
6222
6223@article{Cook89,
6224    keywords    = {},
6225    contributer = {gjditchfield@plg},
6226    author      = {W. R. Cook},
6227    title       = {A Proposal for Making {Eiffel} Type-safe},
6228    journal     = {The Computer Journal},
6229    year        = 1989,
6230    volume      = 32, number = 4, pages = {305-311},
6231    abstract    = {
6232       
6233    }
6234}
6235
6236@inproceedings{Foxall79,
6237    keywords    = {},
6238    contributer = {pabuhr@plg},
6239    author      = {D. G. Foxall and M. L. Joliat and R. F. Kamel and J. J. Miceli},
6240    title       = {{PROTEL}: A High Level Language for Telephony},
6241    booktitle   = {Proceedings 3rd International Computer Software and Applications Conference},
6242    month       = nov,
6243    year        = 1979,
6244    pages       = {193-197},
6245}
6246
6247@techreport{PS-Algol,
6248    keywords    = {algol, persistence},
6249    contributer = {pabuhr@plg},
6250    key         = {PS-Algol},
6251    title       = {The {PS-Algol} Reference Manual, 4th Ed.},
6252    author      = {},
6253    institution = {University of Glasgow and St. Andrews, Scotland},
6254    number      = {PPRR 12},
6255    month       = jun,
6256    year        = 1987,
6257}
6258
6259@misc{Pthreads,
6260    keywords    = {pthreads, C concurrency},
6261    contributer = {pabuhr@plg},
6262    key         = {pthreads},
6263    title       = {{Pthread}.h, Specifications Issue 7, {IEEE} Std 1003.1-2017},
6264    author      = {IEEE and {The Open Group}},
6265    year        = 2018,
6266    howpublished= {\href{http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html}
6267                  {http://\-pubs.opengroup.org/\-onlinepubs/\-9699919799/\-basedefs/\-pthread.h.html}},
6268}
6269
6270@manual{Python,
6271    keywords    = {Python},
6272    contributer = {pabuhr@plg},
6273    author      = {Python},
6274    title       = {Python Language Reference, Release 3.7.2},
6275    organization= {Python Software Foundation},
6276    address     = {\href{https://docs.python.org/3/reference/index.html}{https://\-docs.python.org/\-3/\-reference/\-index.html}},
6277    year        = 2018,
6278}
6279
6280% Q
6281
6282@inproceedings{Qthreads,
6283    keywords    = {user-level threading},
6284    author      = {Kyle B. Wheeler and Richard C. Murphy and Douglas Thain},
6285    title       = {Qthreads: An API for Programming with Millions of Lightweight Threads},
6286    booktitle   = {International Symposium on Parallel and Distributed Processing},
6287    organization= {IEEE},
6288    address     = {Miami, FL, USA},
6289    month       = apr,
6290    year        = 2008,
6291}
6292
6293@article{Grossman06,
6294    keywords    = {Cyclone, existential types, polymorphism, type variables},
6295    contributer = {a3moss@plg},
6296    author      = {Dan Grossman},
6297    title       = {Quantified Types in an Imperative Language},
6298    journal     = toplas,
6299    issue_date  = {May 2006},
6300    volume      = {28},
6301    number      = {3},
6302    month       = may,
6303    year        = 2006,
6304    issn        = {0164-0925},
6305    pages       = {429-475},
6306    url         = {http://doi.acm.org/10.1145/1133651.1133653},
6307    doi         = {10.1145/1133651.1133653},
6308    acmid       = {1133653},
6309    publisher   = {ACM},
6310    address     = {New York, NY, USA},
6311}
6312
6313@article{Nakaike15,
6314    keywords    = {hardware transactional memory},
6315    contributer = {pabuhr@plg},
6316    author      = {Nakaike, Takuya and Odaira, Rei and Gaudet, Matthew and Michael, Maged M. and Tomari, Hisanobu},
6317    title       = {Quantitative Comparison of Hardware Transactional Memory for Blue Gene/Q, zEnterprise {EC12}, {I}ntel Core, and {POWER8}},
6318    journal     = {SIGARCH Comput. Archit. News},
6319    volume      = {43},
6320    number      = {3},
6321    month       = jun,
6322    year        = {2015},
6323    pages       = {144--157},
6324    publisher   = {ACM},
6325    address     = {New York, NY, USA},
6326}
6327
6328@manual{Quasar,
6329    keywords    = {Quasar},
6330    contributer = {pabuhr@plg},
6331    author      = {Quasar},
6332    title       = {Quasar Documentation, Release 0.8.0},
6333    organization= {Parallel Universe},
6334    address     = {\href{http://docs.paralleluniverse.co/quasar}{http://\-docs.paralleluniverse.co/\-quasar}},
6335    year        = 2018,
6336}
6337
6338% R
6339
6340@article{Ada:rationale:preliminary,
6341    keywords    = {Ada},
6342    contributer = {pabuhr@plg},
6343    author      = {J. D. Ichbiah and J. C. Heliard and O. Roubine and
6344                   J. G. P. Barnes and B. Krieg-Brueckner and B. A. Wichmann},
6345    title       = {Rationale for the Design of the {ADA} Programming Language},
6346    journal     = sigplan,
6347    volume      = 14,
6348    number      = 6,
6349    month       = jun,
6350    year        = 1979,
6351    note        = {Part B},
6352}
6353
6354@book{Ada:rationale,
6355    keywords    = {Ada},
6356    contributer = {pabuhr@plg},
6357    author      = {Jean D. Ichbiah and John G. P. Barnes and Robert J. Firth and Mike Woodger},
6358    title       = {Rationale for the Design of the {ADA} Programming Language},
6359    publisher   = {Under Secretary of Defense, Research and Engineering},
6360    year        = 1986,
6361    address     = {Ada Joint Program Office, OUSDRE(R\&AT), The Pentagon, Washington, D. C., 20301, U.S.A.},
6362}
6363
6364@manual{Ada95,
6365    keywords    = {Ada},
6366    contributer = {pabuhr@plg},
6367    title       = {{A}da Reference Manual},
6368    edition     = {International Standard {ISO}/{IEC} {8652:1995(E)} with {COR.1:2000}},
6369    organization= {Intermetrics, Inc.},
6370    month       = dec,
6371    year        = 1995,
6372    note        = {Language and Standards Libraries}
6373}
6374
6375@manual{Ada12,
6376    keywords    = {ISO/IEC Ada},
6377    contributer = {pabuhr@plg},
6378    author      = {Ada12},
6379    title       = {Programming languages -- {Ada} ISO/IEC 8652:2012},
6380    edition     = {3rd},
6381    publisher   = {International Standard Organization},
6382    address     = {\href{https://www.iso.org/standard/61507.html}{https://\-www.iso.org/\-standard/\-61507.html}},
6383    year        = 2012,
6384}
6385
6386@manual{Ada95:annotated,
6387    keywords    = {Ada},
6388    contributer = {pabuhr@plg},
6389    title       = {Annotated {A}da Reference Manual},
6390    edition     = {International Standard {ISO}/{IEC} {8652:1995(E)} with {COR.1:2000}},
6391    organization = {Intermetrics, Inc.},
6392    month       = dec,
6393    year        = 1995,
6394    note        = {Language and Standards Libraries}
6395}
6396
6397@book{JavaRT00,
6398    keywords    = {real time, draft},
6399    contributer = {pabuhr@plg},
6400    author      = {Greg Bollella and Ben Brosgol and Peter Dibble and Steve Furr and James Gosling and David Hardin and Mark Turnbull},
6401    title       = {The Real-Time Specification for {J}ava},
6402    series      = {The Real-Time for Java Expert Group, {\small\textsf{http://\-www.rtj.org}}},
6403    publisher   = {Addison-Wesley},
6404    address     = {Boston},
6405    year        = 2000,
6406}
6407
6408@manual{JavaRT99,
6409    organization= {Real Time for Java Experts Group},
6410    address     = {{\small\textsf{http://\-www.rtj.org}}},
6411    month       = sep,
6412    year        = 1999,
6413}
6414
6415@article{Ronsse03,
6416    keywords    = {profiling, replay},
6417    contributer = {pabuhr@plg},
6418    author      = {Michiel Ronsse and De Bosschere, Koen and Mark Christiaens and Jacques Chassin de Kergommeaux and Dieter Kranzlm\"{u}ller},
6419    title       = {Record/Replay for Nondeterministic Program Executions},
6420    journal     = cacm,
6421    month       = sep,
6422    year        = 2003,
6423    volume      = 46,
6424    number      = 9,
6425    pages       = {62-67},
6426}
6427
6428@article{Robinson48,
6429    keywords    = {recursion, Ackermann function},
6430    contributer = {pabuhr@plg},
6431    author      = {Raphael Mitchel Robinson},
6432    title       = {Recursion and Double Recursion},
6433    publisher   = {American Mathematical Society},
6434    journal     = {Bulletin of the American Mathematical Society},
6435    volume      = 54,
6436    pages       = {987-993},
6437    year        = 1948,
6438}
6439
6440@article{Dijkstra:red,
6441    keywords    = {ada},
6442    contributer = {gjditchfield@plg},
6443    author      = {Edsger W. Dijkstra},
6444    title       = {On the RED Language submitted to the DoD},
6445    journal     = sigplan,
6446    year        = 1978,
6447    month       = oct,
6448    volume      = 13,
6449    number      = 10,
6450    pages       = {27-32},
6451}
6452
6453@article{Hesselink06,
6454    author      = {Wim H. Hesselink},
6455    title       = {Refinement Verification of the Lazy Caching Algorithm},
6456    journal     = acta,
6457    year        = 2006,
6458    month       = oct,
6459    volume      = 43,
6460    number      = 3,
6461    pages       = {195--222},
6462}
6463
6464@article{RemoteRendezvous,
6465    keywords    = {rendezvous, concurrency},
6466    contributer = {pabuhr@plg},
6467    author      = {N. D. Gammage and R. F. Kamel and L. M. Casey},
6468    title       = {Remote Rendezvous},
6469    journal     = spe,
6470    month       = oct,
6471    year        = 1987,
6472    volume      = 17,
6473    number      = 10,
6474    pages       = {741-755}
6475}
6476
6477@mastersthesis{Schuster99,
6478    author      = {Oliver Schuster},
6479    title       = {Replay of Concurrent Shared-Memory Programs},
6480    school      = {Universit\"at Mannheim},
6481    address     = {Mannheim, Deutschland},
6482    year        = 1999,
6483    month       = apr,
6484    type        = {Diplomarbeit},
6485    note        = {\href{https://plg.uwaterloo.ca/~usystem/theses/SchusterThesis.pdf}{https://\-plg.uwaterloo.ca/\-$\sim$usystem/\-theses/\-SchusterThesis.pdf}},
6486}
6487
6488@article{Euclid,
6489    keywords    = {Euclid},
6490    contributer = {pabuhr@plg},
6491    author      = {B. W. Lampson and J. J. Horning and R. L. London and J. G. Mitchell and G. L. Popek},
6492    title       = {Report on the Programming Language Euclid},
6493    journal     = sigplan,
6494    volume      = 12,
6495    number      = 2,
6496    month       = feb,
6497    year        = 1977,
6498    pages       = {1-79}
6499}
6500
6501@techreport{LOGLAN88,
6502    keywords    = {LOGLAN},
6503    contributer = {pabuhr@plg},
6504    author      = {Boleslaw Ciesielski and Antoni Kreczmar and Marek Lao and Andrzej Litwiniuk and Teresa Przytycka and Andrzej Salwicki and Jolanta Warpechowska and Marek Warpechowski and Andrzej Szalas and Danuta Szczepanska--Wasersztrum},
6505    title       = {Report on the Programming Language LOGLAN'88},
6506    institution = {Institute of Informatics, University of Warsaw},
6507    address     = {Pkin 8th Floor, 00-901 Warsaw, Poland},
6508    number      = {},
6509    month       = dec,
6510    year        = 1988,
6511}
6512
6513@mastersthesis{Schluntz17,
6514    keywords    = {constructors, destructors, tuples},
6515    author      = {Robert Schluntz},
6516    title       = {Resource Management and Tuples in \textsf{C}$\mathbf{\forall}$},
6517    school      = {School of Computer Science, University of Waterloo},
6518    year        = 2017,
6519    optaddress  = {Waterloo, Ontario, Canada, N2L 3G1},
6520    note        = {\href{https://uwspace.uwaterloo.ca/handle/10012/11830}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-11830}},
6521}
6522
6523@article{FH91,
6524    keywords    = {lcc},
6525    contributer = {gjditchfield@plg},
6526    author      = {Christopher W. Fraser and David R. Hanson},
6527    title       = {A Retargetable Compiler for {ANSI} {C}},
6528    journal     = sigplan,
6529    year        = 1991,
6530    month       = oct, volume = 26, number = 10, pages = {29-43},
6531    abstract    = {
6532        {\tt lcc} is a new retargetable compiler for ANSI C.  Versions for
6533        the VAX, Motorola 68020, SPARC, and MIPS are in production use at
6534        Princeton University and at AT\&T Bell Laboratories.  With a few
6535        exceptions, little about {\tt lcc} is unusual---it integrates
6536        several well engineered, existing techniques---but it is smaller
6537        and faster than most other C compilers, and it generates code of
6538        comparable quality.  {\tt lcc}'s target-independent front end
6539        performs a few simple, but effective, optimizations that contribute
6540        to good code; examples include simulating register declarations and
6541        partitioning switch statements into dense tables.  It also
6542        implements target-independent function tracing and expression-level
6543        profiling.
6544    }
6545}
6546
6547@article{Algol68revised,
6548    keywords    = {},
6549    contributer = {gjditchfield@plg},
6550    author      = {A. van Wijngaarden and B. J. Mailloux and J. E. L. Peck and
6551        C. H. A. Koster and M. Sintzoff and C. H. Lindsey and L. G. L. T.
6552        Meertens and R. G. Fisher},
6553    title       = {Revised Report on the Algorithmic Language {ALGOL} 68},
6554    journal     = sigplan,
6555    year        = 1977,
6556    month       = may,
6557    volume      = 12,
6558    number      = 5,
6559    pages       = {1-70}
6560}
6561
6562@article{scheme,
6563    keywords    = {},
6564    contributer = {gjditchfield@plg},
6565    author      = {Jonathan Rees and William Clinger},
6566    title       = {Revised$^3$ Report on the Algorithmic Language {S}cheme},
6567    journal     = sigplan,
6568    year        = 1986,
6569    month       = dec,
6570    volume      = 21,
6571    number      = 12,
6572    pages       = {37-79},
6573}
6574
6575@article{scheme5,
6576    keywords    = {scheme},
6577    contributer = {pabuhr@plg},
6578    author      = {H. Abelson and Adams, IV, N. I. and D. H. Bartley and G. Brooks and R. K. Dybvig and D. P. Friedman and
6579                   R. Halstead and C. Hanson and C. T. Haynes and E. Kohlbecker and D. Oxley and K. M. Pitman and G. J. Rozas and
6580                   G. L. Steele Jr. and G. J. Sussman and M. Wand and \emph{Ed. by} Richard Kelsey and William Clinger and Jonathan Rees},
6581    title       = {Revised$^5$ Report on the Algorithmic Language {S}cheme},
6582    journal     = sigplan,
6583    year        = 1998,
6584    month       = sep,
6585    volume      = 33,
6586    number      = 9,
6587    pages       = {26-76},
6588}
6589
6590@manual{Rust,
6591    keywords    = {Rust programming language},
6592    contributer = {pabuhr@plg},
6593    key         = {Rust},
6594    title       = {{R}ust Programming Language},
6595    optaddress  = {Rust Project Developers},
6596    year        = 2015,
6597    note        = {\href{https://doc.rust-lang.org/reference.html}{https://\-doc.rust-lang\-.org/\-reference.html}},
6598}
6599
6600@manual{Ruby,
6601    keywords    = {Ruby},
6602    contributer = {pabuhr@plg},
6603    author      = {Ruby},
6604    title       = {Ruby Documentation, Release 2.6.0},
6605    organization= {Python Software Foundation},
6606    address     = {\href{https://www.ruby-lang.org/en/documentation}{https://\-www.ruby-lang.org/\-en/\-documentation}},
6607    year        = 2018,
6608}
6609
6610% S
6611
6612@manual{Scala,
6613    keywords    = {Scala programming language},
6614    contributer = {pabuhr@plg},
6615    key         = {Scala},
6616    title       = {{S}cala Language Specification, Version 2.11},
6617    address     = {\'{E}cole Polytechnique F\'{e}d\'{e}rale de Lausanne},
6618    year        = 2016,
6619    note        = {\href{http://www.scala-lang.org/files/archive/spec/2.11}{http://\-www.scala-lang.org/\-files/\-archive/\-spec/\-2.11}},
6620}
6621
6622@inproceedings{Michael04,
6623    keywords    = {lock free, dynamic memory allocation},
6624    contributer = {pabuhr@plg},
6625    author      = {Maged M. Michael},
6626    title       = {Scalable Lock-free Dynamic Memory Allocation},
6627    booktitle   = {PLDI '04: Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation},
6628    location    = {Washington DC, USA},
6629    publisher   = {ACM},
6630    address     = {New York, NY, USA},
6631    volume      = 39,
6632    year        = 2004,
6633    month       = jun,
6634    pages       = {35-46},
6635}
6636
6637@article{Anderson92,
6638    keywords    = {light-weight tasks},
6639    contributer = {pabuhr@plg},
6640    author      = {Thomas E. Anderson and Brian N. Bershad and Edward D. Lazowska and Henry M. Levy},
6641    title       = {Scheduler Activations: Effective Kernel Support for the User-Level Management of Parallelism},
6642    journal     = tocs,
6643    volume      = 10,
6644    number      = 1,
6645    month       = feb,
6646    year        = 1992,
6647    pages       = {53-79},
6648}
6649
6650@manual{SELF,
6651    keywords    = {programming language, obect-oriented, polymorphism},
6652    contributer = {pabuhr@plg},
6653    author      = {Ole Agesen and Lars Bak and Craig Chambers and Bay-Wei Chang and Urs H{\o}lzle
6654                   and John H. Maloney and Randall B. Smith and David Ungar and Mario Wolczko},
6655    title       = {The {SELF} 3.0 Programmer's Reference Manual},
6656    organization= {Sun Microsystems, Inc., and Stanford University},
6657    year        = 1993,
6658}
6659
6660@inproceedings{Cardelli84,
6661    keywords    = {subtypes, recursive types, records, variants, object oriented},
6662    contributer = {gjditchfield@plg},
6663    author      = {Luca Cardelli},
6664    title       = {A Semantics of Multiple Inheritance},
6665    booktitle   = {Semantics of Data Types},
6666    year        = 1984,
6667    pages       = {51-67},
6668    editor      = {G. Kahn and D. B. MacQueen and G. D. Plotkin},
6669    publisher   = {Springer},
6670    note        = {Lecture Notes in Computer Science v. 173},
6671}
6672
6673@article{Baker78,
6674    keywords    = {Algol display, FUNARG's, Lisp 1.5, deep binding, environment trees, multiprogramming, shallow binding},
6675    contributer = {a3moss@uwaterloo.ca},
6676    author      = {Baker,Jr., Henry G.},
6677    title       = {Shallow Binding in Lisp 1.5},
6678    journal     = {Commun. ACM},
6679    issue_date  = {July 1978},
6680    volume      = 21,
6681    number      = 7,
6682    month       = jul,
6683    year        = 1978,
6684    issn        = {0001-0782},
6685    pages       = {565--569},
6686    numpages    = {5},
6687    url         = {http://doi.acm.org/10.1145/359545.359566},
6688    doi         = {10.1145/359545.359566},
6689    acmid       = {359566},
6690    publisher   = {ACM},
6691    address     = {New York, NY, USA}
6692}
6693
6694@article{Baker91,
6695    keywords    = {shallow binding, functional arrays},
6696    contributer = {a3moss@uwaterloo.ca},
6697    author      = {Baker, Henry G.},
6698    title       = {Shallow Binding Makes Functional Arrays Fast},
6699    journal     = {SIGPLAN Not.},
6700    issue_date  = {Aug. 1991},
6701    volume      = 26,
6702    number      = 8,
6703    month       = aug,
6704    year        = 1991,
6705    issn        = {0362-1340},
6706    pages       = {145--147},
6707    numpages    = {3},
6708    url         = {http://doi.acm.org/10.1145/122598.122614},
6709    doi         = {10.1145/122598.122614},
6710    acmid       = {122614},
6711    publisher   = {ACM},
6712    address     = {New York, NY, USA},
6713}
6714
6715@techreport{Adve95,
6716    keywords    = {shared memory, consistency models},
6717    contributer = {pabuhr@plg},
6718    author      = {Sarita V. Adve and Kourosh Gharachorloo},
6719    title       = {Shared Memory Consistency Models: A Tutorial},
6720    institution = {Western Research Laboratory},
6721    address     = {250 University Avenue, Palo Alto, California, 94301, U.S.A.},
6722    number      = {7},
6723    month       = sep,
6724    year        = 1995,
6725    note        = {\href{http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-95-7.pdf}{http://www.hpl.hp.com/\-techreports/\-Compaq-DEC/\-WRL-95-7.pdf}, Reprinted in \cite{Adve95reprint}.},
6726}
6727
6728@article{Adve95reprint,
6729    keywords    = {shared memory, consistency models},
6730    contributer = {pabuhr@plg},
6731    author      = {Sarita V. Adve and Kourosh Gharachorloo},
6732    journal     = {Computer},
6733    title       = {Shared Memory Consistency Models: A Tutorial},
6734    month       = dec,
6735    year        = 1996,
6736    volume      = 29,
6737    number      = 12,
6738    pages       = {66-76},
6739}
6740
6741@article{Nickolls08,
6742    author      = {Nickolls, John and Buck, Ian and Garland, Michael and Skadron, Kevin},
6743    title       = {Scalable Parallel Programming with CUDA},
6744    journal     = {Queue},
6745    volume      = {6},
6746    number      = {2},
6747    month       = mar,
6748    year        = 2008,
6749    pages       = {40-53},
6750    publisher   = {ACM},
6751    address     = {New York, NY, USA},
6752} 
6753
6754@inproceedings{Leissa14,
6755    title       = {{S}ierra: a {SIMD} extension for {C}++},
6756    author      = {Lei{\ss}a, Roland and Haffner, Immanuel and Hack, Sebastian},
6757    booktitle   = {Proceedings of the 2014 Workshop on Workshop on programming models for SIMD/Vector processing},
6758    pages       = {17-24},
6759    year        = {2014},
6760    organization= {ACM}
6761}
6762
6763@inproceedings{Howard76b,
6764    keywords    = {monitors},
6765    contributer = {pabuhr@plg},
6766    author      = {J. H. Howard},
6767    title       = {Signaling in Monitors},
6768    booktitle   = {Proceedings Second International Conference Software Engineering},
6769    address     = {San Francisco, U.S.A},
6770    publisher   = {IEEE Computer Society},
6771    month       = oct,
6772    year        = 1976,
6773    pages       = {47-52}
6774}
6775
6776@techreport{Schemenauer01,
6777    keywords    = {Phthon, generator, coroutine},
6778    contributer = {pabuhr@plg},
6779    author      = {Neil Schemenauer and Tim Peters and Magnus Lie Hetland},
6780    title       = {Simple Generators},
6781    month       = may,
6782    year        = 2001,
6783    note        = {\href{http://www.python.org/peps/pep-0255.html}{http://\-www.python.org/\-peps/\-pep-0255.html}},
6784}
6785
6786@inproceedings{Michael96,
6787    keywords    = {compare_and_swap, concurrent queue, lock-free, multiprogramming, non-blocking},
6788    contributer = {pabuhr@plg},
6789    author      = {Maged M. Michael and Michael L. Scott},
6790    title       = {Simple, Fast, and Practical Non-blocking and Blocking Concurrent Queue Algorithms},
6791    booktitle   = {Proceedings of the Fifteenth Annual ACM Symposium on Principles of Distributed Computing},
6792    series      = {PODC'96},
6793    year        = 1996,
6794    location    = {Philadelphia, Pennsylvania, USA},
6795    pages       = {267--275},
6796    numpages    = {9},
6797    publisher   = {ACM},
6798    address     = {New York, NY, USA},
6799}
6800
6801@article{Pennello80,
6802    contributer = {a3moss@uwaterloo.ca},
6803    author      = {Pennello, Tom and DeRemer, Frank and Meyers, Richard},
6804    title       = {A Simplified Operator Identification Scheme for {Ada}},
6805    journal     = {SIGPLAN Notices},
6806    issue_date  = {July-August 1980},
6807    volume      = {15},
6808    number      = {7 and 8},
6809    month       = jul,
6810    year        = {1980},
6811    issn        = {0362-1340},
6812    pages       = {82--87},
6813    numpages    = {6},
6814    url         = {http://doi.acm.org/10.1145/947680.947688},
6815    doi         = {10.1145/947680.947688},
6816    publisher   = {ACM},
6817    address     = {New York, NY, USA},
6818}
6819
6820@inproceedings{Dice10,
6821    keywords    = {hardware, synchronization, transactional memory},
6822    author      = {Dave Dice and Yossi Lev and Virendra J. Marathe and Mark Moir and Dan Nussbaum and Marek Olszewski},
6823    title       = {Simplifying Concurrent Algorithms by Exploiting Hardware Transactional Memory},
6824    booktitle   = {Proceedings of the Twenty-second Annual ACM Symposium on Parallelism in Algorithms and Architectures},
6825    series      = {SPAA'10},
6826    year        = 2010,
6827    location    = {Thira, Santorini, Greece},
6828    pages       = {325-334},
6829    numpages    = {10},
6830    publisher   = {ACM},
6831    address     = {New York, NY, USA},
6832}
6833
6834@article{PDM:overload,
6835    keywords    = {compilation},
6836    contributer = {gjditchfield@plg},
6837    author      = {Tom Pennello and Frank DeRemer and Richard Meyers},
6838    title       = {A Simplified Operator Identification Scheme for {Ada}},
6839    journal     = sigplan,
6840    year        = 1980,
6841    month       = {July--August},
6842    volume      = 15,
6843    number      = {7/8},
6844    pages       = {82-87},
6845    comment     = {
6846        The two-pass (bottom-up, top-down) overload resolution algorithm
6847        for Ada, with a proof that two passes suffice and a claim that two
6848        are necessary.  See \cite{D:overload}.
6849    }
6850}
6851
6852@book{SimulaBegin,
6853    author      = {Graham M. Birtwistle and Ole-Johan Dahl and Bj{\o}rn Myhrhaug and Kristen Nygaard},
6854    title       = {{SIMULA} begin},
6855    publisher   = {Studentlitteratur},
6856    year        = {1980},
6857    address     = {Lund, Sweden},
6858    edition     = {2nd},
6859}
6860
6861@book{Simula67,
6862    author      = {O-J Dahl and B. Myhrhaug and K. Nygaard},
6863    title       = {Simula67 Common Base Language},
6864    month       = oct,
6865    year        = 1970,
6866    publisher   = {Norwegian Com\-puting Center},
6867    address     = {Oslo Norway},
6868}
6869
6870@book{smalltalk,
6871    keywords    = {Smalltalk, abstract class, protocol},
6872    contributer = {gjditchfield@plg},
6873    author      = {A. Goldberg and D. Robson}, 
6874    title       = {Smalltalk-80: The Language and its Implementation},
6875    publisher   = {Addison-Wesley},
6876    address     = {Reading},
6877    year        = 1983
6878}
6879
6880@inproceedings{Edelson92,
6881    keywords    = {persistence, pointers},
6882    contributer = {pabuhr@plg},
6883    author      = {Daniel R. Edelson},
6884    title       = {Smart Pointers: They're Smart, but They're Not Pointers},
6885    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Technical Conference Proceedings},
6886    organization= {USENIX Association},
6887    address     = {Portland, Oregon, U.S.A.},
6888    month       = aug,
6889    year        = 1992,
6890    pages       = {1-19},
6891}
6892
6893@book{SNOBOL,
6894    keywords    = {SNOBOL4},
6895    contributer = {pabuhr@plg},
6896    author      = {R. E. Griswold and J. F. Poage and I. P. Polonsky},
6897    title       = {The SNOBOL4 Programming Language},
6898    edition     = {2nd},
6899    publisher   = {Prentice-Hall},
6900    address     = {Englewood Cliffs},
6901    year        = 1971,
6902}
6903
6904@article{Sutter05b,
6905    keywords    = {concurrency},
6906    contributer = {pabuhr@plg},
6907    author      = {Herb Sutter and James Larus},
6908    title       = {Software and the Concurrency Revolution},
6909    journal     = {Queue},
6910    year        = 2005,
6911    month       = sep,
6912    volume      = 3,
6913    number      = 7,
6914    pages       = {54-62},
6915}
6916
6917@inproceedings{raytheon,
6918    keywords    = {cobol},
6919    contributer = {gjditchfield@plg},
6920    author      = {Robert G. Lanergan and Charles A. Grasso},
6921    title       = {Software Engineering with Reusable Designs and Code},
6922    booktitle   = {Workshop on Reusability in Programming},
6923    year        = 1983,
6924    month       = sep,
6925    pages       = {224-234},
6926    organization= {{ITT} Programming},
6927    summary     = {
6928        60\% of business application design and code are redundant.
6929        Three standard program plans are used.  Reuse doubles productivity
6930        during development and greatly helps program comprehension during
6931        maintenance.
6932    }
6933}
6934
6935@article{Hecht86,
6936    keywords    = {exception handling, robustness},
6937    contributer = {pabuhr@plg},
6938    author      = {H. Hecht and M. Hecht},
6939    title       = {Software Reliability in the Systems Context},
6940    journal     = ieeese,
6941    year        = 1986,
6942    volume      = 12,
6943    number      = 1,
6944    pages       = {51-58},
6945}
6946
6947@inproceedings{Herlihy03,
6948    author      = {Maurice Herlihy and Victor Luchangco and Mark Moir and William N. {Scherer III}},
6949    title       = {Software Transactional Memory for Dynamic-sized Data Structures},
6950    booktitle   = {Proceedings of the Twenty-second Annual Symposium on Principles of Distributed Computing},
6951    series      = {PODC '03},
6952    year        = {2003},
6953    location    = {Boston, Massachusetts},
6954    pages       = {92-101},
6955    numpages    = {10},
6956    publisher   = {ACM},
6957    address     = {New York, NY, USA},
6958}
6959
6960@article{Dijkstra65a,
6961    keywords    = {N-thread software-solution mutual exclusion},
6962    contributer = {pabuhr@plg},
6963    author      = {Edsger W. Dijkstra},
6964    title       = {Solution of a Problem in Concurrent Programming Control},
6965    journal     = cacm,
6966    volume      = 8,
6967    number      = 9,
6968    month       = sep,
6969    year        = 1965,
6970    pages       = {569},
6971    publisher   = {ACM},
6972    address     = {New York, NY, USA},
6973}
6974
6975@inproceedings{Chen05,
6976    keywords    = {fixed-priority, preemption},
6977    contributer = {pabuhr@plg},
6978    author      = {Jiongxiong Chen and Ashif Harji and Peter Buhr},
6979    title       = {Solution Space for Fixed-Priority with Preemption Threshold},
6980    booktitle   = {Proceedings of the 11th Real Time and Embedded Technology and Applications Symposium (RTAS'05)},
6981    organization= {IEEE},
6982    address     = {San Francisco, CA, U.S.A},
6983    month       = mar,
6984    year        = 2005,
6985    pages       = {385-394}
6986}
6987
6988@inproceedings{Tiemann88,
6989    keywords    = {wrappers},
6990    contributer = {pabuhr@plg},
6991    author      = {Michael D. Tiemann},
6992    title       = {Solving the RPC problem in GNU {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
6993    booktitle   = {Proceedings of the USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference},
6994    organization= {USENIX Association},
6995    address     = {Denver, Colorado, U.S.A},
6996    month       = oct,
6997    year        = 1988,
6998    pages       = {343-361}
6999}
7000
7001@article{Smith98,
7002    keywords    = {Polymorphic C},
7003    contributor = {a3moss@uwaterloo.ca},
7004    title       = {A sound polymorphic type system for a dialect of {C}},
7005    author      = {Smith, Geoffrey and Volpano, Dennis},
7006    journal     = {Science of computer programming},
7007    volume      = 32,
7008    number      = {1-3},
7009    pages       = {49-72},
7010    year        = {1998},
7011    publisher   = {Elsevier}
7012}
7013
7014@book{Campbell74,
7015    keywords    = {path expressions},
7016    contributer = {pabuhr@plg},
7017    author      = {R. H. Campbell and A. N. Habermann},
7018    title       = {The Specification of Process Synchronization by Path Expressions},
7019    publisher   = {Springer},
7020    year        = 1974,
7021    volume      = 16,
7022    pages       = {89-102},
7023    series      = {Lecture Notes in Computer Science},
7024}
7025
7026@article{Bentley85,
7027    keywords    = {CSP, concurrency},
7028    contributer = {pabuhr@plg},
7029    author      = {J. Bentley},
7030    title       = {A Spelling Checker},
7031    journal     = cacm,
7032    month       = may,
7033    year        = 1985,
7034    volume      = 28,
7035    number      = 5,
7036    pages       = {456-462},
7037}
7038
7039@manual{POSIX01,
7040    keywords    = {POSIX, Standard},
7041    contributer = {pabuhr@plg},
7042    key         = {POSIX},
7043    title       = {1003.1 Standard for Information Technology -- Portable Operating System Interface (POSIX), System Interface, Issue 6},
7044    organization= {IEEE and The Open Group},
7045    year        = 2001,
7046}
7047
7048@manual{POSIX08,
7049    keywords    = {POSIX, Standard},
7050    contributer = {pabuhr@plg},
7051    key         = {POSIX},
7052    title       = {1003.1 Standard for Information Technology -- Portable Operating System Interface (POSIX), Base Specifications, Issue 7},
7053    organization= {IEEE and The Open Group},
7054    year        = 2008,
7055}
7056
7057@inproceedings{ML:NJ,
7058    keywords    = {continuations, ML},
7059    contributer = {pabuhr@plg},
7060    author      = {A. Appel and D. MacQueen},
7061    title       = {A Standard {ML} Compiler},
7062    booktitle   = {Functional Programming Languages and Computer Architecture},
7063    publisher   = {Springer},
7064    series      = {Lecture Notes in Computer Science},
7065    volume      = 274,
7066    year        = 1987,
7067    pages       = {301-324},
7068}
7069
7070@techreport{MLreport,
7071    keywords    = {ML, polymorphism},
7072    contributer = {pabuhr@plg},
7073    author      = {R. Milner},
7074    title       = {The Standard {ML} Core Language},
7075    institution = {},
7076    number      = {Polymorphism II.2},
7077    month       = oct,
7078    year        = 1985
7079}
7080
7081@inproceedings{Ghelli,
7082    keywords    = {},
7083    contributer = {gjditchfield@plg},
7084    author      = {Giorgio Ghelli},
7085    title       = {A Static Type System for Message Passing},
7086    crossref    = "OOPSLA91",
7087    pages       = {129-145},
7088    summary     = {
7089        A strong, statically checked type system for object oriented
7090        languages is defined by modelling methods as overloaded functions
7091        with a "self" parameter, with dynamic overload resolution.  This
7092        allows covariant method redefinition.  However, if equality is
7093        covariantly redefined for Point and ColoredPoint classes, and a
7094        ColoredPoint is compared to a Point, Point equality will be used,
7095        even if self is the colored point!
7096    }
7097}
7098
7099@article{Dijkstra68b,
7100    keywords    = {semaphore, P/V},
7101    contributer = {pabuhr@plg},
7102    author      = {E. W. Dijkstra},
7103    title       = {The Structure of the ``{THE}''--Multiprogramming System},
7104    journal     = cacm,
7105    month       = may,
7106    year        = 1968,
7107    volume      = 11,
7108    number      = 5,
7109    pages       = {341-346}
7110}
7111
7112@misc{Sutter15,
7113    contributer = {pabuhr@plg},
7114    author      = {Herb Sutter and Bjarne Stroustrup and Gabriel Dos Reis},
7115    title       = {Structured bindings},
7116    issue_date  = {2015-10-14},
7117    month       = oct,
7118    year        = 2015,
7119    pages       = {1-6},
7120    numpages    = {6},
7121    howpublished= {\href{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf}{http://\-www.open-std.org/\-jtc1/\-sc22/\-wg21/\-docs/\-papers/\-2015/\-p0144r0.pdf}},
7122}
7123
7124@book{Holt78,
7125    keywords    = {operating systems, concurrency},
7126    contributer = {pabuhr@plg},
7127    author      = {R. C. Holt and G. S. Graham and E. D. Lazowska and M. A. Scott},
7128    title       = {Structured Concurrent Programming with Operating System Applications},
7129    publisher   = {Addison-Wesley},
7130    address     = {Boston},
7131    year        = 1978,
7132}
7133
7134@article{Stevens74,
7135    keywords    = {coupling, cohesion},
7136    contributer = {pabuhr@plg},
7137    author      = {W. P. Stevens and and G. J. Myers and L. L. Constantine},
7138    title       = {Structured Design},
7139    journal     = ibmsj,
7140    year        = 1974,
7141    volume      = 13,
7142    number      = 2,
7143    pages       = {115-139},
7144}
7145
7146@article{Hansen72b,
7147    keywords    = {critical region},
7148    contributer = {pabuhr@plg},
7149    author      = {Per {Brinch Hansen}},
7150    title       = {Structured Multiprogramming},
7151    journal     = cacm,
7152    volume      = 15,
7153    number      = 7,
7154    month       = jul,
7155    year        = 1972,
7156    pages       = {574-578},
7157}
7158
7159@article{Knuth74,
7160    keywords    = {structured programming, goto statement},
7161    contributer = {pabuhr@plg},
7162    author      = {Donald E. Knuth},
7163    title       = {Structured Programming with go to Statements},
7164    journal     = acmcs,
7165    volume      = 6,
7166    number      = 4,
7167    month       = dec,
7168    year        = 1974,
7169    pages       = {261-301},
7170    issn        = {0360-0300},
7171    doi         = {http://doi.acm.org/10.1145/356635.356640},
7172    publisher   = {ACM},
7173    address     = {New York, NY, USA},
7174}
7175
7176@article{Lang98,
7177    keywords    = {real-time, exception handling},
7178    contributer = {pabuhr@plg},
7179    author      = {Jun Lang and David B. Stewart},
7180    title       = {A Study of the Applicability of Existing Exception-Handling Techniques to Component-Based Real-Time Software Technology},
7181    journal     = toplas,
7182    month       = mar,
7183    year        = 1998,
7184    volume      = 20,
7185    number      = 2,
7186    pages       = {274-301},
7187}
7188
7189@mastersthesis{Fortier89,
7190    keywords    = {monitors},
7191    contributer = {pabuhr@plg},
7192    author      = {Michel Fortier},
7193    title       = {Study of Monitors},
7194    school      = {Department of Computer Science, University of Waterloo},
7195    year        = 1989,
7196    address     = {Waterloo, Ontario, Canada, N2L 3G1},
7197}
7198
7199@techreport{AmadioCardelli,
7200    keywords    = {},
7201    contributer = {gjditchfield@plg},
7202    author      = {Roberto M. Amadio and Luca Cardelli},
7203    title       = {Subtyping Recursive Types},
7204    institution = {Digital Equipment Corporation Systems Research Center},
7205    year        = 1990,
7206    address     = {130 Lytton Avenue, Palo Alto, California 94301},
7207    month       = aug,
7208    number      = 62,
7209    summary     = {
7210        \[ (s \leq t \Rightarrow \alpha \leq \beta) \Rightarrow
7211               \mu s.\alpha leq \mu t.\beta  \]
7212        \[ \alpha = C[\alpha] \and \beta = C[\beta] \and C contractive
7213               \Rightarrow \alpha = \beta \]
7214        where a type \(\alpha\) is contractive in the type variable \(t\)
7215        if either \(t\) does not occur free in \(\alpha\), or \(\alpha\)
7216        can be rewritten via unfolding as a type of the shape
7217        \(\alpha_1 \rightarrow \alpha_2\), and unfolding rewrites
7218        \(\mu t.\alpha\) as \([t\leftarrow\mu t.\alpha]\alpha\).  An
7219        algorithm for finding type contexts \(C\) is given.
7220    }
7221}
7222
7223@techreport{Dijkstra80,
7224    keywords    = {split binary semaphores, general to binary},
7225    contributer = {pabuhr@plg},
7226    author      = {Edsger W. Dijkstra},
7227    title       = {The Superfluity of the General Semaphore},
7228    institution = {Nuenen},
7229    address     = {Netherlands},
7230    number      = {EWD734},
7231    month       = apr,
7232    year        = 1980,
7233}
7234
7235@inproceedings{Burns81,
7236    keywords    = {N-thread software-solution mutual exclusion},
7237    contributer = {pabuhr@plg},
7238    author      = {James E. Burns},
7239    title       = {Symmetry in Systems of Asynchronous Processes},
7240    booktitle   = {22nd Annual Symposium on Foundations of Computer Science, Nashville, TN, USA},
7241    year        = 1981,
7242    month       = oct,
7243    organization= {IEEE Computer Society},
7244    address     = {Los Angeles, CA, USA},
7245    pages       = {169-174},
7246}
7247
7248@article{Coffman71,
7249    keywords    = {deadlock},
7250    contributer = {pabuhr@plg},
7251    author      = {E. G. {Coffman, Jr.} and M. J. Elphick and A. Shoshani},
7252    title       = {System Deadlocks},
7253    journal     = acmcs,
7254    volume      = 3,
7255    number      = 2,
7256    month       = jun,
7257    year        = 1971,
7258    pages       = {67-78},
7259    publisher   = {ACM Press},
7260    address     = {New York, NY, USA},
7261    doi         = {http://doi.acm.org/10.1145/356586.356588},
7262}
7263
7264@phdthesis{Holmes99,
7265    keywords    = {synchronization, inheritance anomaly},
7266    contributer = {pabuhr@plg},
7267    author      = {David Holmes},
7268    title       = {Synchronisation Rings: Composable Synchronisation for Object-Oriented Systems},
7269    school      = {Department of Computing, Macquarie University},
7270    month       = oct,
7271    year        = 1999,
7272    address     = {Sydney, Australia},
7273}
7274
7275@book{Taubenfeld06,
7276    keywords    = {concurrency, synchronization},
7277    author      = {Gadi Taubenfeld},
7278    title       = {Synchronization Algorithms and Concurrent Programming},
7279    publisher   = {Pearson/Prentice-Hall},
7280    address     = {Harlow, England},
7281    year        = 2006,
7282}
7283
7284@article{Buhr92b,
7285    keywords    = {concurrency, exception handling, interventions},
7286    contributer = {pabuhr@plg},
7287    author      = {Peter A. Buhr and Hamish I. Macdonald and C. Robert Zarnke},
7288    title       = {Synchronous and Asynchronous Handling of Abnormal Events in the $\mu${S}ystem},
7289    journal     = spe,
7290    volume      = 22,
7291    number      = 9,
7292    month       = sep,
7293    year        = 1992,
7294    pages       = {735-776},
7295}
7296
7297@inproceedings{Greenwald96,
7298    keywords    = {compare and swap, hardware atomicity},
7299    contributer = {pabuhr@plg},
7300    author      = {Michael Greenwald and David Cheriton},
7301    title       = {The Synergy between Non-blocking Synchronization and Operating System Structure},
7302    booktitle   = {Proceedings of the Second USENIX Symposium on Operating Systems Design and Implementation},
7303    organization= {USENIX Association},
7304    address     = {Seattle, Washington, U.S.A.},
7305    month       = oct,
7306    year        = 1996,
7307    pages       = {123-136},
7308}
7309
7310@inbook{SunLWP,
7311    keywords    = {light-weight processes, threads},
7312    contributer = {pabuhr@plg},
7313    key         = {Sun},
7314    title       = {System Services Overview, Lightweight Processes},
7315    chapter     = {6},
7316    pages       = {71-111},
7317    publisher   = {Sun Microsystems},
7318    month       = may,
7319    year        = 1988,
7320    note        = {available as Part Number: 800-1753-10},
7321}
7322
7323@article{Randell75,
7324    contributer = {pabuhr@plg},
7325    author      = {Brian Randell},
7326    title       = {System Structure for Software Fault Tolerance},
7327    journal     = ieeese,
7328    volume      = {SE-1},
7329    number      = 2,
7330    month       = jun,
7331    year        = 1975,
7332    pages       = {220-232},
7333}
7334
7335@book{Modula-3,
7336    keywords    = {language reference manual},
7337    contributer = {pabuhr@plg},
7338    author      = {Andrew Birrell and Mark R. Brown and Luca Cardelli and Jim Donahue and Lucille Glassman and John Gutag and Jim Harning and Bill Kalsow and Roy Levin and Greg Nelson},
7339    title       = {Systems Programming with Modula-3},
7340    publisher   = {Prentice-Hall},
7341    address     = {Englewood Cliffs},
7342    year        = 1991,
7343    series      = {Prentice-Hall Series in Innovative Technology}
7344}
7345
7346@article{SysVABI,
7347  keywords = {System V ABI},
7348  contributer = {a3moss@uwaterloo.ca},
7349  title={System {V} application binary interface},
7350  author={Matz, Michael and Hubicka, Jan and Jaeger, Andreas and Mitchell, Mark},
7351  journal={AMD64 Architecture Processor Supplement, Draft v0},
7352  volume={99},
7353  year={2013}
7354}
7355
7356% T
7357
7358@article{Yeager91,
7359    keywords    = {teaching, concurrency},
7360    contributer = {pabuhr@plg},
7361    author      = {Dorian P. Yeager},
7362    title       = {Teaching Concurrency in the Programming Languages Course},
7363    journal     = {SIGCSE BULLETIN},
7364    volume      = 23,
7365    number      = 1,
7366    month       = mar,
7367    year        = 1991,
7368    pages       = {155-161},
7369    note        = {The Papers of the Twenty-Second SIGCSE Technical Symposium on Computer Science Education,
7370                   March. 7--8, 1991, San Antonio, Texas, U.S.A.},
7371}
7372
7373@article{ml,
7374    keywords    = {ML, polymorphism},
7375    contributer = {gjditchfield@plg},
7376    author      = {Robin Milner},
7377    title       = {A Theory of Type Polymorphism in Programming},
7378    journal     = jcss,
7379    year        = 1978,
7380    volume      = 17, pages = {348-375}
7381}
7382
7383@book{Thoth,
7384    keywords    = {messages, concurrency},
7385    contributer = {pabuhr@plg},
7386    author      = {D. R. Cheriton},
7387    title       = {The Thoth System: Multi-Process Structuring and Portability},
7388    publisher   = {American Elsevier},
7389    year        = 1982
7390}
7391
7392@article{Boehm05,
7393    keywords    = {concurrency, C++},
7394    contributer = {pabuhr@plg},
7395    author      = {Hans-J. Boehm},
7396    title       = {Threads Cannot be Implemented as a Library},
7397    journal     = sigplan,
7398    volume      = 40,
7399    number      = 6,
7400    month       = jun,
7401    year        = 2005,
7402    pages       = {261-268},
7403}
7404
7405@misc{TIOBE,
7406    contributer = {pabuhr@plg},
7407    key         = {TIOBE Index},
7408    author      = {{TIOBE Index}},
7409    howpublished= {\href{http://www.tiobe.com/tiobe_index}{http://\-www.tiobe.com/\-tiobe\_index}},
7410}
7411
7412@misc{ThreadModel,
7413    contributer = {pabuhr@plg},
7414    key         = {ThreadModel},
7415    title       = {Thread (computing)},
7416    author      = {{Threading Model}},
7417    howpublished= {\href{https://en.wikipedia.org/wiki/Thread_(computing)}{https://\-en.wikipedia.org/\-wiki/\-Thread\_(computing)}},
7418}
7419
7420@misc{Bumbulis90,
7421    keywords    = {parameter inference, ForceN},
7422    contributer = {gjditchfield@plg},
7423    author      = {Peter Bumbulis},
7424    title       = {Towards Making Signatures First-Class},
7425    howpublished= {personal communication},
7426    month       = sep,
7427    year        = 1990,
7428}
7429
7430@techreport{alphard:preempt,
7431    keywords    = {},
7432    contributer = {gjditchfield@plg},
7433    author      = {Mary Shaw and Wm. A. Wulf},
7434    title       = {Toward Relaxing Assumptions in Languages and Their Implementations},
7435    institution = {Carnegie-Mellon University},
7436    year        = 1980,
7437    month       = jan,
7438    note        = {Reprinted in \cite{alphard}.}
7439}
7440
7441@inproceedings{Reynolds74,
7442    keywords    = {universal quantification, typed lambda calculus},
7443    contributer = {gjditchfield@plg},
7444    author      = {John C. Reynolds},
7445    title       = {Towards a Theory of Type Structure},
7446    booktitle   = {Colloque sur la Programmation},
7447    year        = 1974,
7448    pages       = {408-423},
7449    editor      = {B. Robinet},
7450    publisher   = {Springer},
7451    note        = {Lecture Notes in Computer Science, v. 19},
7452    abstract    = {
7453       
7454    }
7455}
7456
7457@incollection{Hoare72,
7458    keywords    = {critical region, concurrency},
7459    contributer = {pabuhr@plg},
7460    author      = {C. A. R. Hoare},
7461    title       = {Towards a Theory of Parallel Programming},
7462    booktitle   = {Operating Systems Techniques},
7463    editor      = {C. A. R. Hoare and R. H. Perott},
7464    publisher   = {Academic Press, New York},
7465    year        = 1972,
7466    pages       = {61-71},
7467}
7468
7469@inproceedings{Mitchell90,
7470    keywords    = {polymorphism, lambda calculus, bounded quantification},
7471    contributer = {gjditchfield@plg},
7472    author      = {John C. Mitchell},
7473    title       = {Toward a Typed Foundation for Method Specialization and Inheritance},
7474    booktitle   = {Conference Record of the Seventeenth Annual ACM Symposium
7475        on Principles of Programming Languages},
7476    year        = 1990,
7477    month       = jan, pages = {109-124},
7478    organization= {Association for Computing Machinery},
7479    abstract    = {
7480        This paper disucsses the phenomenon of {\em method specialization}
7481        in object-oriented programming languages.  A typed function
7482        calculus of objects and classes is presented, featuring method
7483        specialization when methods are added or redefined.  The soundness
7484        of the typing rules (without subtyping) is suggested by a
7485        translation into a more traditional calculus with
7486        recursively-defined record types.  However, semantic questions
7487        regarding the subtype relation on classes remain open.
7488    }
7489}
7490
7491@article{EL1,
7492    keywords    = {polymorphism},
7493    contributer = {pabuhr@plg},
7494    author      = {B. Wegbreit},
7495    title       = {The Treatment of Data Types in {EL1}},
7496    journal     = cacm,
7497    volume      = 17,
7498    number      = 5,
7499    month       = may,
7500    year        = 1974,
7501    pages       = {251-264},
7502}
7503
7504@mastersthesis{Till89,
7505    keywords    = {C, multiple return values, tuples},
7506    contributer = {pabuhr@plg},
7507    author      = {David W. Till},
7508    title       = {Tuples In Imperative Programming Languages},
7509    school      = {Department of Computer Science, University of Waterloo},
7510    year        = 1989,
7511    address     = {Waterloo, Ontario, Canada, N2L 3G1},
7512}
7513
7514@article{turing:old,
7515    keywords    = {verification, context conditions, faithful execution},
7516    contributer = {gjditchfield@plg},
7517    author      = {R. C. Holt and J. R. Cordy},
7518    title       = {The Turing Programming Language},
7519    journal     = cacm,
7520    year        = 1988,
7521    month       = dec,
7522    volume      = 31, number = 12, pages = {1410-1423}
7523}
7524
7525@book{Turing,
7526    keywords    = {verification, context conditions, faithful execution},
7527    contributer = {pabuhr@plg},
7528    author      = {R. C. Holt},
7529    title       = {Turing Reference Manual},
7530    publisher   = {Holt Software Associates Inc.},
7531    year        = 1992,
7532    edition     = {3rd},
7533}
7534
7535@techreport{Dijkstra79,
7536    keywords    = {split binary semaphores},
7537    contributer = {pabuhr@plg},
7538    author      = {Edsger W. Dijkstra},
7539    title       = {A Tutorial on the Split Binary Semaphore},
7540    institution = {Nuenen},
7541    address     = {Netherlands},
7542    number      = {EWD703},
7543    month       = mar,
7544    year        = 1979,
7545}
7546
7547@book{pldesign,
7548    keywords    = {},
7549    editor      = {Anthony I. Wasserman},
7550    title       = {Tutorial: Programming Language Design},
7551    publisher   = {Computer Society Press},
7552    address     = {Los Alamitos},
7553    year        = 1980
7554}
7555
7556@misc{TraceCompass,
7557    contributer = {pabuhr@plg},
7558    key         = {Trace Compass},
7559    author      = {{T}race {C}ompass},
7560    howpublished= {\href{https://projects.eclipse.org/proposals/trace-compass}{https://\-projects.eclipse.org/\-proposals/\-trace-compass}},
7561}
7562 
7563@article{Leroy00,
7564    keywords    = {type-systems, exceptions},
7565    contributer = {pabuhr@plg},
7566    author      = {Xavier Leroy and Fran\c{c}ois Pessaux},
7567    title       = {Type-Based Analysis of Uncaught Exceptions},
7568    journal     = toplas,
7569    month       = mar,
7570    year        = 2000,
7571    volume      = 22,
7572    number      = 2,
7573    pages       = {340-377},
7574    comment     = {
7575        Argues against declaring exceptions on routine definitions.
7576    },
7577}
7578
7579@article{Cormack90,
7580    keywords    = {polymorphism},
7581    contributer = {pabuhr@plg},
7582    author      = {G. V. Cormack and A. K. Wright},
7583    title       = {Type-dependent Parameter Inference},
7584    journal     = sigplan,
7585    volume      = 25,
7586    number      = 6,
7587    month       = jun,
7588    publisher   = {ACM},
7589    address     = {New York, NY, USA},
7590    year        = 1990,
7591    pages       = {127-136},
7592    note        = {Proceedings of the ACM Sigplan'90 Conference on Programming Language Design and Implementation
7593                   June 20-22, 1990, White Plains, New York, U.S.A.},
7594}
7595
7596@article{concatenation,
7597    keywords    = {record concatenation, isa},
7598    contributer = {gjditchfield@plg},
7599    author      = {N. Wirth},
7600    title       = {Type Extensions},
7601    journal     = toplas,
7602    volume      = {10},
7603    number      = {2},
7604    pages       = {204-214},
7605    month       = apr, year = 1988,
7606    comment     = {
7607        Extended record types add fields to their base record.  Assignment
7608        truncations.  Pointers can point at extended type instances.  For
7609        polymorphism, call by value is assignment, and call by reference is
7610        pointer passing.  Overloading isn't discussed.  Type information
7611        can be recovered through an ``is'' type test or through type guards
7612        (casts).  A version of the WITH statement could avoid repeated
7613        checking.
7614
7615        Private/public access to record fields can be provided by exporting
7616        a base type, and using a private extension. Statically allocated
7617        instances need a compiler hint specifying the maximum size of the
7618        private type.
7619
7620        Type checking is cheap (if the creation of pointer values is
7621        controlled).  Types have type descriptors.  Extension descriptors
7622        point at their direct base.  Heap objects point at their
7623        descriptor, and reference parameters are accompanied by type
7624        descriptor parameters.  ``v is t0'' loops along the chain of
7625        descriptors.
7626    }
7627}
7628
7629% U
7630
7631@book{uC++book,
7632    keywords    = {control structure, concurrency, uC++},
7633    contributer = {pabuhr@plg},
7634    author      = {Peter A. Buhr},
7635    title       = {Understanding Control Flow: Concurrent Programming using $\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
7636    publisher   = {Springer},
7637    address     = {Switzerland},
7638    year        = 2016,
7639}
7640
7641@article{Cardelli85,
7642    keywords    = {polymorphism},
7643    contributer = {pabuhr@plg},
7644    author      = {Luca Cardelli and Peter Wegner},
7645    title       = {On Understanding Types, Data Abstractions, and Polymorphism},
7646    journal     = acmcs,
7647    month       = dec,
7648    year        = 1985,
7649    volume      = 17,
7650    number      = 4,
7651    pages       = {471-522},
7652}
7653
7654@inproceedings{Wilson92,
7655    keywords    = {garbage collection survey},
7656    contributer = {pabuhr@plg},
7657    author      = {Paul R. Wilson},
7658    title       = {Uniprocessor Garbage Collection Techniques},
7659    booktitle   = {Proceedings of the International Workshop on Memory Management},
7660    location    = {St. Malo, France},
7661    publisher   = {Springer},
7662    series      = {Lecture Notes in Computer Science},
7663    volume      = 637,
7664    month       = sep,
7665    year        = {1992},
7666    pages       = {1-42},
7667}
7668
7669@inproceedings{Hewitt73,
7670    author      = {Carl Hewitt and Peter Bishop and Richard Steiger},
7671    title       = {A Universal Modular {ACTOR} Formalism for Artificial Intelligence},
7672    booktitle   = {Proceedings of the 3rd International Joint Conference on Artificial Intelligence},
7673    address     = {Standford, California, U.S.A.},
7674    pages       = {235-245},
7675    month       = aug,
7676    year        = 1973,
7677}
7678
7679@article{Bourne78,
7680    keywords    = {Shell},
7681    contributer = {pabuhr@plg},
7682    author      = {S. R. Bourne},
7683    title       = {The UNIX Shell},
7684    journal     = {The Bell System Technical Journal},
7685    volume      = {57, part 2},
7686    month       = {July--August},
7687    year        = 1978,
7688    pages       = {1971-1990},
7689}
7690
7691@inproceedings{Krischer12,
7692    keywords    = {exception, usability, asynchronous, assertion, injection, logging},
7693    contributer = {pabuhr@plg},
7694    author      = {Roy Krischer and Peter A. Buhr},
7695    title       = {Usability Challenges in Exception Handling},
7696    booktitle   = {5th International Workshop on Exception Handling (WEH)},
7697    optorganization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},
7698    address     = {Zurich, Switzerland},
7699    month       = jun,
7700    year        = 2012,
7701    pages       = {7-13},
7702}
7703
7704@techreport{Harmony,
7705    keywords    = {messages, concurrency},
7706    contributer = {pabuhr@plg},
7707    author      = {W. Morven Gentleman},
7708    title       = {Using the Harmony Operating System},
7709    institution = {National Research Council of Canada, Ottawa, Canada},
7710    number      = {24685},
7711    month       = may,
7712    year        = 1985
7713}
7714
7715@article{delegation,
7716    keywords    = {delegation, inheritance, actors},
7717    contributer = {gjditchfield@plg},
7718    author      = {Henry Lieverman},
7719    title       = {Using Prototypical Objects to Implement Shared Behavior in
7720                  Object Oriented Systems},
7721    journal     = sigplan,
7722    month       = nov, year = 1986,
7723    volume      = 21, number = 11, pages = {214-223}
7724}
7725
7726% V
7727
7728@article{V-Kernel,
7729    keywords    = {messages, concurrency},
7730    contributer = {pabuhr@plg},
7731    author      = {David R. Cheriton},
7732    title       = {The {V} Distributed System},
7733    journal     = cacm,
7734    month       = mar,
7735    year        = 1988,
7736    volume      = 31,
7737    number      = 3,
7738    pages       = {314-333}
7739}
7740
7741@misc{Vala,
7742    keywords    = {GObject, Vala},
7743    contributor = {a3moss@uwaterloo.ca},
7744    key         = {Vala},
7745    organization= {The {GNOME} Project},
7746    title       = {{V}ala Reference Manual},
7747    year        = 2017,
7748    howpublished= {\url{https://wiki.gnome.org/Projects/Vala/Manual}},
7749}
7750
7751@inproceedings{Amdahl67,
7752    author      = {Gene M. Amdahl},
7753    title       = {Validity of the Single Processor Approach to Achieving Large Scale Computing Capabilities},
7754    booktitle   = {Proceedings of the April 18-20, 1967, Spring Joint Computer Conference},
7755    series      = {AFIPS '67 (Spring)},
7756    year        = 1967,
7757    location    = {Atlantic City, New Jersey},
7758    pages       = {483--485},
7759    publisher   = {ACM},
7760    address     = {New York, NY, USA},
7761}
7762
7763@article{Mayer81,
7764    keywords    = {},
7765    contributer = {pabuhr@plg},
7766    author      = {A. J. W. Mayer},
7767    title       = {Value Receiving Procedures},
7768    journal     = sigplan,
7769    volume      = 16,
7770    number      = 11,
7771    month       = nov,
7772    year        = 1981,
7773    pages       = {30-34},
7774}
7775
7776@article{Doran80,
7777    keywords    = {concurrency, Dekker's Algorithm},
7778    contributer = {pabuhr@plg},
7779    author      = {R. W. Doran and L. K. Thomas},
7780    title       = {Variants of the Software Solution to Mutual Exclusion},
7781    journal     = ipl,
7782    month       = jul,
7783    year        = 1980,
7784    volume      = 10,
7785    number      = {4/5},
7786    pages       = {206-208},
7787}
7788
7789@book{VAX,
7790    keywords    = {VAX, DEC},
7791    contributer = {pabuhr@plg},
7792    key         = {VAX},
7793    title       = {VAX-11 Architecture Reference Manual},
7794    publisher   = {Digital Press},
7795    address     = {Bedford},
7796    month       = may,
7797    year        = 1982,
7798}
7799
7800@book{Kenah88,
7801    author      = {Lawrence J. Kenah and Ruth E. Goldenberg and Simon F. Bate},
7802    title       = {{VAX/VMS} Internals and Data Structures Version 4.4},
7803    publisher   = {Digital Press},
7804    address     = {Bedford},
7805    year        = 1988,
7806}
7807
7808@article{Hesselink13,
7809    keywords    = {software solutions, N-thread, mutual exclusions},
7810    contributer = {pabuhr@plg},
7811    author      = {Wim H. Hesselink},
7812    title       = {Verifying a Simplification of Mutual Exclusion by {L}ycklama--{H}adzilacos},
7813    journal     = {Acta Informatica},
7814    publisher   = {Springer},
7815    address     = {New York},
7816    year        = {2013},
7817    volume      = {50},
7818    number      = {3},
7819    pages       = {199-228},
7820}
7821
7822% W
7823
7824@article{Herlihy91,
7825    keywords    = {linearization, wait-free synchronization},
7826    contributer = {pabuhr@plg},
7827    author      = {Maurice Herlihy},
7828    title       = {Wait-free Synchronization},
7829    journal     = toplas,
7830    volume      = {13},
7831    number      = {1},
7832    month       = jan,
7833    year        = 1991,
7834    pages       = {124--149},
7835    numpages    = {26},
7836    publisher   = {ACM},
7837    address     = {New York, NY, USA},
7838}
7839
7840@inproceedings{vonBehren03,
7841    keywords    = {threads, events, web server},
7842    contributer = {pabuhr@plg},
7843    author      = {Rob von Behren and Jeremy Condit and Eric Brewer},
7844    title       = {Why Events Are a Bad Idea (for high-concurrency servers)},
7845    booktitle   = {HotOS IX: The 9th Workshop on Hot Topics in Operating Systems},
7846    publisher   = {USENIX Association},
7847    address     = {Lihue, Hawaii, U.S.A.},
7848    month       = may,
7849    year        = 2003,
7850    pages       = {19-24},
7851}
7852
7853@techreport{Moss90,
7854    keywords    = {Swizzling, database},
7855    contributer = {akgoel@plg},
7856    author      = {J. Moss},
7857    title       = {Working with Persistent Objects: To Swizzle or Not to Swizzle},
7858    institution = {CS Department, University of Massachusetts},
7859    address     = {},
7860    number      = {CS 90-38},
7861    month       = may,
7862    year        = 1990,
7863}
7864
7865@inproceedings{Str:oop,
7866    keywords    = { },
7867    contributer = {pabuhr@plg},
7868    author      = {Bjarne Stroustrup},
7869    title       = {What is ``Object-Oriented Programming''?},
7870    booktitle   = {Proceedings of the First European Conference on Object Oriented Programming}, 
7871    month       = jun,
7872    year        = 1987
7873}
7874
7875@misc{Stroustrup:overloading,
7876    keywords    = {operator overloading},
7877    contributer = {pabuhr@plg},
7878    author      = {Bjarne Stroustrup},
7879    title       = {Why can't I overload dot, ::, sizeof, etc.?},
7880    month       = oct,
7881    year        = 2007,
7882    howpublished= {{\small\textsf{http://\-www.research.att.com/\-bs/\-bs\_faq2.html\-\#overload-dot}}},
7883}
7884
7885@techreport{Gray85,
7886    keywords    = {fault-tolerant system},
7887    contributer = {pabuhr@plg},
7888    author      = {Jim Gray},
7889    title       = {Why Do Computers Stop and What Can Be Done About It?},
7890    institution = {Tandem Computers},
7891    number      = {85.7 PN87614},
7892    month       = jun,
7893    year        = 1985,
7894    note        = {\href{http://www.hpl.hp.com/techreports/tandem/TR-85.7.pdf}{http://www.hpl.hp.com/\-techreports/\-tandem/\-TR-85.7.pdf}},
7895}
7896
7897@article{Tarjan84,
7898    keywords    = {union-find},
7899    contributer = {a3moss@uwaterloo.ca},
7900    author      = {Tarjan, Robert E. and van Leeuwen, Jan},
7901    title       = {Worst-case Analysis of Set Union Algorithms},
7902    journal     = {J. ACM},
7903    issue_date  = {April 1984},
7904    volume      = 31,
7905    number      = 2,
7906    month       = mar,
7907    year        = 1984,
7908    issn        = {0004-5411},
7909    pages       = {245--281},
7910    numpages    = {37},
7911    url         = {http://doi.acm.org/10.1145/62.2160},
7912    doi         = {10.1145/62.2160},
7913    acmid       = {2160},
7914    publisher   = {ACM},
7915    address     = {New York, NY, USA},
7916} 
7917
7918% X
7919
7920% Y
7921
7922@article{Boehm12,
7923    keywords    = {memory model, race condition},
7924    contributer = {pabuhr@plg},
7925    author      = {Boehm, Hans-J. and Adve, Sarita V.},
7926    title       = {You Don'T Know Jack About Shared Variables or Memory Models},
7927    journal     = cacm,
7928    volume      = 55,
7929    number      = 2,
7930    month       = feb,
7931    year        = 2012,
7932    pages       = {48--54},
7933    publisher   = {ACM},
7934    address     = {New York, NY, USA},
7935}
7936
7937% Z
7938
7939% Cross-referenced entries:
7940
7941% O
7942
7943% The SIGPLAN Notices issue should be in a note field, but notes are
7944% inherited by all refering entries, instead of being held in the
7945% cross-referenced entry.  Putting it in "publisher" is a kludge, but it
7946% works.
7947@proceedings{OOPSLA86,
7948    contributer = {gjditchfield@plg},
7949    title       = {{OOPSLA} '86 Conference Proceedings},
7950    booktitle   = {{OOPSLA} '86 Conference Proceedings},
7951    year        = 1986,
7952    editor      = {Norman Meyrowitz},
7953    publisher   = sigplan,
7954    organization= {Association for Computing Machinery},
7955    address     = {Portland, Oregon},
7956    month       = sep,
7957}
7958
7959@proceedings{OOPSLA87,
7960    contributer = {gjditchfield@plg},
7961    title       = {{OOPSLA} '87 Conference Proceedings},
7962    booktitle   = {{OOPSLA} '87 Conference Proceedings},
7963    year        = 1987,
7964    editor      = {Norman Meyrowitz},
7965    publisher   = sigplan,
7966    organization= {Association for Computing Machinery},
7967    address     = {Orlando, Florida},
7968    month       = oct,
7969}
7970
7971@proceedings{OOPSLA88,
7972    contributer = {gjditchfield@plg},
7973    title       = {{OOPSLA} '88 Conference Proceedings},
7974    booktitle   = {{OOPSLA} '88 Conference Proceedings},
7975    year        = 1988,
7976    editor      = {Norman Meyrowitz},
7977    publisher   = sigplan,
7978    organization= {Association for Computing Machinery},
7979    address     = {San Diego, California},
7980    month       = sep,
7981}
7982
7983@proceedings{OOPSLA89,
7984    contributer = {gjditchfield@plg},
7985    title       = {{OOPSLA} '89 Conference Proceedings},
7986    booktitle   = {{OOPSLA} '89 Conference Proceedings},
7987    year        = 1989,
7988    editor      = {Norman Meyrowitz},
7989    publisher   = sigplan,
7990    organization= {Association for Computing Machinery},
7991    address     = {New Orleans, Louisiana},
7992    month       = oct,
7993}
7994
7995@proceedings{OOPSLA90,
7996    contributer = {gjditchfield@plg},
7997    title       = {{OOPSLA/ECOOP} '90 Conference Proceedings},
7998    booktitle   = {{OOPSLA} '90 Conference Proceedings},
7999    year        = 1990,
8000    editor      = {Norman Meyrowitz},
8001    publisher   = sigplan,
8002    organization= {Association for Computing Machinery},
8003    address     = {Ottawa, Canada},
8004    month       = oct,
8005}
8006
8007@proceedings{OOPSLA91,
8008    contributer = {gjditchfield@plg},
8009    title       = {{OOPSLA} '91 Conference Proceedings},
8010    booktitle   = {{OOPSLA} '91 Conference Proceedings},
8011    year        = 1991,
8012    editor      = {Andreas Paepcke},
8013    publisher   = sigplan,
8014    organization= {Association for Computing Machinery},
8015    address     = {Phoenix, Arizona},
8016    month       = oct,
8017}
Note: See TracBrowser for help on using the repository browser.