source: doc/bibliography/pl.bib @ 460bd3a

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since 460bd3a was 460bd3a, checked in by Peter A. Buhr <pabuhr@…>, 6 years ago

update entry

  • Property mode set to 100644
File size: 234.0 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@string{ieeepds="IEEE Transactions on Parallel and Distributed Systems"}
24% @string{ieeepds="IEEE Trans. Parallel Distrib. Syst."}
25@string{ieeese="IEEE Transactions on Software Engineering"}
26% @string{ieeese="IEEE Trans. Softw. Eng."}
27@string{spe="Software---\-Practice and Experience"}
28% @string{spe="Softw. Pract. Exp."}
29@string{ccpe="Concurrency and Computation: Practice and Experience"}
30% @string{ccpe="Concurrency Comput: Pract Experience"}
31@string{sigplan="SIGPLAN Notices"}
32% @string{sigplan="SIGPLAN Not."}
33@string{joop="Journal of Object-Oriented Programming"}
34% @string{joop="J. of Object-Oriented Program."}
35@string{popl="Conference Record of the ACM Symposium on Principles of Programming Languages"}
36@string{osr="Operating Systems Review"}
37@string{pldi="Programming Language Design and Implementation"}
38@string{toplas="Transactions on Programming Languages and Systems"}
39@string{mathann="Mathematische Annalen"}
40% @string{mathann="Math. Ann."}
41
42% A
43
44@incollection{ABC++,
45    keywords    = {concurrency, parallel, distributed, C++},
46    contributer = {pabuhr@plg},
47    author      = {William G. O'Farrell and Frank Ch. Eigler and S. David Pullara and Gregory V. Wilson },
48    title       = {{ABC}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
49    editor      = {Gregory V. Wilson and Paul Lu},
50    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
51    publisher   = {MIT Press},
52    address     = {New York},
53    series      = {Scientific and Engineering Computation Series},
54    year        = 1996,
55    pages       = {1-42},
56}
57
58@techreport{CL90abstract,
59    keywords    = {},
60    contributer = {gjditchfield@plg},
61    author      = {Luca Cardelli and Xavier Leroy},
62    title       = {Abstract Types and the Dot Notation},
63    institution = {Systems Research Center},
64    year        = 1990,
65    address     = {130 Lytton Avenue, Palo Alto, CA  94301},
66    number      = 56,
67    summary     = {
68        The existential types of Mitchell and Plotkin \cite{atet} model
69        abstract types, but their ``open'' notation is unlike the usual dot
70        notation used in programming languages.  This paper gives
71        translations between the ``open'' and ``dot'' forms, and suggests
72        extensions for nested and for parameterized abstractions.
73    }
74}
75
76@article{atet,
77    keywords    = {lambda calculus, polymorphism},
78    contributer = {gjditchfield@plg},
79    author      = {John C. Mitchell and Gordon D. Plotkin},
80    title       = {Abstract Types have Existential Type},
81    journal     = toplas,
82    year        = 1988,
83    month       = jul, volume = 10, number = 3, pages = {470-502},
84    abstract    = {
85        Abstract data type declarations appear in typed programming
86        languages like Ada, Alphard, CLU and ML.  This form of declaration
87        binds a list of identifiers to a type with associated operations, a
88        composite ``value'' we call a {\em data algebra}.  We use a
89        second-order typed lambda calculus SOL to show how data algebras
90        may be given types, passed as parameters, and returned as results of
91        function calls.  In the process, we discuss the semantics of
92        abstract data type declarations and review a connection between
93        typed programming languages and constructive logic.
94    }
95}
96
97@article{alphard:intro,
98    keywords    = {encapsulation, data abstraction},
99    contributer = {gjditchfield@plg},
100    author      = {Wm. A. Wulf and Ralph L. London and Mary Shaw},
101    title       = {Abstraction and Verification in Alphard: Introduction to Language and Methodology},
102    journal     = ieeese,
103    year        = 1976,
104    month       = dec, volume = {SE-2}, number = 4, pages = {253-265},
105    note        = {Reprinted in \cite{alphard}.},
106    abstract    = {
107        Alphard is a programming language whose goals include supporting
108        both the development of well-structured programs and the formal
109        verification of these programs.  This paper attempts to capture the
110        symbiotic influence of these two goals on the design of the
111        language.  To that end the language description is interleaved with
112        the presentation of a proof technique and discudssion of
113        programming methodology.  Examples to illustrate both the language
114        and the verification technique are included.
115    }
116}
117
118@book{Hilfinger83,
119    keywords    = {ada},
120    author      = {Paul N. Hilfinger},
121    title       = {Abstraction Mechanisms and Language Design},
122    publisher   = {MIT Press},
123    series      = {ACM Distinguished Dissertations},
124    year        = 1983,
125}
126
127@incollection{Lavender96,
128    author      = {R. Greg Lavender and Douglas C. Schmidt},
129    chapter     = {Active Object: An Object Behavioral Pattern for Concurrent Programming},
130    title       = {Pattern Languages of Program Design 2},
131    editor      = {John M. Vlissides and James O. Coplien and Norman L. Kerth},
132    year        = 1996,
133    pages       = {483-499},
134    publisher   = {Addison-Wesley Longman Publishing},
135    address     = {Boston},
136}
137
138@article{Nierstrasz87,
139    keywords    = {Hybrid, active objects, object-oriented languages, object-based languages, delegation, concurrency},
140    contributer = {pabuhr@plg},
141    author      = {O. M. Nierstrasz},
142    title       = {Active Objects in {Hybrid}},
143    journal     = sigplan,
144    volume      = 22,
145    number      = 12,
146    month       = dec,
147    year        = 1987,
148    pages       = {243-253},
149    note        = {Proceedings of the OOPSLA'87 Conference, Oct. 4--8, 1987, Orlando, Florida},
150    abstract    = {
151        Most object-oriented languages are strong on reusability or on
152        strong-typing, but weak on concurrency.  In response to this gap,
153        we are developing {\it Hybrid}, an object-oriented language in which
154        objects are the active entities.  Objects in Hybrid are organized
155        into {\it domains}, and concurrent executions into {\it activities}.
156        All object communications are based on remote procedure calls.
157        Unstructured {\it sends\/} and {\it accepts\/} are forbidden.  To
158        this the mechanisms of {\it delegation\/} and {\it delay queues\/}
159        are added to enable switching and triggering of activities.
160        Concurrent subactivities and atomic actions are provided for
161        compactness and simplicity.  We show how solutions to many important
162        concurrent problems [sic], such as pipelining, constraint management
163        and ``administration'' can be compactly expressed using these
164        mechanisms.
165   },
166   comment      = {Mentions Thoth in reference to delegation}
167}
168
169@book{Actors,
170    keywords    = {actors, concurrency},
171    contributer = {pabuhr@plg},
172    author      = {Gul A. Agha},
173    title       = {Actors: A Model of Concurrent Computation in Distributed Systems},
174    publisher   = {MIT Press, Cambridge},
175    year        = 1986
176}
177
178@article{polymorphImpl,
179    keywords    = {Napier88},
180    contributer = {gjditchfield@plg},
181    author      = {R. Morrison and A. Dearle and R. C. H. Connor and A. L. Brown},
182    title       = {An Ad Hoc Approach to the Implementation of Polymorphism},
183    journal     = toplas,
184    year        = 1991,
185    month       = jul,
186    volume      = 13,
187    number      = 3,
188    pages       = {342-371},
189    abstract    = {
190        Polymorphic abstraction provides the ability to write programs that
191        are independent of the form of the data over which they operate.
192        There are a number of different categories of polymorphic
193        expression---ad hoc and universal, which includes parametric and
194        inclusion---all of which have many advantages in terms of code
195        reuse and software economics.  It has proved difficult to provide
196        efficient implementations of polymorphism.  Here, we address this
197        problem and describe a new technique that can implement all forms
198        of polymorphism, use a conventional machine architecture, and
199        support nonuniform data representations.  Furthermore, the method
200        ensures that any extra cost of implementation applies to
201        polymorphic forms only, and allows such polymorphic forms to
202        persist over program invocations.
203    },
204    summary     = {
205        They give three ways to implement polymorphism: {\em textual
206        polymorphism}, which seems to be template instantiation, {\em
207        uniform polymorphism}, which they explain badly, and {\em tagged
208        polymorphism}, where object code performs type tests.
209
210        They use first-class procedures to implement polymorphism: routines
211        with type parameters are implemented as curried routines that
212        return a nested routine that refers to the type parameter.
213    }
214}
215
216@article{dim:ada,
217    keywords    = {Dimensional Analysis, Ada},
218    contributer = {gjditchfield@plg},
219    author      = {Paul N. Hilfinger},
220    title       = {An {Ada} Package for Dimensional Analysis},
221    journal     = toplas,
222    month       = apr,
223    year        = 1988,
224    volume      = 10,
225    number      = 2,
226    pages       = {189-203},
227}
228
229@mastersthesis{Younger91,
230    keywords    = {concurrency, C++, postponing requests},
231    contributer = {pabuhr@plg},
232    author      = {Brian M. Younger},
233    title       = {Adding Concurrency to {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
234    school      = {University of Waterloo},
235    year        = 1991,
236    address     = {Waterloo, Ontario, Canada, N2L 3G1},
237}
238
239@inproceedings{Buhr92c,
240    keywords    = {concurrency},
241    contributer = {pabuhr@plg},
242    author      = {Peter A. Buhr and Glen Ditchfield},
243    title       = {Adding Concurrency to a Programming Language},
244    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Technical Conference Proceedings},
245    organization= {USENIX Association},
246    address     = {Portland, Oregon, U.S.A.},
247    month       = aug,
248    year        = 1992,
249    pages       = {207-224},
250}
251
252@article{Buhr89b,
253    keywords    = {concurrency, C++},
254    contributer = {pabuhr@plg},
255    author      = {P. A. Buhr and Glen Ditchfield and C. R. Zarnke},
256    title       = {Adding Concurrency to a Statically Type-Safe Object-Oriented Programming Language},
257    journal     = sigplan,
258    volume      = 24,
259    number      = 4,
260    month       = apr,
261    year        = 1989,
262    pages       = {18-21},
263    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming, Sept. 26--27, 1988, San Diego, California, U.S.A.},
264}
265
266@article{Knuth66,
267    keywords    = {N-thread software-solution mutual exclusion},
268    contributer = {pabuhr@plg},
269    author      = {Donald E. Knuth},
270    title       = {Additional Comments on a Problem in Concurrent Programming Control},
271    journal     = cacm,
272    month       = may,
273    year        = 1966,
274    volume      = 9,
275    number      = 5,
276    pages       = {321-322},
277    note        = {Letter to the Editor}
278}
279
280@article{DeBruijn67,
281    keywords    = {N-thread software-solution mutual exclusion},
282    contributer = {pabuhr@plg},
283    author      = {Nicolaas Govert de Bruijn},
284    title       = {Additional Comments on a Problem in Concurrent Programming Control},
285    journal     = cacm,
286    month       = mar,
287    year        = 1967,
288    volume      = 10,
289    number      = 3,
290    pages       = {137-138},
291    note        = {letter to the Editor}
292}
293
294@phdthesis{Krischer10,
295    author      = {Roy Krischer},
296    title       = {Advanced Concepts in Asynchronous Exception Handling},
297    school      = {University of Waterloo},
298    year        = 2010,
299    month       = dec,
300    address     = {Waterloo, Ontario, Canada, N2L 3G1},
301    optnote     = {\textsf{http://uwspace.uwaterloo.ca/\-bitstream/10012/\-5751\-/1/Krischer\_Roy.pdf}},
302    note        = {\href{http://uwspace.uwaterloo.ca/bitstream/10012/5751/1/Krischer_Roy.pdf}{http://uwspace.uwaterloo.ca/\-bitstream/10012/\-5751\-/1/Krischer\_Roy.pdf}},
303}
304
305@article{Buhr00a,
306    keywords    = {exception handling},
307    contributer = {pabuhr@plg},
308    author      = {Peter A. Buhr and W. Y. Russell Mok},
309    title       = {Advanced Exception Handling Mechanisms},
310    journal     = ieeese,
311    volume      = 26,
312    number      = 9,
313    month       = sep,
314    year        = 2000,
315    pages       = {820-836},
316}
317
318@book{Richter97,
319    keywords    = {Win32, threads},
320    author      = {Jeffrey M. Richter},
321    title       = {Advanced Windows},
322    publisher   = {Microsoft Press},
323    year        = 1997,
324    edition     = {3rd},
325}
326
327@article{Francez77,
328    keywords    = {parameter passing, named/positional arguments},
329    contributer = {pabuhr@plg},
330    author      = {Nissim Francez},
331    title       = {Another Advantage of Key word Notation for Parameter Communication with Subprograms},
332    journal     = cacm,
333    volume      = 20,
334    number      = 8,
335    month       = aug,
336    year        = 1977,
337    pages       = {604-605},
338}
339
340@manual{Akka,
341    keywords    = {Akka actor model},
342    contributer = {pabuhr@plg},
343    title       = {{A}kka {S}cala Documentation, Release 2.4.11},
344    organization= {Lightbend Inc.},
345    month       = sep,
346    year        = 2016,
347    note        = {\href{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}{http://\-doc.akka.io/\-docs/\-akka/\-2.4/\-AkkaScala.pdf}},
348}
349
350@article{Algol60,
351    keywords    = {Algol60},
352    contributer = {pabuhr@plg},
353    author      = {J. W. Backus and F. L. Bauer and J. Green and C. Katz and
354                   J. McCarthy and P. Naur and A. J. Perlis and H. Rutishauser and K. Samuelson
355                   and B. Vauquois and J.H. Wegstein and A. van Wijngaarden and M. Woodger},
356    title       = {Revised Report on the Algorithmic Language Algol 60},
357    editor      = {Peter Nauer},
358    journal     = cacm,
359    volume      = 6,
360    number      = 1,
361    month       = jan,
362    year        = 1963,
363    pages       = {1-17},
364}
365
366@article{Mellor-Crummey91,
367    keywords    = {spin locks, compare-and-swap, barriers},
368    contributer = {pabuhr@plg},
369    author      = {John M. Mellor-Crummey and Michael L. Scott},
370    title       = {Algorithm for Scalable Synchronization on Shared-Memory Multiprocessors},
371    journal     = tocs,
372    volume      = 9,
373    number      = 1,
374    month       = feb,
375    year        = 1991,
376    pages       = {21-65},
377}
378
379@article{Hoare61,
380    keywords    = {quick sort},
381    contributer = {pabuhr@plg},
382    author      = {C. A. R. Hoare},
383    title       = {Algorithms 63/64: Partition/Quicksort},
384    journal     = cacm,
385    volume      = 4,
386    number      = 7,
387    month       = jul,
388    year        = 1961,
389    pages       = {321},
390}
391
392@article{Cormack81,
393    keywords    = {},
394    contributer = {gjditchfield@plg},
395    author      = {Gordon V. Cormack},
396    title       = {An Algorithm for the Selection of Overloaded Functions in {Ada}},
397    journal     = sigplan,
398    year        = 1981,
399    month       = feb, volume = 16, number = 2, pages = {48-52},
400    comment     = {
401        A one-pass, top-down algorithm for overload resolution.  Input is a
402        parse tree and the desired result type, and output is the number of
403        solutions.  For each overloading of the root identifier with a
404        matching parameter list, recursively solve for each parameter for
405        the corresponding argument type---there should be one solution.
406    }
407}
408
409@book{Raynal86,
410    keywords    = {mutual exclusion, locks},
411    contributer = {pabuhr@plg},
412    author      = {M. Raynal},
413    title       = {Algorithms for Mutual Exclusion},
414    publisher   = {MIT Press},
415    address     = {Cambridge},
416    series      = {Scientific Computation Series},
417    year        = 1986,
418    note        = {Translated by D. Beeson},
419}
420
421@incollection{Gidenstam05,
422    keywords    = {lock free, dynamic memory allocation},
423    contributer = {pabuhr@plg},
424    author      = {Anders Gidenstam and Marina Papatriantafilou and Philippas Tsigas},
425    title       = {Allocating Memory in a Lock-free Manner},
426    editor      = {Gerth St{\o}lting Brodal and Stefano Leonardi},
427    booktitle   = {Algorithms -- ESA 2005},
428    pages       = {329-342},
429    publisher   = {Springer},
430    address     = {New York},
431    year        = 2005,
432    volume      = 3669,
433    series      = {Lecture Notes in Computer Science},
434}
435
436@book{Sites92,
437    keywords    = {computers, Alpha},
438    contributer = {pabuhr@plg},
439    editor      = {Richard L. Sites},
440    title       = {Alpha Architecture Reference Manual},
441    publisher   = {Digital Press, Burlington},
442    year        = 1992,
443}
444
445@book{alphard,
446    keywords    = {Parametric polymorphism, alphard, iterators, nested types},
447    contributer = {gjditchfield@plg},
448    key         = {Alphard},
449    editor      = {Mary Shaw},
450    title       = {{ALPHARD}: Form and Content},
451    publisher   = {Springer},
452    address     = {New York},
453    year        = 1981,
454    comment     = {Collection of papers about Alphard.}
455}
456
457@article{Kessels77,
458    keywords    = {monitors},
459    contributer = {pabuhr@plg},
460    author      = {Joep L. W. Kessels},
461    title       = {An Alternative to Event Queues for Synchronization in Monitors},
462    journal     = cacm,
463    volume      = 20,
464    number      = 7,
465    month       = jul,
466    year        = 1977,
467    pages       = {500-503},
468    annote      = {
469    }
470}
471
472@article{descr,
473    keywords    = {X2, subclasses, inheritance, parameterized classes},
474    contributer = {gjditchfield@plg},
475    author      = {David Sandberg},
476    title       = {An Alternative to Subclassing},
477    journal     = sigplan,
478    volume      = {21},    number = {11},
479    pages       = {424-428},
480    month       = nov, year = 1986,
481    comment     = {
482        The Smalltalk class hierarchy has three uses: factoring out code;
483        ``Abstraction superclasses'' such as Collection; rapid construction
484        of new classes by incremental change.
485
486        ``A descriptive class specifies a partial behavior by specifying a
487        set of procedure headings that describe what can be done with
488        instances of classes that belong to the descriptive class.''  An
489        ``instance'' statement declares a class to be an instance of a
490        descriptive class and defines the correspondence between
491        operations.  Procedures with descriptive class parameters take any
492        instance as arguments.  Descriptive classes can describe relations
493        like ``c is a collection with element type e'', but how such things
494        are used isn't explained.
495       
496        For each descriptive class used in a parameter list, an implicit
497        parameter is created that is passed a vector of procedures.
498    }
499}
500
501@incollection{Matsuoka93,
502    keywords    = {inheritance anomaly},
503    contributer = {pabuhr@plg},
504    author      = {Satoshi Matsuoka and Akinori Yonezawa},
505    title       = {Analysis of Inheritance Anomaly in Object-Oriented Concurrent Programming Languages},
506    booktitle   = {Research Directions in Concurrent Object-Oriented Programming},
507    editor      = {Gul Agha and Peter Wegner and Akinori Yonezawa},
508    publisher   = {MIT Press},
509    address     = {New York},
510    year        = 1993,
511    pages       = {107-150},
512}
513
514@article{Sinha00,
515    author      = {Saurabh Sinha and Mary Jean Harrold},
516    title       = {Analysis and Testing of Programs with Exception-Handling Constructs},
517    journal     = ieeese,
518    year        = 2000,
519    month       = sep,
520    volume      = 26,
521    number      = 9,
522    pages       = {849--871},
523}
524
525@inproceedings{Robillard99,
526    author      = {Martin P. Robillard and Gail C. Murphy},
527    title       = {Analyzing Exception Flow in {J}ava Programs},
528    booktitle   = {ESEC/FSE-7: Proceedings of the 7th European Software Engineering Conference held jointly
529                   with the 7th ACM SIGSOFT International Symposium on Foundations of Software Engineering},
530    year        = 1999,
531    pages       = {322--337},
532    isbn        = {3-540-66538-2},
533    location    = {Toulouse, France},
534    doi         = {http://doi.acm.org/10.1145/318773.319251},
535    publisher   = {Springer},
536    address     = {London, UK},
537}
538
539@book{C++,
540    keywords    = {C++, ANSI},
541    author      = {Margaret A. Ellis and Bjarne Stroustrup},
542    title       = {The Annotated {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Reference Manual},
543    publisher   = {Addison-Wesley},
544    address     = {Boston},
545    year        = 1990,
546    edition     = {1st},
547}
548
549@book{APL,
550    keywords    = {APL},
551    contributer = {pabuhr@plg},
552    author      = {K. E. Iverson},
553    title       = {A Programming Language},
554    publisher   = {Wiley, New York},
555    year        = 1962
556}
557
558@article{PS-Algol:old,
559    author      = {M. Atkinson and P. Bailey and K. Chisholm and P. Cockshott and R. Morrison},
560    title       = {An Approach to Persistent Programming},
561    journal     = {The Computer Journal},
562    year        = 1983,
563    volume      = 26,
564    number      = 4,
565    pages       = {360-365},
566}
567
568@article{Kessels82,
569    keywords    = {concurrency, critical section},
570    contributer = {pabuhr@plg},
571    author      = {Joep L. W. Kessels},
572    title       = {Arbitration Without Common Modifiable Variables},
573    journal     = acta,
574    volume      = 17,
575    number      = 2,
576    month       = jun,
577    year        = 1982,
578    pages       = {135-141},
579}
580
581@article{Buhr95a,
582    keywords    = {concurrency, library approach},
583    contributer = {pabuhr@plg},
584    author      = {Peter A. Buhr},
585    title       = {Are Safe Concurrency Libraries Possible?},
586    journal     = cacm,
587    month       = feb,
588    year        = 1995,
589    volume      = 38,
590    number      = 2,
591    pages       = {117-120},
592}
593
594@book{ARMv7,
595    key         = {ARM processor},
596    title       = {ARM Architecture Reference Manual},
597    publisher   = {ARM},
598    volume      = {ARM DDI 0406C.b (ID072512)},
599    year        = 2012,
600}
601
602@book{Herlihy08,
603    contributer = {pabuhr@plg},
604    author      = {Herlihy, Maurice and Shavit, Nir},
605    title       = {The Art of Multiprocessor Programming},
606    year        = 2008,
607    isbn        = {0123705916, 9780123705914},
608    publisher   = {Morgan Kaufmann Publishers},
609    address     = {San Francisco},
610}
611
612@inproceedings{Chung10,
613    keywords    = {transactional memory, lock-free programming, x86 architecture},
614    contributer = {pabuhr@plg},
615    author      = {Jaewoong Chung and Luke Yen and Stephan Diestelhorst and Martin Pohlack and Michael Hohmuth and David Christie and Dan Grossman},
616    title       = {ASF: AMD64 Extension for Lock-Free Data Structures and Transactional Memory},
617    booktitle   = {Proceedings of the 2010 43rd Annual IEEE/ACM International Symposium on Microarchitecture},
618    series      = {MICRO '43},
619    year        = 2010,
620    pages       = {39--50},
621    numpages    = {12},
622    publisher   = {IEEE Computer Society},
623    address     = {Washington, DC, USA},
624}
625
626@article{Buhr94a,
627    keywords    = {assignment, parameter passing, multiple assignment},
628    contributer = {pabuhr@plg},
629    author      = {P. A. Buhr and David Till and C. R. Zarnke},
630    title       = {Assignment as the Sole Means of Updating Objects},
631    journal     = spe,
632    month       = sep,
633    year        = 1994,
634    volume      = 24,
635    number      = 9,
636    pages       = {835-870},
637}
638
639@inproceedings{Krischer08,
640    keywords    = {exception handling, asynchronous, blocked tasks},
641    contributer = {pabuhr@plg},
642    author      = {Roy Krischer and Peter A. Buhr},
643    title       = {Asynchronous Exception Propagation in Blocked Tasks},
644    booktitle   = {4th International Workshop on Exception Handling (WEH.08)},
645    organization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},
646    address     = {Atlanta, U.S.A},
647    month       = nov,
648    year        = 2008,
649    pages       = {8-15},
650}
651
652@article{Joung00,
653    author      = {Joung, Yuh-Jzer},
654    title       = {Asynchronous group mutual exclusion},
655    journal     = {Distributed Computing},
656    year        = {2000},
657    month       = {Nov},
658    volume      = {13},
659    number      = {4},
660    pages       = {189--206},
661}
662
663@article{oop:modpascal,
664    keywords    = {ModPascal},
665    contributer = {gjditchfield@plg},
666    author      = {Walter G. Olthoff},
667    title       = {Augmentation of Object-Oriented Programming by Concepts of Abstract Data Type Theory: The ModPascal Experience},
668    journal     = sigplan,
669    volume      = 21,
670    number      = 11,
671    pages       = {429-443},
672    month       = nov,
673    year        = 1986
674}
675
676@inproceedings{Shen91,
677    keywords    = {Ada, polymorphism},
678    contributer = {pabuhr@plg},
679    author      = {Jun Shen and Gordon V. Cormack},
680    title       = {Automatic instantiation in Ada},
681    booktitle   = {Proceedings of the ACM Tri-Ada Conference},
682    organization= {ACM},
683    address     = {San Jose, California, U.S.A},
684    month       = oct,
685    year        = 1991,
686    pages       = {338-346},
687}
688
689@article{Havender68,
690    keywords    = {deadlock},
691    contributer = {pabuhr@plg},
692    author      = {J. W. Havender},
693    title       = {Avoiding Deadlock in Multitasking Systems},
694    journal     = ibmsj,
695    volume      = 7,
696    number      = 2,
697    year        = 1968,
698    pages       = {74-84},
699}
700
701% B
702
703@incollection{beta:old,
704    keywords    = {beta, patterns, virtual types},
705    contributer = {gjditchfield@plg},
706    author      = {Bent Bruun Kristensen and Ole Lehrmann Madsen and Birger M{\o}ller-Pedersen and Kristen Nygaard},
707    title       = {The BETA Programming Language},
708    booktitle   = {Research Directions in Object-Oriented Programming},
709    publisher   = {MIT Press},
710    series      = {Computer Systems Series},
711    year        = 1987,
712    pages       = {7-48},
713    editor      = {Bruce Shriver and Peter Wegner}
714}
715
716@article{Knudsen87,
717    keyword     = {static exception handling mechanism, BETA, sequel},
718    contributor = {wyrmok@plg},
719    author      = {J{\o}rgen Lindskov Knudsen},
720    title       = {Better Exception Handling in Block Structured Systems},
721    journal     = {IEEE Software},
722    year        = 1987,
723    month       = may,
724    volume      = 4,
725    number      = 3,
726    pages       = {40-49},
727    comments    = {
728        Going up the call hierarchy to look for a handler does not fit an
729        otherwise statically scoped language. Also, not knowing which handler
730        to be used when raising an abnormal event is seen as a weakness of the
731        (dynamic) exception handling mechanism. Knudsen believed that raising
732        an exception should specify the handler for the exception -- the
733        handler is chosen when the exception is raised.  However, I don't think
734        his scheme can solve the problem, especially with all the callback
735        routines commonly found in OO programming.
736
737        BETA exception handling mechanism uses his work as a foundation.
738        However, I don't see any benefits BETA has over other language that is
739        a direct consequence of Knudsen's work. On the other hand, my knowledge
740        on BETA is very limited.
741        }
742}
743
744@book{BCPL,
745    keywords    = {BCPL},
746    contributer = {pabuhr@plg},
747    author      = {M. Richards and C. Whitby-Strevens},
748    title       = {{BCPL} -- The Language and Its Compiler},
749    publisher   = {Cambridge University Press, Cambridge},
750    year        = 1979,
751}
752
753@incollection{Madsen87,
754    keywords    = {nested classes},
755    contributer = {pabuhr@watmsg},
756    author      = {Ole Lehrmann Madsen},
757    title       = {Block Structure and Object Oriented Languages},
758    booktitle   = {Research Directions in Object-Oriented Programming},
759    editor      = {Bruce Shriver and Peter Wegner},
760    publisher   = {MIT Press},
761    series      = {Computer Systems Series},
762    year        = 1987,
763    pages       = {113-128}
764}
765
766@inproceedings{booleanClasses,
767    keywords    = {specifications},
768    contributer = {gjditchfield@plg},
769    author      = {David McAllester and Ramin Zabih},
770    title       = {Boolean Classes},
771    crossref    = "OOPSLA86",
772    pages       = {417-423},
773    abstract    = {
774        We extend the notion of class so that any Boolean combination of
775        classes is also a class.  Boolean classes allow greater precision
776        and conciseness in naming the class of objects governed a
777        particular method [sic].  A class can be viewed as a predicate
778        which is either true or false of any given object.  Unlike
779        predicates however classes have an inheritance hierarchy which is
780        known at compile time.  Boolean classes extend the notion of class,
781        making classes more like predicates, while preserving the compile
782        time computable inheritance hierarchy.
783    },
784    comment = {
785        Classes are predicates; if object {\tt o} is in class {\tt C}, then
786        {\tt C} is true of {\tt o}.  Classes are combined with {\tt :AND},
787        {\tt :OR}, and {\tt :NOT}.  Inheritance is treated as implication:
788        {\tt (:implies C E)} means that if class {\tt C} is true of {\tt
789        o}, class expression {\tt E} is true of {\tt o}, so if {\tt E} is a
790        class, it is a superclass of {\tt C}.  Some class expressions, i.e.
791        {\tt (:OR c1 c2)}, can't be instantiated.  Others, i.e. {\tt (:NOT
792        c)}, can't be given methods or members because almost all classes
793        would inherit them, violating modularity.  The rules for spotting
794        these problems are complex.  Determining if one class inherits from
795        another needs an exponential algorithm.
796    }
797}
798
799@misc{BoostCoroutines15,
800    keywords    = {Boost Coroutine Library},
801    contributer = {pabuhr@plg},
802    author      = {Oliver Kowalke},
803    title       = {Boost Coroutine Library},
804    year        = 2015,
805    howpublished= {\href{http://www.boost.org/doc/libs/1_61_0/libs/coroutine/doc/html/index.html}
806                  {{http://www.boost.org/\-doc/\-libs/1\_61\_0/\-libs/\-coroutine/\-doc/\-html/\-index.html}}},
807    optnote     = {Accessed: 2016-09},
808}
809
810@mastersthesis{Krischer02,
811    author      = {Roy Krischer },
812    title       = {Bound Exceptions in Object-Oriented Programming Languages},
813    school      = {Universit\"at Mannheim},
814    address     = {Mannheim, Deutschland},
815    year        = 2002,
816    month       = oct,
817    type        = {Diplomarbeit},
818    note        = {{\small\textsf{ftp://\-plg.uwaterloo.ca/\-pub/\-theses/\-KrischerThesis.ps.gz}}},
819}
820
821@inproceedings{Buhr03,
822    keywords    = {exception handling, bound handler},
823    contributer = {pabuhr@plg},
824    author      = {Peter A. Buhr and Roy Krischer},
825    title       = {Bound Exceptions in Object Programming},
826    booktitle   = {Proceedings of the ECOOP 2003 Workshop on Exception Handling in Object Oriented Systems:
827                  Towards Emerging Application Areas and New Programming Paradigms},
828    organization= {ECOOP},
829    address     = {Darmstadt, Germany},
830    month       = jul,
831    year        = 2003,
832    pages       = {20-26},
833}
834%    note       = {http://www.cs.umn.edu/research/technical_reports.php/listing/technical_reports.php?page=report&report_id=03-028}
835
836@inproceedings{Buhr06b,
837    keywords    = {exception handling, bound exceptions},
838    author      = {Peter A. Buhr and Roy Krischer},
839    title       = {Bound Exceptions in Object-Oriented Programming},
840    editor      = {C. Dony and J. L. Knudsen and A. Romanovsky and A. Tripathi},
841    booktitle   = {Advanced Topics in Exception Handling Techniques},
842    publisher   = {Springer},
843    series      = {Lecture Notes in Computer Science},
844    volume      = 4119,
845    year        = 2006,
846    pages       = {1-21}
847}
848
849% C
850
851@book{C,
852    keywords    = {C},
853    contributer = {pabuhr@plg},
854    author      = {Brian W. Kernighan and Dennis M. Ritchie},
855    title       = {The {C} Programming Language},
856    publisher   = {Prentice-Hall},
857    address     = {Englewood Cliffs},
858    year        = 1988,
859    edition     = {2nd},
860    series      = {Prentice-Hall Software Series},
861    comment     = {
862         based on draft-proposed ANSI C
863    }
864}
865
866@book{C:old,
867    keywords    = {C},
868    contributer = {pabuhr@plg},
869    author      = {Brian W. Kernighan and Dennis M. Ritchie},
870    title       = {The {C} Programming Language},
871    publisher   = {Prentice-Hall},
872    address     = {Englewood Cliffs},
873    year        = 1978,
874    edition     = {1st},
875}
876
877@manual{ANSI89:C,
878    keywords    = {ANSI C 89},
879    contributer = {gjditchfield@plg},
880    author      = {C90},
881    title       = {Programming Languages -- {C}},
882    organization= {American National Standards Institute},
883    address     = {New York, NY, U.S.A.},
884    year        = 1990,
885    note        = {ANSI/ISO 9899-1990}
886}
887
888@manual{C11,
889    keywords    = {ISO/IEC C 11},
890    contributer = {pabuhr@plg},
891    key         = {C11},
892    title       = {C Programming Language {ISO/IEC} 9889:2011-12},
893    edition     = {3rd},
894    publisher   = {International Standard Organization},
895    address     = {\href{https://www.iso.org/standard/57853.html}{https://\-www.iso.org/\-standard/\-57853.html}},
896    year        = 2012,
897}
898
899@manual{C++Concepts,
900    keywords    = {ISO/IEC TS 19217:2015},
901    contributer = {a3moss@uwaterloo.ca},
902    key         = {Concepts},
903    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming language -- Extensions for concepts {ISO/IEC} {TS} 19217:2015},
904    publisher   = {International Standard Organization},
905    address     = {\href{https://www.iso.org/standard/64031.html}{https://\-www.iso.org/\-standard/\-64031.html}},
906    year        = 2015,
907}
908
909@misc{Cforall,
910    key         = {Cforall},
911    title       = {\textsf{C}{$\mathbf{\forall}$} Features},
912    howpublished= {\url{https://plg.uwaterloo.ca/~cforall/features}},
913    optnote     = {Accessed: 2018-01-01},
914}
915
916@mastersthesis{Esteves04,
917    keywords    = {Cforall, parametric polymorphism, overloading},
918    contributer = {pabuhr@plg},
919    author      = {Rodolfo Gabriel Esteves},
920    title       = {\textsf{C}$\mathbf{\forall}$, a Study in Evolutionary Design in Programming Languages},
921    school      = {School of Computer Science, University of Waterloo},
922    year        = 2004,
923    address     = {Waterloo, Ontario, Canada, N2L 3G1},
924    note        = {\href{http://plg.uwaterloo.ca/theses/EstevesThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-EstevesThesis.pdf}},
925}
926
927@misc{CFAStackEvaluation,
928    author      = {Aaron Moss},
929    title       = {\textsf{C}$\mathbf{\forall}$ Stack Evaluation Programs},
930    year        = 2018,
931    howpublished= {\href{https://plg.uwaterloo.ca/~cforall/evaluation.zip}{https://plg.uwaterloo.ca/\-\-$\sim$cforall/\-StackEvaluation.zip}},
932    optnote     = {[Accessed May 2018]},
933}
934
935@article{Moss18,
936    keywords    = {concurrency, C++},
937    contributer = {pabuhr@plg},
938    author      = {Aaron Moss and Robert Schluntz and Peter A. Buhr},
939    title       = {\textsf{C}$\mathbf{\forall}$ : Adding Modern Programming Language Features to C},
940    year        = 2018,
941    journal     = spe,
942    note        = {Accepted, to appear},
943}
944
945@inproceedings{c++scheme,
946    keywords    = {},
947    contributer = {gjditchfield@plg},
948    author      = {Vincent F. Russo and Simon M. Kaplan},
949    title       = {A {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Interpreter for {S}cheme},
950    booktitle   = {Usenix {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference},
951    year        = 1988,
952    pages       = {95-108},
953    summary     = {
954        The SIOD interpreter for a Scheme subset, written in C, has a
955        tagged union representing data objects, and read(), eval(), and
956        print() functions that are basically large switch statements that
957        switch based on the tag.  The authors rewrote it to use a class
958        with virtual read(), eval(), and print() members, without changing
959        any algorithms.  The result was more modular, more easily
960        extensible, more reliable, and slightly faster.
961    },
962    comment     = {
963        The evidence given is thin.
964        }
965}
966
967@article{doskernel,
968    keywords    = {light weight processes},
969    contributer = {gjditchfield@plg},
970    author      = {Tom Green},
971    title       = {A {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Multitasking Kernel},
972    journal     = {Dr. Dobb's Journal of Software Tools},
973    year        = 1989,
974    month       = feb, volume = 14, number = 2, pages = {45-51},
975    comment     = {
976       A light-weight multitasking kernel for MS-DOS.  A task\_control
977       object holds task objects, which may block themselves on signal
978       objects.  Task switching is normally preemptive, but tasks can turn
979       off preemption before calling non-reentrant routines.  Source code
980       is given.
981    }
982}
983
984@inproceedings{Doeppner87,
985    keywords    = {concurrency},
986    contributer = {pabuhr@plg},
987    author      = {Thomas W. Doeppner and Alan J. Gebele},
988    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} on a Parallel Machine},
989    booktitle   = {Proceedings and Additional Papers {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Workshop},
990    organization= {USENIX Association},
991    address     = {Santa Fe, New Mexico, U.S.A},
992    month       = nov,
993    year        = 1987,
994    pages       = {94-107},
995}
996
997@book{Lippman91,
998    keywords    = {C++},
999    contributer = {pabuhr@plg},
1000    author      = {Stanley B. Lippman},
1001    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Primer},
1002    publisher   = {Addison-Wesley},
1003    address     = {Boston},
1004    year        = 1991,
1005    edition     = {2nd},
1006    note        = {QA76.73.C15L57},
1007}
1008
1009@book{c++:v1,
1010    keywords    = {C++},
1011    contributer = {gjditchfield@plg},
1012    author      = {Bjarne Stroustrup},
1013    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1014    publisher   = {Addison-Wesley},
1015    address     = {Boston},
1016    year        = 1986,
1017    edition     = {1st},
1018    series      = {Addison-Wesley Series in Computer Science}
1019}
1020
1021@book{c++:v2,
1022    keywords    = {C++},
1023    contributer = {pabuhr@plg},
1024    author      = {Bjarne Stroustrup},
1025    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1026    publisher   = {Addison-Wesley},
1027    address     = {Boston},
1028    year        = 1991,
1029    edition     = {2nd},
1030}
1031
1032@book{c++:v3,
1033    keywords    = {C++},
1034    contributer = {pabuhr@plg},
1035    author      = {Bjarne Stroustrup},
1036    title       = {The {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language},
1037    publisher   = {Addison Wesley Longman},
1038    year        = 1997,
1039    edition     = {3rd},
1040}
1041
1042@manual{Csharp,
1043    keywords    = {C#},
1044    contributer = {pabuhr@plg},
1045    title       = {C\# Language Specification, Standard ECMA-334},
1046    organization= {ECMA International Standardizing Information and Communication Systems},
1047    month       = jun,
1048    year        = 2006,
1049    edition     = {4th},
1050}
1051
1052@article{Buhr85,
1053    keywords    = {goto, multi-exit loop},
1054    contributer = {pabuhr@plg},
1055    author      = {P. A. Buhr},
1056    title       = {A Case for Teaching Multi-exit Loops to Beginning Programmers},
1057    journal     = sigplan,
1058    volume      = 20,
1059    number      = 11,
1060    month       = nov,
1061    year        = 1985,
1062    pages       = {14-22}
1063}
1064
1065@inproceedings{Necula02,
1066    author      = {Necula, George C. and McPeak, Scott and Weimer, Westley},
1067    title       = {{CCured}: Type-safe Retrofitting of Legacy Code},
1068    booktitle   = {Proceedings of the 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages},
1069    series      = {POPL '02},
1070    year        = {2002},
1071    location    = {Portland, Oregon},
1072    pages       = {128-139},
1073    publisher   = {ACM},
1074    address     = {New York, NY, USA},
1075}
1076
1077@techreport{cforall-ug,
1078    keywords    = {cforall, user guide},
1079    contributer = {pabuhr@plg},
1080    author      = {Peter A. Buhr and Glen Ditchfield and David Till and Charles R. Zarnke},
1081    title       = {\textsf{C}$\mathbf{\forall}$ Users Guide, Version 0.1},
1082    institution = {Department of Computer Science, University of Waterloo},
1083    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1084    month       = oct,
1085    year        = 2001,
1086    note        = {\href{http://plg.uwaterloo.ca/~cforall/cfa.ps}{http://\-plg.uwaterloo.ca/\-\char`\~cforall/\-cfa.ps}},
1087}
1088
1089@manual{cforall-refrat,
1090    keywords    = {polymorphism},
1091    contributer = {gjditchfield@plg},
1092    author      = {Glen Ditchfield},
1093    title       = {Cforall Reference Manual and Rationale},
1094    edition     = {Revision 1.82},
1095    month       = jan,
1096    year        = 1998,
1097    note        = {{\small\textsf{ftp://\-plg.uwaterloo.ca/\-pub/\-Cforall/\-refrat.ps.gz}}},
1098}
1099
1100@book{Yourdon79,
1101    keywords    = {software engineering},
1102    contributer = {pabuhr@plg},
1103    editor      = {Edward Nash Yourdon},
1104    title       = {Classics in Software Engineering},
1105    publisher   = {Yourdon Press},
1106    address     = {New York},
1107    year        = 1979,
1108}
1109
1110@inproceedings{Crnogorac98,
1111    keywords    = {inheritance anomaly},
1112    contributer = {pabuhr@plg},
1113    author      = {Lobel Crnogorac and Anand S. Rao and Kotagiri Ramamohanarao},
1114    title       = {Classifying Inheritance Mechanisms in Concurrent Object-Oriented Programming},
1115    editor      = {Eric Jul},
1116    booktitle   = {{ECOOP}~'98---Object-Oriented Programming},
1117    series      = {Lecture Notes in Computer Science},
1118    publisher   = {Springer},
1119    volume      = 1445,
1120    year        = 1998,
1121    pages       = {571-601},
1122    ISBN        = {3-540-64737-6},
1123    ISSN        = {0302-9743},
1124    abstract    = {
1125        Inheritance is one of the key concepts in object-oriented rogramming. However, the
1126        usefulness of inheritance in concurrent object-oriented programming is greatly
1127        reduced by the problem of inheritance anomaly. Inheritance anomaly is manifested
1128        by undesirable re-definitions of inherited code. The problem is aggravated by the
1129        lack of a formal analysis, with a multitude of differing proposals and conflicting
1130        opinions causing the current state of research, and further directions, to be
1131        unclear. In this paper we present a formal analysis of inheritance anomaly in
1132        concurrent object-oriented programming. Starting from a formal definition of the
1133        problem we develop a taxonomy of the anomaly, and use it to classify the various
1134        proposals. As a result, the major ideas, trends and limitations of the various
1135        proposals are clearly exposed. Formal analysis of the anomaly and a thorough
1136        exposition of its causes and implications are the pre-requisites for a successful
1137        integration of inheritance and concurrency.
1138    },
1139}
1140
1141@book{CLU,
1142    keywords    = {CLU},
1143    contributer = {gjditchfield@plg},
1144    author      = {Barbara Liskov and Russell Atkinson and Toby Bloom and Eliot
1145                Moss and J. Craig Schaffert and Robert Scheifler and Alan Snyder},
1146    title       = {CLU Reference Manual},
1147    publisher   = {Springer},
1148    address     = {New York},
1149    year        = 1981,
1150    volume      = 114,
1151    series      = {Lecture Notes in Computer Science}
1152}
1153
1154@manual{Cobol14,
1155    keywords    = {ISO/IEC Cobol 14},
1156    contributer = {pabuhr@plg},
1157    author      = {Cobol14},
1158    title       = {Programming Languages -- {Cobol} ISO/IEC 1989:2014},
1159    edition     = {2nd},
1160    institution = {International Standard Organization},
1161    address     = {\href{https://www.iso.org/standard/51416.html}{https://\-www.iso.org/\-standard/\-51416.html}},
1162    year        = 2014,
1163}
1164
1165@article{coagulation,
1166    keywords    = {register allocation, instruction selection, jello},
1167    contributer = {gjditchfield@plg},
1168    author      = {Michael Karr},
1169    title       = {Code Generation by Coagulation},
1170    journal     = sigplan,
1171    year        = 1984,
1172    month       = jun,
1173    volume      = 19,
1174    number      = 6,
1175    pages       = {1-12},
1176    note        = {Proceedings of the ACM SIGPLAN '84 Symposium on Compiler Construction},
1177    abstract    = {
1178        This paper describes a new approach to code-generation.  The
1179        central tenet is that there must be a more intimate coupling
1180        between register allocation and instruction selection than exists
1181        in present-day technology.  This is achieved by generating code in
1182        very small regions and gradually coalescing the part of the program
1183        that is ``compiled''.
1184    },
1185}
1186
1187@article{Soloway83,
1188    keywords    = {goto, structure programming},
1189    contributer = {pabuhr@plg},
1190    author      = {E. Soloway and J. Bonar and K. Ehrlich},
1191    title       = {Cognitive Strategies and Looping Constructs: An Empirical Study},
1192    journal     = cacm,
1193    month       = nov,
1194    year        = 1983,
1195    volume      = 26,
1196    number      = 11,
1197    pages       = {853-860},
1198}
1199
1200@book{sml:commentary,
1201    author      = {Robin Milner and Mads Tofte},
1202    title       = {Commentary on Standard {ML}},
1203    publisher   = {MIT Press},
1204    address     = {Cambridge},
1205    year        = 1991
1206}
1207
1208@article{Hyman66,
1209    keywords    = {mutual exclusion, software solution, incorrect},
1210    contributer = {pabuhr@plg},
1211    author      = {Harris Hyman},
1212    title       = {Comments on a Problem in Concurrent Programming Control},
1213    journal     = cacm,
1214    month       = jan,
1215    year        = 1966,
1216    volume      = 9,
1217    number      = 1,
1218    pages       = {45},
1219    note        = {Letter to the Editor}
1220}
1221
1222@inproceedings{clos,
1223    keywords    = {},
1224    contributer = {gjditchfield@plg},
1225    author      = {Linda G. DeMichiel and Richard P. Gabriel},
1226    title       = {The Common Lisp Object System: An Overview},
1227    booktitle   = {ECOOP '87. European Conference on Object-Oriented Programming},
1228    year        = 1987,
1229    pages       = {151-170},
1230    publisher   = {Springer}
1231}
1232
1233@book{CommonLisp,
1234    keywords    = {common lisp},
1235    contributer = {pabuhr@plg},
1236    author      = {Guy Steele},
1237    title       = {COMMON LISP: The Language},
1238    publisher   = {Digital Press},
1239    address     = {New York},
1240    year        = 1984
1241}
1242
1243@article{CommonLoops,
1244    author      = {D. Bobrow and K. Kahn and G. Kiczales and L. Masinter and M. Stefik and F. Zdybel},
1245    title       = {CommonLoops: Merging Common Lisp and Object-Oriented Programming},
1246    address     = {Portland, Oregon, U.S.A.},
1247    journal     = {Proc. ACM Conf. on Object-Oriented Systems, Languages and Applications},
1248    year        = 1986,
1249    month       = sep,
1250    pages       = {17-29},
1251}
1252
1253@article{co-overview,
1254    keywords    = {CommonObjects, implementation, encapsulation},
1255    contributer = {gjditchfield@plg},
1256    author      = {Alan Snyder},
1257    title       = {CommonObjects: An Overview},
1258    journal     = sigplan,
1259    year        = 1986,
1260    month       = oct, volume = 21, number = 10, pages = {19-28},
1261    note        = {Object Oriented Programming Workshop}
1262}
1263
1264@article{CSP,
1265    keywords    = {CSP, concurrency},
1266    contributer = {pabuhr@plg},
1267    author      = {C. A. R. Hoare},
1268    title       = {Communicating Sequential Processes},
1269    journal     = cacm,
1270    month       = aug,
1271    year        = 1978,
1272    volume      = 21,
1273    number      = 8,
1274    pages       = {666-677}
1275}
1276
1277@book{Hoare85,
1278    author      = {C. A. R. Hoare},
1279    title       = {Communicating Sequential Processes},
1280    year        = 1985,
1281    isbn        = {0-13-153271-5},
1282    publisher   = {Prentice-Hall},
1283    address     = {Upper Saddle River, NJ, USA},
1284    note        = {\href{http://www.usingcsp.com/cspbook.pdf}{http://\-www.usingcsp.com/\-cspbook.pdf}},
1285}
1286
1287@article{Hansen72a,
1288    keywords    = {monitors, automatic signal},
1289    contributer = {pabuhr@plg},
1290    author      = {Per {Brinch Hansen}},
1291    title       = {A Comparison of Two Synchronizing Concepts},
1292    journal     = acta,
1293    volume      = 1,
1294    year        = 1972,
1295    pages       = {190-199},
1296}
1297
1298@book{Aho06,
1299    author      = {Alfred V. Aho and Monica S. Lam and Ravi Sethi and Jeffrey D. Ullman},
1300    title       = {Compilers: Principles, Techniques, and Tools},
1301    edition     = {2nd},
1302    year        = {2006},
1303    publisher   = {Addison-Wesley Longman Publishing},
1304    address     = {Boston, MA, USA},
1305}
1306
1307@article{Bacon94,
1308    keywords    = {parallelizing compiler},
1309    contributer = {pabuhr@plg},
1310    author      = {David F. Bacon and Susan L. Graham and Oliver J. Sharp},
1311    title       = {Compiler Transformations for High-Performance Com\-puting},
1312    journal     = acmcs,
1313    volume      = 26,
1314    number      = 4,
1315    month       = dec,
1316    year        = 1994,
1317    pages       = {345-420},
1318}
1319
1320@inproceedings{Berger01,
1321    author      = {Emery D. Berger and Benjamin G. Zorn and Kathryn S. McKinley},
1322    title       = {Composing High-Performance Memory Allocators},
1323    booktitle   = {{SIGPLAN} Conference on Programming Language Design and Implementation},
1324    pages       = {114-124},
1325    year        = 2001,
1326    url         = {http://citeseer.ist.psu.edu/berger01composing.html}
1327} 
1328
1329@article{Andrews83,
1330    keywords    = {general concurrency},
1331    contributer = {pabuhr@plg},
1332    author      = {Gregory R. Andrews and Fred B. Schneider},
1333    title       = {Concepts and Notations for Concurrent Programming},
1334    journal     = acmcs,
1335    volume      = 15,
1336    number      = 1,
1337    month       = mar,
1338    year        = 1983,
1339    pages       = {3-43},
1340}
1341
1342@mastersthesis{Mok97,
1343    author      = {Wing Yeung Russell Mok},
1344    title       = {Concurrent Abnormal Event Handling Mechanisms},
1345    school      = {University of Waterloo},
1346    year        = 1997,
1347    month       = sep,
1348    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1349    note        = {\href{http://plg.uwaterloo.ca/theses/MokThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-MokThesis.pdf}},
1350}
1351
1352@article{Gehani86,
1353    keywords    = {Concurrent programming, C, Distributed systems, rendezvous},
1354    contributer = {dgharriss@plg},
1355    author      = {N. H. Gehani and W. D. Roome},
1356    title       = {{Concurrent C}},
1357    journal     = spe,
1358    volume      = 16,
1359    number      = 9,
1360    month       = sep,
1361    year        = 1986,
1362    pages       = {821-844},
1363    abstract    = {
1364        Our objective is to enhance C so that it can be used to write
1365        concurrent programs that can run efficiently on both single computers
1366        and multicomputers.  Our concurrent programming extensions to C are
1367        based on the {\it rendezvous\/} concept.  These extensions include
1368        mechanisms for the declaration and creation of processes, for process
1369        synchronization and interaction, for process termination and abortion.
1370        We give a rationale for our decisions and compare Concurrent C
1371        extensions with the concurrent programming facilities in Ada.
1372        Concurrent C has been implemented on the UNIX system running on a
1373        single processor.  A distributed version of Concurrent C is being
1374        implemented.
1375   },
1376   comment      = {
1377        Select with guarded and screened accepts.  Typed processes.
1378        Process-valued expressions and process variables.  Processes have
1379        execution priority: Create {\em process-type-name}(args) [with
1380        priority(p)], and the priority can be changed on the fly.  Complicated
1381        guard/screen structure on accept: accept {\em transaction}(param names)
1382        [suchthat (exp)] [by (exp)] [compoundstatement].  Accepts cannot
1383        appear in functions!  Can specify timeouts on transaction calls.
1384        Code examples: buffer process, dining philosophers, lock manager.
1385        Section on diffs between Concurrent C and Ada.
1386   }
1387}
1388
1389@article{ConcurrentC++,
1390    keywords    = {concurrency, C++},
1391    contributer = {pabuhr@plg},
1392    author      = {N. H. Gehani and W. D. Roome},
1393    title       = {Concurrent {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}: Concurrent Programming with Class(es)},
1394    journal     = spe,
1395    month       = dec,
1396    year        = 1988,
1397    volume      = 18,
1398    number      = 12,
1399    pages       = {1157-1177}
1400}
1401
1402@article{Courtois71,
1403    keywords    = {reader and writer, p and v},
1404    contributer = {pabuhr@plg},
1405    author      = {P. J. Courtois and F. Heymans and D. L. Parnas},
1406    title       = {Concurrent Control with Readers and Writers},
1407    journal     = cacm,
1408    volume      = 14,
1409    number      = 10,
1410    month       = oct,
1411    year        = 1971,
1412    pages       = {667-668},
1413    annote      = {
1414                Many errors in the two solutions.
1415    }
1416}
1417
1418@incollection{Reppy93,
1419    keywords    = {ML, concurrency, continuation passing},
1420    contributer = {pabuhr@plg},
1421    author      = {John H. Reppy},
1422    title       = {Concurrent {ML}: Design, Application and Semantics},
1423    booktitle   = {Functional Programming, Concurrency, Simulation and Automated Reasoning},
1424    editor      = {P. E. Lauer},
1425    pages       = {165-198},
1426    publisher   = {Springer},
1427    address     = {Berlin, DE},
1428    year        = 1993,
1429    ISBN        = {3-540-56883-2},
1430    abstract    = {
1431        Concurrent ML (CML) is a high-level language for concurrent
1432        programming. It is an extension of Standard ML (SML) and is implemented
1433        on top of Standard ML of New Jersey (SML/NJ). CML is a practical
1434        language and is being used to build real systems. It demonstrates that
1435        one need not sacrifice high-level notation in order to have good
1436        performance. CML is also a well-defined language. In the tradition of
1437        SML, it has a formal semantics and its type-soundness has been
1438        proven.},
1439    note        = {
1440        Proceedings of International Lecture Series 1991-92, McMaster
1441        UniversityLecture Notes in Computer Science 693.},
1442}
1443
1444@article{BLASE-2,
1445    keywords    = {concurrency, BLASE-2},
1446    contributer = {pabuhr@plg},
1447    author      = {Piyush Mehrotra and John Van Rosendale},
1448    title       = {Concurrent Object Access in BLASE~2},
1449    journal     = sigplan,
1450    volume      = 24,
1451    number      = 4,
1452    month       = apr,
1453    year        = 1989,
1454    pages       = {40-42},
1455    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming,
1456                   Sept. 26--27, 1988, San Diego, California, U.S.A},
1457}
1458
1459@techreport{Kafura88,
1460    keywords    = {objects, concurrency},
1461    contributer = {pabuhr@plg},
1462    author      = {Dennis Kafura},
1463    title       = {Concurrent Object-Oriented Real-Time Systems Research},
1464    institution = {Department of Computer Science, Virginia Polytechnic},
1465    number      = {TR 88-47},
1466    year        = 1988
1467}
1468
1469@article{Buhr92a,
1470    keywords    = {C++, concurrency, light-weight process, shared memory},
1471    contributer = {pabuhr@plg},
1472    author      = {P. A. Buhr and Glen Ditchfield and R. A. Stroobosscher and B. M. Younger and C. R. Zarnke},
1473    title       = {$\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}: Concurrency in the Object-Oriented Language {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
1474    journal     = spe,
1475    volume      = 22,
1476    number      = 2,
1477    month       = feb,
1478    year        = 1992,
1479    pages       = {137-172},
1480}
1481
1482@techreport{uC++,
1483    keywords    = {C++, concurrency, light-weight process, shared memory},
1484    contributer = {pabuhr@plg},
1485    author      = {Peter A. Buhr},
1486    title       = {$\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Annotated Reference Manual, Version 7.0.0},
1487    institution = {School of Computer Science, University of Waterloo},
1488    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1489    month       = dec,
1490    year        = 2017,
1491    note        = {\href{http://plg.uwaterloo.ca/~usystem/pub/uSystem/u++-7.0.0.sh}{http://\-plg.\-uwaterloo.\-ca/\-$\sim$usystem/\-pub/\-uSystem/\-u++-7.0.0.sh}},
1492}
1493
1494@book{Burns93,
1495    keywords    = {concurrency, Pascal},
1496    contributer = {pabuhr@plg},
1497    author      = {Alan Burns and Geoff Davies},
1498    title       = {Concurrent Programming},
1499    publisher   = {Addison Wesley Longman},
1500    year        = 1993,
1501}
1502
1503@article{Hansen73a,
1504    keywords    = {monitors},
1505    contributer = {pabuhr@plg},
1506    author      = {Per {Brinch Hansen}},
1507    title       = {Concurrent Programming Concepts},
1508    journal     = spe,
1509    month       = dec,
1510    year        = 1973,
1511    volume      = 5,
1512    number      = 4,
1513    pages       = {223-245},
1514}
1515
1516@book{Lea97,
1517    keywords    = {concurrency, Java},
1518    contributer = {pabuhr@plg},
1519    author      = {Doug Lea},
1520    title       = {Concurrent Programming in {J}ava: Design Principles and Patterns},
1521    publisher   = {Addison-Wesley},
1522    address     = {Boston},
1523    year        = 1997,
1524    edition     = {1st},
1525}
1526
1527@book{Hartley98,
1528    keywords    = {concurrency, Java},
1529    contributer = {pabuhr@plg},
1530    author      = {Stephen J. Hartley},
1531    title       = {Concurrent Programming: The {J}ava Programming Language},
1532    publisher   = {Oxford University Press},
1533    year        = 1998,
1534    edition     = {1st},
1535}
1536
1537@book{Lea00,
1538    keywords    = {concurrency, Java},
1539    contributer = {pabuhr@plg},
1540    author      = {Doug Lea},
1541    title       = {Concurrent Programming in {J}ava: Design Principles and Patterns},
1542    publisher   = {Addison-Wesley},
1543    address     = {Boston},
1544    year        = 2000,
1545    edition     = {2nd},
1546}
1547
1548@book{ConcurrentC,
1549    keywords    = {concurrency, C},
1550    contributer = {pabuhr@plg},
1551    author      = {N. H. Gehani and W. D. Roome},
1552    title       = {The {Concurrent C} Programming Language},
1553    publisher   = {Silicon Press},
1554    address     = {Summit},
1555    year        = 1989,
1556}
1557
1558@book{Andrews91:book,
1559    keywords    = {concurrency},
1560    contributer = {pabuhr@plg},
1561    author      = {Gregory R. Andrews},
1562    title       = {Concurrent Programming: Principles and Practice},
1563    publisher   = {Benjamin/Cummings Publish\-ing},
1564    address     = {Redwood City},
1565    year        = 1991,
1566}
1567
1568@article{Buhr05a,
1569    keywords    = {concurrency, myths},
1570    contributer = {pabuhr@plg},
1571    author      = {Peter A. Buhr and Ashif S. Harji},
1572    title       = {Concurrent Urban Legends},
1573    journal     = ccpe,
1574    month       = aug,
1575    year        = 2005,
1576    volume      = 17,
1577    number      = 9,
1578    pages       = {1133-1172},
1579}
1580
1581@mastersthesis{Delisle18,
1582    author      = {Thierry Delisle },
1583    title       = {Concurrency in \textsf{C}$\mathbf{\forall}$},
1584    school      = {School of Computer Science, University of Waterloo},
1585    year        = 2018,
1586    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1587    note        = {\href{https://uwspace.uwaterloo.ca/handle/10012/12888}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-12888}},
1588}
1589
1590@techreport{Buhr90,
1591    keywords    = {objects, concurrency},
1592    contributer = {gjditchfield@plg},
1593    author      = {P. A. Buhr and G. J. Ditchfield and B. M. Younger and C. R. Zarnke}, 
1594    title       = {Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
1595    institution = {Department of Computer Science, University of Waterloo},
1596    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1597    number      = {CS-90-18},
1598    month       = may,
1599    year        = 1990
1600}
1601
1602@book{Burns98,
1603    keywords    = {concurrency, Ada},
1604    author      = {Alan Burns and Andy Wellings},
1605    title       = {Concurrency in {Ada}},
1606    publisher   = {Cambridge University Press},
1607    year        = 1998,
1608    edition     = {2nd},
1609}
1610
1611@book{Bernstein93,
1612    keywords    = {concurrency},
1613    author      = {Arthur J. Bernstein and Philip M. Lewis},
1614    title       = {Concurrency in Programming and Database Systems},
1615    publisher   = {Jones and Bartlett},
1616    year        = 1993,
1617}
1618
1619@inproceedings{Pitman01,
1620    keywords    = {LISP, exception handling},
1621    contributer = {pabuhr@plg},
1622    author      = {Kent M. Pitman},
1623    title       = {Condition Handling in the Lisp Language Family},
1624    booktitle   = {Exception Handling},
1625    publisher   = {Springer},
1626    volume      = 2022,
1627    series      = {LNCS},
1628    year        = 2001,
1629    pages       = {39-59}
1630}
1631
1632@inbook{enhancement,
1633    keywords    = {bounded polymorphism, Comandos},
1634    contributer = {gjditchfield@plg},
1635    author      = {Chris Horn},
1636    title       = {Conformace, Genericity, Inheritance and Enhancement},
1637    pages       = {223-233},
1638    publisher   = {Springer},
1639    year        = 1987,
1640    volume      = 276,
1641    series      = "Lecture Notes in Computer Science",
1642    note        = "ECOOP '87 European Conference on Object-Oriented Programming",
1643    summary     = {
1644        Considers effect of conformance on Meyer's conclusions in
1645        \cite{polymorphism}.
1646
1647        Implementing a swap function as a member of a type {\cd Swappable}
1648        with {\cd in out Top} parameters doesn't work, because conformance
1649        requires arguments to be of type {\cd Top}.
1650
1651        An enhancive type has a type parameter, bounded by some type, and
1652        defines members.  Types conforming to the bound can be passed as
1653        arguments to create types with the extra members.  The signature of
1654        the enhanced type is based on the signature of the argument, not the
1655        bound, as if enhancive types were macros.  Hence enhanced types do not
1656        necessarily conform to each other.  Types conforming to the bound
1657        conform to enhanced types, which allows new functions to be applied
1658        to old types.
1659
1660        Enhancive types are not generic types.  If the argument is omitted,
1661        the bound is used as a default.  Assignment of enhanced types to
1662        default-enhanced types is allowed (enhanced types conform to the
1663        default-enhanced type).  This is (probably) statically type-safe,
1664        because arguments must conform to the bound, and the new members
1665        only use operations defined for the bound.
1666
1667        With facilities for member renaming and deletion, enhancive types
1668        provide the equivalent of constrained generic types.
1669    }
1670}
1671
1672@misc{Taylor10,
1673    keywords    = {const, poisoning},
1674    contributer = {pabuhr@plg},
1675    author      = {Ian Lance Taylor},
1676    title       = {const},
1677    month       = oct,
1678    year        = 2010,
1679    howpublished= {\href{https://www.airs.com/blog/archives/428}
1680                  {https://www.airs.com/\-blog/\-archives/\-428}},
1681    optnote     = {Accessed: 2018-05},
1682}
1683
1684@phdthesis{Ditchfield92,
1685    keywords    = {C, parametric polymorphism, overloading},
1686    contributer = {pabuhr@plg},
1687    author      = {Glen Jeffrey Ditchfield},
1688    title       = {Contextual Polymorphism},
1689    school      = {Department of Computer Science, University of Waterloo},
1690    year        = 1992,
1691    address     = {Waterloo, Ontario, Canada, N2L 3G1},
1692    note        = {\href{http://plg.uwaterloo.ca/theses/DitchfieldThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-DitchfieldThesis.pdf}}
1693}
1694
1695@inproceedings{frameworks:HHG90,
1696    keywords    = {formal},
1697    contributer = {pabuhr@plg},
1698    author      = {Richard Helm and Ian M. Holland and Dipayan Gangopadhyay},
1699    title       = {Contracts: Specifying Behavioural Compositions in Cbject-Oriented Systems},
1700    booktitle   = {Proceedings of ACM Symposium on Object-Oriented Programming: Systems, Languages and Applications},
1701    year        = 1990,
1702    pages       = {169-180},
1703}
1704
1705@article{Wand80,
1706    keywords    = {concurrency, continuation},
1707    contributer = {pabuhr@plg},
1708    author      = {Mitchell Wand},
1709    title       = {Continuation-Based Multiprocessing},
1710    publisher   = {The Lisp Conference},
1711    journal     = {Conference Record of the 1980 Lisp Conference},
1712    pages       = {19-28},
1713    year        = 1980,
1714}
1715
1716@article{Hieb90,
1717    keywords    = {continuations, concurrency},
1718    contributer = {pabuhr@plg},
1719    author      = {Robert Hieb and R. Kent Dybvig},
1720    title       = {Continuations and Concurrency},
1721    journal     = sigplan,
1722    volume      = 25,
1723    number      = 3,
1724    month       = mar,
1725    year        = 1990,
1726    pages       = {128-136},
1727    note        = {Proceedings of the Second ACM SIGPLAN Symposium on Principles \& Practise of Parallel Programming,
1728                   March. 14--16, 1990, Seattle, Washington, U.S.A},
1729}
1730
1731@inproceedings{Haynes84,
1732    keywords    = {continuations, coroutines, Scheme},
1733    contributer = {pabuhr@plg},
1734    author      = {Christopher T. Haynes and Daniel P. Friedman and Mitchell Wand},
1735    title       = {Continuations and Coroutines},
1736    booktitle   = {Conference Record of the 1984 {ACM} Symposium on Lisp and Functional Programming},
1737    organization= {Association for Computing Machinery},
1738    month       = aug,
1739    year        = 1984,
1740    pages       = {293-298},
1741    abstract    = {
1742        The power of first class continuations is demonstrated by implementing
1743        a variety of coroutine mechanisms using only continuations and
1744        functional abstraction. The importance of general abstraction
1745        mechanisms such as continuations is discussed.},
1746}
1747
1748@inproceedings{Zahn74,
1749    keywords    = {goto, structured programming},
1750    contributer = {pabuhr@plg},
1751    author      = {C. T. Zahn},
1752    title       = {Control Statement for Natural Top-down Structured Programming},
1753    booktitle   = {Symposium on Programming Languages},
1754    address     = {Paris, France},
1755    year        = 1974,
1756}
1757
1758@unpublished{Ditchfield:conversions,
1759    contributer = {a3moss@uwaterloo.ca},
1760    author      = {Glen Ditchfield},
1761    title       = {Conversions for \textsf{C}$\mathbf{\forall}$},
1762    note        = {\href{http://plg.uwaterloo.ca/~cforall/Conversions/index.html}{http://\-plg.uwaterloo.ca/\-\textasciitilde cforall/\-Conversions/\-index.html}},
1763    month       = {Nov},
1764    year        = {2002},
1765    urldate     = {28 July 2016},
1766}
1767
1768@techreport{Dijkstra65,
1769    keywords    = {concurrency, Dekker's algorithm, semaphores},
1770    contributer = {pabuhr@plg},
1771    author      = {Edsger W. Dijkstra},
1772    title       = {Cooperating Sequential Processes},
1773    institution = {Technological University},
1774    address     = {Eindhoven, Netherlands},
1775    year        = 1965,
1776    note        = {Reprinted in \cite{Genuys68} pp. 43--112.}
1777}
1778
1779@book{Marlin80,
1780    keywords    = {coroutines},
1781    contributer = {pabuhr@plg},
1782    author      = {Christopher D. Marlin},
1783    title       = {Coroutines: A Programming Methodology, a Language Design and an Implementation},
1784    publisher   = {Springer},
1785    address     = {New York},
1786    year        = 1980,
1787    volume      = 95,
1788    series      = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis}
1789}
1790 
1791@article{Wang71,
1792    keywords    = {coroutines},
1793    contributer = {pabuhr@plg},
1794    author      = {Arne Wang and Ole-Johan Dahl},
1795    title       = {Coroutine Sequencing in a Block Structured Environment},
1796    journal     = "BIT",
1797    volume      = 11,
1798    month       = nov,
1799    year        = 1971,
1800    pages       = {425-449},
1801}
1802 
1803@article{Castagna95,
1804    keywords    = {type-systems, covariance, contravariance},
1805    contributer = {pabuhr@plg},
1806    author      = {Giuseppe Castagna},
1807    title       = {Covariance and Contravariance : Conflict without a Cause},
1808    journal     = toplas,
1809    volume      = 17,
1810    number      = 3,
1811    month       = may,
1812    year        = 1995,
1813    pages       = {341-447},
1814}
1815
1816@book{Fischer88,
1817    keywords    = {compiler construction},
1818    author      = {Charles N. Fischer and Richard J. {LeBlanc, Jr.}},
1819    title       = {Crafting a Compiler},
1820    publisher   = {Benjamin Cummings},
1821    year        = 1991,
1822}
1823
1824@misc{CS343,
1825    keywords    = {uC++ teaching},
1826    contributer = {pabuhr@plg},
1827    key         = {Peter Buhr},
1828    title       = {CS343},
1829    year        = 2017,
1830    howpublished= {\href{https://www.student.cs.uwaterloo.ca/~cs343}{https://\-www.student.cs.uwaterloo.ca/\-~cs343}},
1831}
1832
1833@inproceedings{Jim02,
1834    keywords    = {C dialect, parametric polymorphic, safe memory allocation},
1835    contributer = {pabuhr@plg},
1836    author      = {Trevor Jim and Greg Morrisett and Dan Grossman and Michael Hicks and James Cheney and and Yanling Wang},
1837    title       = {{C}yclone: A Safe Dialect of {C}},
1838    booktitle   = {USENIX Annual Technical Conference},
1839    organization= {USENIX Association},
1840    address     = {Monterey, California, U.S.A.},
1841    month       = jun,
1842    year        = 2002,
1843    pages       = {275-288},
1844}
1845
1846% D
1847
1848@manual{D,
1849    keywords    = {D programming language},
1850    contributer = {pabuhr@plg},
1851    title       = {{D} Programming Language},
1852    author      = {Walter Bright and Andrei Alexandrescu},
1853    organization= {Digital Mars},
1854    year        = 2016,
1855    note        = {\href{http://dlang.org/spec/spec.html}{http://\-dlang.org/\-spec/\-spec.html}},
1856}
1857
1858@techreport{Cui90,
1859    keywords    = {exception handling},
1860    contributer = {pabuhr@plg},
1861    author      = {Qian Cui},
1862    title       = {Data-Oriented Exception Handling},
1863    institution = {Department of Computer Science, University of Maryland},
1864    address     = {College Park, Maryland, U.S.A., 20742},
1865    number      = {CS-TR-2384},
1866    month       = jan,
1867    year        = 1990,
1868}
1869
1870@article{Cui92,
1871    contributer = {rkrische@plg},
1872    author      = {Qian Cui and John Gannon},
1873    title       = {Data-oriented Exception Handling},
1874    journal     = {IEEE Transactions on Software Engineering},
1875    month       = may,
1876    year        = 1992,
1877    volume      = 18,
1878    number      = 5,
1879    pages       = {393-401},
1880}
1881
1882@manual{SIMULA87,
1883    keywords    = {Simula standard},
1884    contributer = {gjditchfield@plg},
1885    title       = {Databehandling -- Programspr{\aa}k -- {SIMULA}},
1886    organization= {Standardiseringskommissionen i Sverige},
1887    note        = {Svensk Standard SS 63 61 14},
1888    year        = 1987,
1889    abstract    = {
1890        Standard for the programming language SIMULA.  Written in English.
1891    }
1892}
1893
1894@article{Liskov75,
1895    keywords    = {abstract data types, encapsulation, verification},
1896    contributer = {gjditchfield@plg},
1897    author      = {Barbara H. Liskov},
1898    title       = {Data Types and Program Correctness},
1899    journal     = sigplan,
1900    year        = 1975,
1901    month       = jul,
1902    volume      = 10,
1903    number      = 7,
1904    pages       = {16-17},
1905    summary     = {
1906        Type definitions should contain the implementation of the type and
1907        its operations.  The grouping makes programs simpler and more
1908        understandable.  Encapsulating the definition aids verification and
1909        forces a precise specification of the interface.
1910    }
1911}
1912
1913@article{dtav,
1914    keywords    = {Russell, types},
1915    contributer = {gjditchfield@plg},
1916    author      = {James Donahue and Alan Demers},
1917    title       = {Data Types are Values},
1918    journal     = toplas,
1919    month       = jul,
1920    year        = 1985,
1921    volume      = 7,
1922    number      = 3,
1923    pages       = {426-445},
1924    comment     = {
1925        Data types are sets of operations providing interpretations of
1926        values from a meaningless, typeless universal value space.  Types
1927        and operations are also contained in this value space.
1928
1929        Functions returning types replace generic types.
1930
1931        Polymorphic functions have type parameters.  Evaluation is not
1932        macro expansion:
1933        \begin{verbatim}
1934            R == func [n:val integer; T:type[]] val integer
1935                {if n > 0 => r[n-1, Array[1,10,T]] # n <= 0 => 17 fi}
1936        \end{verbatim}
1937    }
1938}
1939
1940@article{Holt72,
1941    keywords    = {concurrency, deadlock},
1942    contributer = {pabuhr@plg},
1943    author      = {Richard C. Holt},
1944    title       = {Some Deadlock Properties of Computer Systems},
1945    journal     = acmcs,
1946    volume      = 4,
1947    number      = 3,
1948    month       = sep,
1949    year        = 1972,
1950    pages       = {179-196},
1951}
1952
1953@misc{debug-malloc,
1954    keywords    = {memory allocation debugger},
1955    contributer = {gjditchfield@plg},
1956    author      = {Conor P. Cahill},
1957    title       = {debug\_malloc},
1958    howpublished= {comp.sources.unix, volume 22, issue 112},
1959    abstract    = {
1960        This package is a collection of routines which are a drop-in
1961        replacement for the malloc(3), memory(3), string(3), and bstring(3)
1962        library functions.
1963    }
1964}
1965
1966@book{sml,
1967    keywords    = {},
1968    contributer = {pabuhr@plg},
1969    author      = {Robin Milner and Mads Tofte and Robert Harper},
1970    title       = {The Definition of Standard {ML}},
1971    publisher   = {MIT Press},
1972    address     = {Cambridge},
1973    year        = 1990
1974}
1975
1976@techreport{sml:old,
1977    keywords    = {},
1978    contributer = {gjditchfield@plg},
1979    author      = {Robert Harper and Robin Milner and Mads Tofte},
1980    title       = {The Definition of Standard {ML}, Version 2},
1981    institution = {Department of Computer Science, University of Edinburgh},
1982    year        = 1988,
1983    address     = {The King's Buildings, Edinburgh EH9 3JZ},
1984    type        = {LFCS Report Series}, month = aug, number = {ECS-LFCS-88-62}
1985}
1986
1987@inproceedings{Reynolds72,
1988    keywords    = {continuation},
1989    contributer = {pabuhr@plg},
1990    author      = {John Reynolds},
1991    title       = {Definitional Interpreters for Higher Order Programming Languages},
1992    booktitle   = {ACM Conference Proceedings},
1993    organization= {ACM},
1994    year        = 1972,
1995    pages       = {717-740}
1996}
1997
1998@article{Buhr16,
1999    keywords    = {Dekker's algorithm, software solution, mutual exclusion, performance experiment},
2000    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
2001    title       = {Dekker's Mutual Exclusion Algorithm Made RW-Safe},
2002    journal     = ccpe,
2003    volume      = 28,
2004    number      = 1,
2005    pages       = {144-165},
2006    month       = jan,
2007    year        = 2016,
2008}
2009
2010@misc{steelman,
2011    keywords    = {Ada},
2012    contributer = {gjditchfied@plg},
2013    author      = {High Order Language Working Group},
2014    title       = {Department of Defense Requirements for High Order Computer Programming Languages},
2015    month       = jun, year = 1978,
2016    note        = {Reprinted in \cite{pldesign}.}
2017}
2018
2019@incollection{Tsay98,
2020    keywords    = {local spins, mutual exclusion, read/write atomicity, refinement, scalability},
2021    author      = {Yih-Kuen Tsay},
2022    title       = {Deriving a scalable algorithm for mutual exclusion},
2023    booktitle   = {Distributed Computing},
2024    editor      = {Shay Kutten},
2025    volume      = {1499},
2026    series      = {LNCS},
2027    publisher   = {Springer},
2028    address     = {Berlin Heidelberg},
2029    year        = {1998},
2030    pages       = {393-407},
2031}
2032
2033@article{Conway63,
2034    keywords    = {coroutine, original},
2035    contributer = {pabuhr@plg},
2036    author      = {Melvin E. Conway},
2037    title       = {Design of a Separable Transition-Diagram Compiler},
2038    journal     = cacm,
2039    month       = jul,
2040    year        = 1963,
2041    volume      = 6,
2042    number      = 7,
2043    pages       = {396-408},
2044}
2045
2046@book{Stroustrup94,
2047    keywords    = {C++},
2048    contributor = {wyrmok@plg},
2049    author      = {Bjarne Stroustrup},
2050    title       = {The Design and Evolution of {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2051    publisher   = {Addison-Wesley},
2052    address     = {Boston},
2053    year        = 1994
2054}
2055
2056@inproceedings{st:concurrent,
2057    keywords    = {concurrency, Smalltalk, futures},
2058    contributer = {gjditchfield@plg},
2059    author      = {Yasuhiko Yokote and Mario Tokoro},
2060    title       = {The Design and Implementation of {ConcurrentSmalltalk}},
2061    crossref    = "OOPSLA86",
2062    pages       = {331-340},
2063    comment     = {
2064        Objects are ordinary Smalltalk objects or ``atomic'' objects, which
2065        process messages one at a time in FIFO order.  Asynchronous method
2066        calls are made by appending ``\&'' at the call site.  The sender does
2067        not wait for a reply.  If the method returns a value, it
2068        (immediately?) returns a CBox object, which is like a future.  The
2069        sender can send the ``receive'' message to the CBox, which blocks
2070        until the CBox contains a value.
2071
2072        A method can execute the ``\verb|^|'' statement to return an object
2073        and terminate, or it can execute ``\verb|^^|'' to return an object
2074        and continue execution.  If ``\verb|^^foo|'' is executed after
2075        ``\verb|^^bar|'', foo is discarded, since bar has already been
2076        returned.
2077
2078        The article does not say whether asynchronous messages can be sent
2079        to ordinary objects, or whether ordinary messages can be sent to
2080        atomic objects.
2081    }
2082}
2083
2084@inproceedings{Ichbiah83,
2085    keywords    = {Ada, packages, generics},
2086    contributer = {gjditchfield@plg},
2087    author      = {Jean D. Ichbiah},
2088    title       = {On the Design of {Ada}},
2089    booktitle   = {Information Processing 83},
2090    year        = 1983,
2091    month       = sep, pages = {1-10},
2092    editor      = {R. E. A. Mason},
2093    organization= {IFIP},
2094    publisher = {North-Holland},
2095    summary = {
2096        Packages group related declarations or subprograms, and encapsulate
2097        data types.  Separate interfaces and bodies promotes information
2098        hiding by removing the need to scan the body, allows the body to be
2099        confidential, and provides a better specification of the contract
2100        between client and implementor.  Generics are an efficient way to
2101        factor out parts of similar definitions.
2102    }
2103}
2104
2105@book{Motet96,
2106    keywords    = {Ada, exception handling},
2107    contributer = {wyrmok@plg},
2108    author      = {G. Motet and A. Mapinard and J. C. Geoffroy},
2109    title       = {Design of Dependable {A}da Software},
2110    publisher   = {Prentice-Hall},
2111    address     = {Englewood Cliffs},
2112    year        = 1996,
2113}
2114 
2115@article{Richardson93,
2116    keywords    = {C++, persistence, database},
2117    contributer = {pabuhr@plg},
2118    author      = {Joel E. Richardson and Michael J. Carey and Daniel T. Schuh},
2119    title       = {The Design of the {E} Programming Language},
2120    journal     = toplas,
2121    month       = jul,
2122    year        = 1993,
2123    volume      = 15,
2124    number      = 3,
2125    pages       = {494-534},
2126}
2127
2128@article{Hansen81b,
2129    keywords    = {concurrency, monitor, critical region},
2130    contributer = {pabuhr@plg},
2131    author      = {Per {Brinch Hansen}},
2132    title       = {The Design of {E}dison},
2133    journal     = spe,
2134    volume      = 11,
2135    number      = 4,
2136    month       = apr,
2137    year        = 1981,
2138    pages       = {363-396},
2139}
2140
2141@book{Gamma95,
2142    keywords    = {design patterns},
2143    author      = {Erich Gamma and Richard Helm and Ralph Johnson and John Vlissides},
2144    title       = {Design Patterns: Elements of Reusable Object-Oriented Software},
2145    publisher   = {Addison-Wesley},
2146    address     = {Boston},
2147    year        = 1995,
2148    series      = {Professional Computing Series},
2149}
2150
2151@inproceedings{Wirth74,
2152    keywords    = {},
2153    contributer = {gjditchfield@plg},
2154    author      = {Niklaus Wirth},
2155    title       = {On the Design of Programming Languages},
2156    booktitle   = {Information Processing 74},
2157    year        = 1974,
2158    pages       = {386-393},
2159    publisher   = {North Holland Publishing Company},
2160    note        = {Reprinted in \cite{pldesign}.}
2161}
2162
2163@techreport{forceone,
2164    keywords    = {Parametric polymorphism, ForceOne},
2165    contributer = {gjditchfield@plg},
2166    author      = {Andrew K. Wright},
2167    title       = {Design of the Programming Language {ForceOne}},
2168    institution = {University of Waterloo},
2169    month       = feb, year = 1987,
2170    number      = {CS-87-10}
2171}
2172
2173@techreport{x-2,
2174    keywords    = {object based},
2175    contributer = {gjditchfield@plg},
2176    author      = {David W. Sandberg},
2177    title       = {The Design of the Programming Language {X-2}},
2178    institution = {Oregon State University},
2179    year        = 1985,
2180    address     = {Department of Computer Science, Corvallis, Oregon, 97331},
2181    number      = {85-60-1}
2182}
2183
2184@article{design,
2185    keywords    = {Smalltalk, designing classes},
2186    contributer = {gjditchfield@plg},
2187    author      = {Ralph E. Johnson and Brian Foote},
2188    title       = {Designing Reusable Classes},
2189    journal     = joop,
2190    year        = 1988,
2191    volume      = 1, number = 2, pages = {22-35},
2192    comment     = {
2193        Abstract classes represent standard protocols.  ``It is better to
2194        inherit from an abstract class than from a concrete class''.
2195        Frameworks are collections of related abstract classes.  Successful
2196        abstractions are discovered, not designed.
2197
2198        Protocols: ``If an operation X is implemented by performing a
2199        similar operation on the components of the receiver, then that
2200        operation should also be named X''.  Eliminate case analysis by
2201        creating classes with the same operations.  Create classes to
2202        represent bundles of parameters.  Shrink methods larger than 30
2203        lines.
2204
2205        Hierarchies should be deep and narrow.  Subclasses should be
2206        specializations.
2207
2208        Frameworks: split large classes.  Factor implementation differences
2209        into subcomponents.  Separate methods that do not share instance
2210        variables into components that reflect the different views of the
2211        object.  Send messages to components, not self.  Reduce implicit
2212        parameter passing through instance variables.
2213    }
2214}
2215
2216@article{dim:c++,
2217    keywords    = {Dimensional Analysis, C++},
2218    contributer = {gjditchfield@plg},
2219    author      = {Robert F. Cmelic and Narain Gehani},
2220    title       = {Dimensional Analysis with {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2221    journal     = {IEEE Software},
2222    month       = may, year = 1988,
2223    volume      = 5, number = 3, pages = {21-29}
2224}
2225
2226@article{Wegner87,
2227    contributer = {pabuhr@plg},
2228    author      = {Peter Wegner},
2229    title       = {Dimensions of Object--Based Language Design},
2230    journal     = sigplan,
2231    volume      = 22,
2232    number      = 12,
2233    month       = dec,
2234    year        = 1987,
2235    pages       = {168-182},
2236    note        = {Proceedings of the OOPSLA'87 Conference, Oct. 4--8, 1987, Orlando, Florida},
2237}
2238
2239@book{Dijkstra76,
2240    keywords    = {concurrent assignment},
2241    author      = {E. W. Dijkstra},
2242    title       = {A Discipline of Programming},
2243    publisher   = {Prentice-Hall},
2244    address     = {Englewood Cliffs},
2245    year        = 1976,
2246}
2247
2248@book{Lynch96,
2249    keywords    = {distributed algorithms},
2250    author      = {Nancy A. Lynch},
2251    title       = {Distributed Algorithms},
2252    publisher   = {Morgan Kaufmann},
2253    year        = 1996,
2254}
2255
2256@book{Tanenbaum02,
2257    keywords    = {distributed programming},
2258    author      = {Andrew S. Tanenbaum and Maarten van Steen},
2259    title       = {Distributed Systems: Principles and Paradigms},
2260    publisher   = {Prentice-Hall},
2261    address     = {Englewood Cliffs},
2262    year        = 2002,
2263}
2264
2265@inproceedings{Cargill90,
2266    keywords    = {concurrency},
2267    contributer = {pabuhr@plg},
2268    author      = {Tom A. Cargill},
2269    title       = {Does {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Really Need Multiple Inheritance?},
2270    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference Proceedings},
2271    organization= {USENIX Association},
2272    address     = {San Francisco, California, U.S.A.},
2273    month       = apr,
2274    year        = 1990,
2275    pages       = {315-323}
2276}
2277
2278@unpublished{Duff83,
2279    keywords    = {C, switch statement, control flow},
2280    contributer = {pabuhr@plg},
2281    author      = {Tom Duff},
2282    title       = {Duff's Device},
2283    month       = nov,
2284    year        = 1983,
2285    note        = {\href{http://www.lysator.liu.se/c/duffs-device.html}{http://\-www.lysator.liu.se/\-c/\-duffs-device.html}}
2286}
2287
2288@manual{dwarf2,
2289    keywords    = {Debugging DWARF2 specification},
2290    contributer = {rkrische@plg},
2291    title       = {DWARF Debugging Information Format},
2292    organization= {Unix International Programming Languages SIG},
2293    publisher   = {Unix International},
2294    address     = {Waterview Corporate Center, 20 Waterview Boulevard, Parsippany, NJ 07054},
2295    year        = {1993}
2296}
2297
2298@article{classicada,
2299    keywords    = {Classic Ada},
2300    contributer = {gjditchfield@plg},
2301    author      = {Cameron M. Donaldson},
2302    title       = {Dynamic Binding and Inheritance in an Object-Oriented {Ada} Design},
2303    journal     = {Journal of Pascal, {Ada} \& Modula-2},
2304    year        = 1990,
2305    month       = {jul/aug}, volume = 9, number = 4, pages = {12-19},
2306    comment     = {
2307        Classes are like packages: they can contain subprograms, types,
2308        variables, generic instantiations, and exceptions.  They can also
2309        contain class methods, instance methods, and instance variables,
2310        and define creation and initialization subprograms or methods for
2311        instances.  Single inheritance provides inheritance of
2312        implementations. Dynamic binding is done with a {\em send}
2313        statement that invokes a class or instance method.  A preprocessor
2314        converts Classic Ada to normal Ada.
2315    }
2316}
2317
2318@article{Costanza03,
2319    keywords    = {dynamic call},
2320    contributer = {pabuhr@plg},
2321    author      = {Pascal Costanza},
2322    title       = {Dynamic Scoped Functions as the Essence of {AOP}},
2323    journal     = sigplan,
2324    volume      = 38,
2325    number      = 8,
2326    month       = aug,
2327    year        = 2003,
2328    pages       = {29-35},
2329}
2330
2331% E
2332
2333@inproceedings{Wegbreit71,
2334    keywords    = {polymorphism},
2335    contributer = {pabuhr@plg},
2336    author      = {B. Wegbreit},
2337    title       = {The ECL Programming System},
2338    booktitle   = {Proceedings of AFIPS 1971 FJCC},
2339    publisher   = {AFIPS Press, vol. 39},
2340    address     = {Montvale, New Jersey, U.S.A},
2341    year        = 1971,
2342    pages       = {253-262},
2343}
2344
2345@manual{JavaScript,
2346    keywords    = {JavaScript},
2347    contributer = {pabuhr@plg},
2348    title       = {ECMAScript 2015 Language Specification {JavaScript}},
2349    organization= {ECAM International},
2350    address     = {Rue du Rhone 114, CH-1204 Geneva, Switzerland},
2351    month       = jun,
2352    year        = 2015,
2353    note        = {6th Edition}
2354}
2355
2356@inproceedings{Peterson77,
2357    keywords    = {N-thread software-solution mutual exclusion},
2358    contributer = {pabuhr@plg},
2359    author      = {Gary L. Peterson and Michael J. Fischer},
2360    title       = {Economical Solutions for the Critical Section Problem in a Distributed System (Extended Abstract)},
2361    booktitle   = {Proceedings of the Ninth Annual ACM Symposium on Theory of Computing},
2362    series      = {STOC '77},
2363    year        = 1977,
2364    location    = {Boulder, Colorado, USA},
2365    pages       = {91--97},
2366    numpages    = {7},
2367    publisher   = {ACM},
2368    address     = {New York, NY, USA},
2369}
2370
2371@article{Hansen81a,
2372    keywords    = {concurrency, monitor, critical region},
2373    contributer = {pabuhr@plg},
2374    author      = {Per {Brinch Hansen}},
2375    title       = {{E}dison---a Multiprocessor Language},
2376    journal     = spe,
2377    volume      = 11,
2378    number      = 4,
2379    month       = apr,
2380    year        = {1981},
2381    pages       = {325-361},
2382}
2383
2384@book{Eiffel,
2385    keywords    = {Eiffel},
2386    contributer = {pabuhr@plg},
2387    author      = {Bertrand Meyer},
2388    title       = {Eiffel: The Language},
2389    publisher   = {Prentice-Hall},
2390    address     = {Englewood Cliffs},
2391    year        = 1992,
2392    series      = {Prentice-Hall Object-Oriented Series},
2393}
2394
2395@article{WS:overload,
2396    keywords    = {compilation},
2397    contributer = {gjditchfield@plg},
2398    author      = {Peter J. L. Wallis and Bernhard W. Silverman},
2399    title       = {Efficient Implementation of the {Ada} Overloading Rules},
2400    journal     = ipl,
2401    year        = 1980,
2402    month       = apr, volume = 10, number = 3, pages = {120-123},
2403    comment     = {
2404        The ``two-pass'' algorithm.  An upward pass over a parse tree
2405        calculates the set of possible result types of operators.  The
2406        root must have exactly one type, produced in one way.  A
2407        downward pass selects the version of the operator that produces the
2408        desired result type, thus setting the result types of subtrees.
2409        See \cite{D:overload}.
2410    }
2411}
2412
2413@techreport{Habermann80,
2414    keywords    = {Ada, threads},
2415    contributer = {pabuhr@plg},
2416    author      = {A. N. Habermann and I. R. Nassi},
2417    title       = {Efficient Implementation of {Ada} Tasks},
2418    institution = {Carnegie-Mellon University},
2419    number      = {CMU-CS-80-103},
2420    year        = 1980
2421}
2422
2423@article{Emerald,
2424    keywords    = {concurrency, polymorphism},
2425    contributer = {pabuhr@plg},
2426    author      = {Rajendra K. Raj and Ewan Tempero and Henry M. Levy and Andrew P. Black and Norman C. Hutchinson and Eric Jul},
2427    title       = {Emerald: A General-Purpose Programming Language},
2428    journal     = spe,
2429    month       = jan,
2430    year        = 1991,
2431    volume      = 21,
2432    number      = 1,
2433    pages       = {91-118}
2434}
2435
2436@InProceedings{chambers89a,
2437    keywords    = {maps, delegation},
2438    author      = "Craig Chambers and David Ungar and Elgin Lee",
2439    title       = "An Efficient Implementation of {SELF}, a Dynamically-Typed
2440                 Object-Oriented Language Based on Prototypes",
2441    crossref    = "OOPSLA89",
2442    pages       = {49-70}
2443}
2444
2445@article{oop:encapsulation,
2446    keywords    = {Encapsulation, Inheritance, Subclasses, Multiple Inheritance},
2447    contributer = {gjditchfield@plg},
2448    author      = {Alan Snyder},
2449    title       = {Encapsulation and Inheritance in Object-Oriented Programming
2450        Languages},
2451    journal     = sigplan,
2452    volume      = {21},    number = {11},
2453    pages       = {38-45},
2454    month       = nov, year = 1986,
2455    comment     = {
2456        Client, child interfaces should be distinct.  Child interface
2457        shouldn't grant total access to parent.
2458
2459        Rules for redefining parent variable name in a child affect
2460        re-implementation of the parent.
2461
2462        Inheritance can be a promise to obey the semantics of the parent,
2463        or code reuse; the two may be contradictory.  Unification
2464        exposes use of inheritance: a child can not be re-implemented
2465        without breaking code that assumes that it is a subclass of the
2466        original parent.  If a class uses the names of its parents'
2467        ancestors, then inheritance is part of the parent's child
2468        interface.
2469
2470        Linearizing a multiple inheritance tree means that a class's use of
2471        calls on super need to be understood before it is used as a parent.
2472        Merging repeated ancestors exposes inheritance if an ancestor is
2473        re-implemented.  Forbidding inheritance of distinct methods with
2474        the same name exposes implementation of ancestors.  Proposed
2475        solution treats the set of ancestors as a tree.
2476    }
2477}
2478
2479@article{st:encapsulator,
2480    keywords    = {encapsulator, Smalltalk, monitor},
2481    contributer = {gjditchfield@plg},
2482    author      = {Geoffrey A. Pascoe},
2483    title       = {Encapsulators: A New Software Paradigm in Smalltalk-80},
2484    journal     = sigplan,
2485    volume      = {21},    number       = {11},
2486    pages       = {341-346},
2487    month       = nov, year = 1986,
2488    comment     = {
2489        Encapsulators are objects that surround other objects.
2490        Pre- and post-actions are performed when messages are sent to the
2491        encapsulated object.  They are created here by sending the message
2492        object: to an encapsulator class.  Examples given are monitors,
2493        atomic objects, and Model (for model-view-controller interfaces).
2494
2495        Encapsulator classes use a family of selectors that the
2496        encapsulated object will not respond to.  Messages for the
2497        encapsulated object are passed on by trapping them with the
2498        doesNotUnderstand method.  Various fiddles were needed when setting
2499        up the class and metaclass hierarchies.  A few selectors (==,
2500        class) always directly invoke primitive methods; they can't be
2501        used.
2502
2503        Can an encapsulated object be an encapsulator?  Probably, but the
2504        middle object's selectors are inaccessible.
2505    }
2506}
2507
2508@manual{EPT,
2509    keywords    = {concurrency, light-weight threads},
2510    contributer = {pabuhr@plg},
2511    key         = {Encore},
2512    title       = {Encore Parallel Thread Manual, 724-06210},
2513    organization= {Encore Computer Corporation},
2514    month       = may,
2515    year        = 1988,
2516}
2517
2518@manual{Erlang,
2519    keywords    = {Erlang},
2520    contributer = {pabuhr@plg},
2521    key         = {Erlang},
2522    title       = {Erlang/OTP System Documentation 8.1},
2523    organization= {Erlang AB},
2524    month       = sep,
2525    year        = 2016,
2526    note        = {\href{http://erlang.org/doc/pdf/otp-system-documentation.pdf}{http://\-erlang.org/\-doc/\-pdf/\-otp-system-documentation.pdf}},
2527}
2528
2529@inproceedings{MH88,
2530    keywords    = {modules, general sums, general products},
2531    contributer = {gjditchfield@plg},
2532    author      = {John C. Mitchell and Robert Harper},
2533    title       = {The Essence of {ML}},
2534    booktitle   = popl,
2535    year        = 1988,
2536    pages       = {28-46}
2537}
2538
2539@book{LeVerrand,
2540    keywords    = {},
2541    author      = {D. Le Verrand},
2542    title       = {Evaluating {Ada}},
2543    publisher   = {North Oxford Academic},
2544    year        = 1985
2545}
2546
2547@inproceedings{Bloom79,
2548    keywords    = {concurrency},
2549    contributer = {pabuhr@plg},
2550    author      = {Toby Bloom},
2551    title       = {Evaluating Synchronization Mechanisms},
2552    booktitle   = {Proceedings of the Seventh Symposium on Operating Systems Principles},
2553    organization= {ACM SIGOPS},
2554    address     = {Pacific Grove, California, U.S.A},
2555    month       = dec,
2556    year        = 1979,
2557    pages       = {24-32}
2558}
2559
2560@inproceedings{XaaS,
2561    keywords    = {Everything as a Service, Anything as a Service, Cloud computing, SOA},
2562    contributer = {pabuhr@plg},
2563    author      = {Duan, Yucong and Fu, Guohua and Zhou, Nianjun and Sun, Xiaobing and Narendra, Nanjangud C. and Hu, Bo},
2564    title       = {Everything As a Service (XaaS) on the Cloud: Origins, Current and Future Trends},
2565    booktitle   = {Proceedings of the 2015 IEEE 8th International Conference on Cloud Computing},
2566    series      = {CLOUD'15},
2567    year        = {2015},
2568    pages       = {621--628},
2569    publisher   = {IEEE Computer Society},
2570    address     = {Washington, DC, USA},
2571}
2572
2573@article{Buhr06a,
2574    keywords    = {concurrency, C++, uC++},
2575    contributer = {pabuhr@plg},
2576    author      = {Peter A. Buhr and Richard C. Bilson},
2577    title       = {Examining $\mu${C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} :
2578                   High-level Object-Oriented Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2579    journal     = {Dr. Dobb's Journal : Software Tools for the Professional Programmer},
2580    month       = feb,
2581    year        = 2006,
2582    volume      = 31,
2583    number      = 2,
2584    pages       = {36-40},
2585}
2586
2587@article{ExceptionalC,
2588    keywords    = {exception handling, asynchronous events},
2589    contributer = {wyrmok@plg},
2590    author      = {N. H. Gehani},
2591    title       = {Exceptional {C} or {C} with Exceptions},
2592    journal     = spe,
2593    year        = 1992,
2594    month       = oct,
2595    volume      = 22,
2596    number      = 10,
2597    pages       = {827-848},
2598    comment     = {
2599        It is the most extensive exceptional handling mechanism thus
2600        far. Though it doesn't have Mesa resumption, it has
2601        asynchronous signal which is more general and abstract than
2602        the unix signal mechanism.  It has an Eiffel like retry
2603        mechanism. Consequently, the scope of guarded region is not
2604        immediately terminated when an exception is raised. In fact,
2605        an exception handler creates a scope under its guarded
2606        region.
2607        }
2608}
2609
2610@incollection{Buhr02,
2611    keywords    = {exception handling},
2612    contributer = {pabuhr@plg},
2613    author      = {Peter A. Buhr and Ashif Harji and W. Y. Russell Mok},
2614    title       = {Exception Handling},
2615    editor      = {Marvin V. Zelkowitz},
2616    booktitle   = {Advances in COMPUTERS},
2617    publisher   = {Academic Press},
2618    address     = {London},
2619    volume      = 56,
2620    year        = 2002,
2621    pages       = {245-303},
2622}
2623
2624@article{Cargill94,
2625    keywords    = {exception handling},
2626    contributer = {pabuhr@plg},
2627    author      = {Tom Cargill},
2628    title       = {Exception Handling: a False Sense of Security},
2629    journal     = {{C}{\kern-.2em\hbox{\large\texttt{+\kern-.2em+}}} Report},
2630    year        = 1994,
2631    month       = nov,
2632    volume      = 6,
2633    number      = 9,
2634    note        = {http://www.informit.com/\-content/\-images/\-020163371x/\-supplements/\-Exception\_\-Handling\_\-Article.\-html}
2635}
2636
2637@article{Knudsen84,
2638    keywords    = {static exception handling, BETA, sequel},
2639    contributer = {wyrmok@plg},
2640    author      = {J{\o}rgen Lindskov Knudsen},
2641    title       = {Exception Handling --- A Static Approach},
2642    journal     = spe,
2643    year        = 1984,
2644    month       = may,
2645    volume      = 14,
2646    number      = 5,
2647    pages       = {429-449},
2648}
2649
2650@article{Drew94,
2651    keywords    = {exceptions, exception handling},
2652    contributer = {wyrmok@plg},
2653    author      = {Steven J. Drew and K. John Gough},
2654    title       = {Exception Handling: Expecting the Unexpected},
2655    journal     = {Computer Languages},
2656    year        = 1994,
2657    month       = may,
2658    volume      = 20,
2659    number      = 2,
2660    comment     = {
2661        A recent and good survey on various exception handling mechanisms found
2662        in imperative programming languages. It classifies various mechanism in
2663        terms of flow control and scopes. Asynchronous exceptions and signals
2664        are also covered as Exceptional C is in the survey.
2665        }
2666}
2667
2668@article{Koenig90,
2669    keywords    = {exception handling},
2670    contributer = {pabuhr@plg},
2671    author      = {Andrew Koenig and Bjarne Stroustrup},
2672    title       = {Exception Handling for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
2673    journal     = joop,
2674    month       = {July/August},
2675    year        = 1990,
2676    volume      = 3,
2677    number      = 2,
2678    pages       = {16-33},
2679}
2680
2681@article{Lee83,
2682    keywords    = {exception handling, C},
2683    contributer = {pabuhr@plg},
2684    author      = {P. A. Lee},
2685    title       = {Exception Handling in {C} Programs},
2686    journal     = spe,
2687    volume      = 13,
2688    number      = 5,
2689    month       = may,
2690    year        = 1983,
2691    pages       = {389-405},
2692}
2693
2694@article{Liskov79,
2695    keywords    = {exception handling},
2696    contributer = {pabuhr@plg},
2697    author      = {Barbara H. Liskov and Alan Snyder},
2698    title       = {Exception Handling in {CLU}},
2699    journal     = ieeese,
2700    month       = nov,
2701    year        = 1979,
2702    volume      = {SE-5},
2703    number      = 6,
2704    pages       = {546-558},
2705}
2706
2707@article{Szalas85,
2708    keywords    = {concurrency, C++},
2709    contributer = {pabuhr@plg},
2710    author      = {Andrzej Szalas and Danuta Szczepanska},
2711    title       = {Exception Handling in Parallel Computations},
2712    journal     = sigplan,
2713    publisher   = {ACM},
2714    address     = {New York, NY, USA},
2715    volume      = 20,
2716    number      = 10,
2717    month       = oct,
2718    year        = 1985,
2719    pages       = {95-104},
2720}
2721
2722@article{MacLaren77,
2723    keywords    = {exception handling, PL/I},
2724    contributer = {pabuhr@plg},
2725    author      = {M. Donald MacLaren},
2726    title       = {Exception Handling in {PL/I}},
2727    journal     = sigplan,
2728    volume      = 12,
2729    number      = 3,
2730    month       = mar,
2731    year        = 1977,
2732    pages       = {101-104},
2733    note        = {Proceedings of an ACM Conference on Language Design for Reliable Software,
2734                   March 28--30, 1977, Raleigh, North Carolina, U.S.A.},
2735}
2736
2737@article{Goodenough75,
2738    keywords    = {exception handling},
2739    contributer = {pabuhr@plg},
2740    author      = {J. B. Goodenough},
2741    title       = {Exception Handling: Issues and a Proposed Notation},
2742    journal     = cacm,
2743    month       = dec,
2744    year        = 1975,
2745    volume      = 18,
2746    number      = 12,
2747    pages       = {683-696},
2748}
2749
2750@article{Lampson80,
2751    keywords    = {monitors},
2752    contributer = {pabuhr@plg},
2753    author      = {B. W. Lampson and D. D. Redell},
2754    title       = {Experience with Processes and Monitors in Mesa},
2755    journal     = cacm,
2756    volume      = 23,
2757    number      = 2,
2758    month       = feb,
2759    year        = 1980,
2760    pages       = {105-117},
2761}
2762
2763@inproceedings{Shopiro87,
2764    keywords    = {concurrency},
2765    contributer = {pabuhr@plg},
2766    author      = {Jonathan E. Shopiro},
2767    title       = {Extending the {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Task System for Real-Time Control},
2768    booktitle   = {Proceedings and Additional Papers {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Workshop},
2769    organization= {USENIX Association},
2770    address     = {Santa Fe, New Mexico, U.S.A},
2771    month       = nov,
2772    year        = 1987,
2773    pages       = {77-94}
2774}
2775
2776@article{Modula-2+,
2777    keywords    = {Modula-2, exceptions, garbage collection, concurrency},
2778    contributer = {gjditchfield@plg},
2779    author      = {Paul Rovner},
2780    title       = {Extending Modula-2 to Build Large, Integrated Systems},
2781    journal     = {IEEE Software},
2782    month       = nov,
2783    year        = 1986,
2784    volume      = 3,
2785    number      = 6,
2786    pages       = {46-57},
2787    comment     = {
2788        Exceptions can have a parameter.  Procedures can declare the
2789        exceptions they can propagate; others are converted to {\tt
2790        SYSTEM.Fail}.  If they don't, all exceptions propagate.
2791        Block cleanup statements execute no matter how control leaves the
2792        block.
2793
2794        {\tt REF t} is a garbage-collected pointer.  A {\tt REFANY} can be
2795        assigned any {\tt REF t}.  Open array types can be used in
2796        parameter and {\tt REF} types.  {\tt NEW} creates arrays of fixed,
2797        dynamically determined size.
2798
2799        The {\tt THREAD} module provides lightweight processes, semaphores,
2800        and conditions.  A statement {\tt LOCK {\em semaphore} DO
2801        {\em statements} END} is built in.
2802
2803        {\tt SAFE} modules do run-time checks, and only import {\tt
2804        SAFE} modules.  One implementation module can implement several
2805        definition modules.  Opaque type implementations can be
2806        repeated in modules that import its definition, so implementation
2807        modules can collaborate.  The linker checks that all
2808        implementations are the same.
2809    }
2810}
2811
2812@misc{GCCExtensions,
2813    contributer = {a3moss@uwaterloo.ca},
2814    key         = {C Extensions},
2815    author      = {{C Extensions}},
2816    title       = {Extensions to the {C} Language Family},
2817    year        = 2014,
2818    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}},
2819    optnote     = {Accessed: 2017-04-02},
2820}
2821
2822@inproceedings{BNRPascal,
2823    keywords    = {concurrency, rendezvous},
2824    contributer = {pabuhr@plg},
2825    author      = {R. Kamel and N. Gammage},
2826    title       = {Experience with Rendezvous},
2827    booktitle   = {Proceedings of the 1988 International Conference on Computer Languages},
2828    month       = oct,
2829    year        = 1988,
2830    pages       = {143-149}
2831}
2832
2833% F
2834
2835@inproceedings{Knudsen01,
2836    keywords    = {Beta, exception handling},
2837    contributer = {pabuhr@plg},
2838    author      = {J{\o}rgen Lindskov Knudsen},
2839    title       = {Fault Tolerance and Exception Handling in {BETA}},
2840    booktitle   = {Exception Handling},
2841    publisher   = {Springer},
2842    volume      = 2022,
2843    series      = {Lecture Notes in Computer Science},
2844    year        = 2001,
2845    pages       = {1-17}
2846}
2847
2848@article{Lamport87,
2849    keywords    = {software solutions, mutual exclusion, fast},
2850    contributer = {pabuhr@plg},
2851    author      = {Leslie Lamport},
2852    title       = {A Fast Mutual Exclusion Algorithm},
2853    journal     = tocs,
2854    volume      = 5,
2855    number      = 1,
2856    month       = jan,
2857    year        = {1987},
2858    pages       = {1-11},
2859    publisher   = {ACM},
2860    address     = {New York, NY, USA},
2861}
2862
2863@article{Hesselink17,
2864    keywords    = {concurrency, mutual exclusion, performance experiment, software solutions},
2865    title       = {Fast mutual exclusion by the {T}riangle algorithm},
2866    author      = {Wim H. Hesselink and Peter Buhr and David Dice},
2867    journal     = ccpe,
2868    volume      = 30,
2869    number      = 4,
2870    year        = 2018,
2871    month       = feb,
2872    publisher   = {John Wiley \& Sons},
2873    note        = {\url{https://doi.org/10.1002/cpe.4183}}
2874}
2875
2876@article{Yang95,
2877    keywords    = {software solutions, N-thread, mutual exclusions},
2878    contributer = {pabuhr@plg},
2879    author      = {Jae-Heon Yang and James H. Anderson},
2880    title       = {A Fast, Scalable Mutual Exclusion Algorithm},
2881    journal     = {Distributed Computing},
2882    publisher   = {Springer-Verlag},
2883    volume      = {9},
2884    number      = {1},
2885    year        = {1995},
2886    pages       = {51-60},
2887}
2888
2889@inproceedings{F-bound,
2890    keywords    = {},
2891    contributer = {gjditchfield@plg},
2892    author      = {Peter Canning and William Cook and Walter Hill and Walter Olthoff and John C. Mitchell},
2893    title       = {F-Bounded Polymorphism for Object-Oriented Programming},
2894    booktitle   = {Fourth International Conference on Functional Programming Languages and Computer Architecture},
2895    year        = 1989,
2896    month       = sep,
2897    pages       = {273-280}
2898}
2899
2900@mastersthesis{Wasik08,
2901    author      = {Ayelet Wasik},
2902    title       = {Features of a Multi-Threaded Memory Allocator},
2903    school      = {University of Waterloo},
2904    year        = 2008,
2905    month       = jan,
2906    address     = {Waterloo, Ontario, Canada, N2L 3G1},
2907    note        = {\textsf{http://uwspace.uwaterloo.ca/\-bitstream/\-10012/\-3501/\-1/\-Thesis.pdf}},
2908}
2909
2910@article{Holzmann94,
2911    keywords    = {semaphore, flags},
2912    contributer = {pabuhr@plg},
2913    author      = {Gerard J. Holzmann and Bj\"{o}rn Pehrson},
2914    title       = {The First Data Networks},
2915    journal     = {Scientific American},
2916    month       = jan,
2917    year        = 1994,
2918    volume      = 12,
2919    number      = 1,
2920    pages       = {124-129},
2921}
2922
2923@article{Bohm66,
2924    keywords    = {goto, structured programming},
2925    contributer = {pabuhr@plg},
2926    author      = {C. B\"{o}hm and G. Jacopini},
2927    title       = {Flow diagrams, Turing Machines and Languages with only two Formation Rules},
2928    journal     = cacm,
2929    month       = may,
2930    year        = 1966,
2931    volume      = 9,
2932    number      = 5,
2933    pages       = {366-371},
2934}
2935
2936@manual{Fortran95,
2937    keywords    = {Fortran 95},
2938    contributer = {pabuhr@plg},
2939    key         = {Fortran95},
2940    title       = {Fortran 95 Standard, ISO/IEC 1539},
2941    organization= {Unicomp, Inc.},
2942    address     = {7660 E. Broadway, Tucson, Arizona, U.S.A, 85710},
2943    month       = jan,
2944    year        = 1997,
2945}
2946
2947@manual{Fortran08,
2948    keywords    = {ISO/IEC Fortran 08},
2949    contributer = {pabuhr@plg},
2950    author      = {Fortran08},
2951    title       = {Programming Languages -- {Fortran} Part 1:Base Language ISO/IEC 1539-1:2010},
2952    edition     = {3rd},
2953    publisher   = {International Standard Organization},
2954    address     = {\href{https://www.iso.org/standard/50459.html}{https://\-www.iso.org/\-standard/\-50459.html}},
2955    year        = 2010,
2956}
2957
2958@book{Andrews00:book,
2959    keywords    = {concurrency},
2960    contributer = {pabuhr@plg},
2961    author      = {Gregory R. Andrews},
2962    title       = {Foundations of Multithreaded, Parallel and Distributed Programming},
2963    publisher   = {Addison--Wesley},
2964    year        = 2000,
2965}
2966
2967@article{Agha89,
2968    keywords    = {actors, concurrency},
2969    contributer = {pabuhr@plg},
2970    author      = {Gul A. Agha},
2971    title       = {Foundational Issues in Concurrent Computing},
2972    journal     = sigplan,
2973    month       = apr,
2974    year        = 1989,
2975    volume      = 24,
2976    number      = 4,
2977    pages       = {60-65},
2978    note        = {Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming,
2979                   Sept. 26--27, 1988, San Diego, California, U.S.A},
2980}
2981
2982@article{ool,
2983    keywords    = {},
2984    contributer = {gjditchfield@plg},
2985    author      = {Douglas T. Ross},
2986    title       = {Toward Foundations for the Understanding of Type},
2987    journal     = sigplan,
2988    year        = 1976,
2989    volume      = 11,
2990    pages       = {63-65},
2991    note        = {Conference on Data: Abstraction, Definition and Structure},
2992    summary     = {
2993        Possibly the first use (without definition, alas) of the phrase
2994        "object oriented language".  Metaphysical to the point of incoherence.
2995    }
2996}
2997
2998@article{frames,
2999    keywords    = {frames},
3000    contributer = {gjditchfield@plg},
3001    author      = {Paul G. Basset},
3002    title       = {Frame-Based Software Engineering},
3003    journal     = {IEEE Software},
3004    month       = jul, year = 1987,
3005    volume      = 4, number = 4, pages = {9-16}
3006}
3007
3008@misc{Sutter05c,
3009    contributer = {pabuhr@plg},
3010    title       = {The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software},
3011    author      = {Herb Sutter},
3012    howpublished= {\url{http://www.gotw.ca/publications/concurrency-ddj.htm}},
3013    year        = {2005},
3014    note        = {originally Dr. Dobb's Journal 30(3)},
3015}
3016
3017@article{Sutter05,
3018    keywords    = {concurrency, C++},
3019    contributer = {pabuhr@plg},
3020    author      = {Herb Sutter},
3021    title       = {A Fundamental Turn Toward Concurrency in Software},
3022    journal     = {Dr. Dobb's Journal : Software Tools for the Professional Programmer},
3023    month       = mar,
3024    year        = 2005,
3025    volume      = 30,
3026    number      = 3,
3027    pages       = {16-22},
3028}
3029
3030@inproceedings{Dony01,
3031    keywords    = {Smalltalk, exception handling},
3032    contributer = {pabuhr@plg},
3033    author      = {Chistophe Dony},
3034    title       = {A Fully Object-Oriented Exception Handling System: Rationale and Smalltalk Implementation},
3035    booktitle   = {Exception Handling},
3036    publisher   = {Springer},
3037    volume      = 2022,
3038    series      = {Lecture Notes in Computer Science},
3039    year        = 2001,
3040    pages       = {18-38}
3041}
3042
3043@misc{FW,
3044    key         = {FW},
3045    contributer = {gjditchfield@plg},
3046    title       = {Funk \& Wagnalls Standard Desk Dictionary},
3047    year        = 1980
3048}
3049
3050@book{Knuth73V1,
3051    contributer = {pabuhr@plg},
3052    author      = {Donald E. Knuth},
3053    title       = {Fundamental Algorithms},
3054    series      = {The Art of Computer Programming},
3055    publisher   = {Addison-Wesley},
3056    address     = {Boston},
3057    year        = 1973,
3058    volume      = 1,
3059    edition     = {2nd},
3060}
3061
3062@inproceedings{Strachey,
3063    keywords    = {polymorphism},
3064    contributer = {gjditchfield@plg},
3065    author      = {C. Strachey},
3066    title       = {Fundamental Concepts in Programming Languages},
3067    booktitle   = {Lecture Notes for the International Summer School in Computer Programming},
3068    year        = 1967,
3069    month       = aug,
3070    address     = {Copenhagen},
3071    comment     = {
3072        Defines ad-hoc and parametric polymorphism.
3073    }
3074}
3075
3076@article{Eisenberg72,
3077    keywords    = {concurrency, N-Process solution, O(N)},
3078    contributer = {pabuhr@plg},
3079    author      = {Murray A. Eisenberg and Michael R. McGuire},
3080    title       = {Further Comments on {D}ijkstra's Concurrent Programming Control Problem},
3081    journal     = cacm,
3082    month       = nov,
3083    year        = 1972,
3084    volume      = 15,
3085    number      = 11,
3086    pages       = {999},
3087}
3088
3089% G
3090
3091@article{Boehm88,
3092    keywords    = {conservative garbage collection, C},
3093    contributer = {gjditchfield@plg},
3094    author      = {Hans-Juergen Boehm and Mark Weiser},
3095    title       = {Garbage Collection in an Uncooperative Environment},
3096    journal     = spe,
3097    month       = sep,
3098    year        = 1988,
3099    volume      = 18,
3100    number      = 9,
3101    pages       = {807-820}
3102}
3103
3104@manual{gcc,
3105    keywords    = {},
3106    contributer = {gjditchfield@plg},
3107    title       = {GCC},
3108    author      = {Richard M. Stallman},
3109    organization= {Free Software Foundation},
3110    address     = {Cambridge}
3111}
3112
3113@article{doUpon,
3114    keywords    = {formal verification, axiomatic semantics, control structures},
3115    contributer = {gjditchfield@plg},
3116    author      = {Ed Anson},
3117    title       = {A Generalized Iterative Construct and Its Semantics},
3118    journal     = toplas,
3119    volume      = {9},    number = {4},
3120    pages       = {567-581},
3121    month       = oct, year = 1987,
3122    comment     = {
3123        \begin{verbatim}
3124            do
3125                   P1 -> L1
3126               [] P2 -> L2
3127            ...
3128               [] Pm -> Lm
3129            upon
3130                   Q1 -> M1
3131               [] Q2 -> M2
3132            ...
3133               [] qn -> mn
3134            od
3135        \end{verbatim}
3136
3137        If there is an i such that Qi is true, execute Mi and terminate.
3138        Otherwise, if there is an i such that Pi is true, execute Li and
3139        repeat the loop.  Otherwise, fail.
3140    }
3141}
3142
3143@unpublished{Bilson,
3144    keywords    = {generic programming, generics, polymorphism},
3145    contributor = {a3moss@plg},
3146    author      = {Richard C. Bilson and Glen Ditchfield and Peter A. Buhr},
3147    title       = {Generic Programming with Inferred Models},
3148}
3149
3150@article{Haskell,
3151    keywords    = {lazy evaluation, type class},
3152    contributer = {pabuhr},
3153    author      = {Paul Hudak and Joseph H. Fasel},
3154    title       = {A Gentle Introduction to Haskell},
3155    journal     = sigplan,
3156    volume      = 27,
3157    number      = 5,
3158    month       = may,
3159    year        = 1992,
3160    pages       = {T1-53},
3161}
3162
3163@manual{GMP,
3164    keywords    = {GMP arbitrary-precision library},
3165    contributer = {pabuhr@plg},
3166    key         = {GMP},
3167    title       = {{GNU} Multiple Precision Arithmetic Library},
3168    address     = {GNU},
3169    year        = 2016,
3170    note        = {\href{https://gmplib.org}{https://\-gmplib.org}},
3171}
3172
3173@manual{Go,
3174    keywords    = {Go programming language},
3175    contributer = {pabuhr@plg},
3176    title       = {{Go} Programming Language},
3177    author      = {Robert Griesemer and Rob Pike and Ken Thompson},
3178    organization= {Google},
3179    year        = 2009,
3180    note        = {\href{http://golang.org/ref/spec}{http://\-golang.org/\-ref/\-spec}},
3181}
3182
3183@article{Dijkstra68a,
3184    keywords    = {goto},
3185    contributer = {pabuhr@plg},
3186    author      = {Edsger W. Dijkstra},
3187    title       = {Go To Statement Considered Harmful},
3188    journal     = cacm,
3189    month       = mar,
3190    year        = 1968,
3191    volume      = 11,
3192    number      = 3,
3193    pages       = {147-148},
3194    note        = {Reprinted in \cite{Yourdon79} pp. 29--36.},
3195}
3196
3197@misc{GObject,
3198    keywords    = {GObject},
3199    contributor = {a3moss@uwaterloo.ca},
3200    key         = {GObject},
3201    organization= {The {GNOME} Project},
3202    title       = {{GO}bject Reference Manual},
3203    year        = 2014,
3204    howpublished= {https://developer.gnome.org/gobject/stable/},
3205    optnote     = {Accessed: 2017-04},
3206}
3207
3208@article{Choi91,
3209    keywords    = {contra-variance, functions},
3210    contributer = {pabuhr@plg},
3211    author      = {Injun Choi and Michael V. Mannino},
3212    title       = {Graph Interpretation of Methods: A Unifying Framework for Polymorphism in Object-Oriented Programming},
3213    journal     = {OOPS Messenger},
3214    volume      = 2,
3215    number      = 1,
3216    month       = jan,
3217    year        = 1991,
3218    pages       = {38-54},
3219}
3220
3221@misc{GNU-C,
3222    keywords    = {C, ANSI C},
3223    contributer = {pabuhr@plg},
3224    author      = {Richard Stallman},
3225    title       = {The Free Software Foundation's Gnu {C} Compiler},
3226    howpublished= {Free Software Foundation, 1000 Mass Ave., Cambridge, MA, U.S.A., 02138},
3227    year        = 1989,
3228}
3229
3230@article{Dijkstra:green,
3231    keywords    = {ada},
3232    contributer = {gjditchfield@plg},
3233    author      = {Edsger W. Dijkstra},
3234    title       = {On the GREEN Language submitted to the DoD},
3235    journal     = sigplan,
3236    year        = 1978,
3237    month       = oct,
3238    volume      = 13,
3239    number      = 10,
3240    pages       = {16-21}
3241}
3242
3243@inproceedings{Miller02,
3244    keywords    = {exception handling},
3245    contributer = {pabuhr@plg},
3246    author      = {Robert Miller and Anand Tripathi},
3247    title       = {The Guardian Model for Exception Handling in Distributed Systems},
3248    booktitle   = {21st Symposium on Reliable Distributed Systems},
3249    organization= {IEEE},
3250    address     = {Suita, Japan},
3251    year        = 2002,
3252    month       = oct,
3253    pages       = {304-313}
3254}
3255
3256@phdthesis{Chen09,
3257    author      = {Jun Chen},
3258    title       = {Guided Testing of Concurrent Programs Using Value Schedules},
3259    school      = {University of Waterloo},
3260    year        = 2009,
3261    month       = sep,
3262    address     = {Waterloo, Ontario, Canada, N2L 3G1},
3263    note        = {\textsf{http://uwspace.uwaterloo.ca/bitstream/\-10012/\-4735/\-1/\-Chen-Jun.pdf}},
3264}
3265
3266@misc{GNU-C++,
3267    keywords    = {C++, GNU C},
3268    contributer = {pabuhr@plg},
3269    author      = {Michael D. Tiemann},
3270    title       = {User's Guide to GNU {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
3271    howpublished= {Free Software Foundation, 1000 Mass Ave., Cambridge, MA, U.S.A., 02138},
3272    month       = mar,
3273    year        = 1990,
3274}
3275
3276% H
3277
3278@manual{Haskell10,
3279    keywords    = {Haskell},
3280    contributer = {pabuhr@plg},
3281    author      = {Haskell},
3282    title       = {Haskell 2010 Language Report},
3283    edition     = {{S}imon {M}arlow},
3284    year        = 2010,
3285    note        = {\href{https://haskell.org/definition/haskell2010.pdf}{https://haskell.org/\-definition/\-haskell2010.pdf}},
3286}
3287
3288@article{Michael04a,
3289    keywords    = {Lock-free, synchronization, concurrent programming, memory management, multiprogramming, dynamic data structures},
3290    author      = {Maged M. Michael},
3291    title       = {Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects},
3292    journal     = ieeepds,
3293    volume      = 15,
3294    number      = 6,
3295    month       = jun,
3296    year        = 2004,
3297    pages       = {491-504},
3298    publisher   = {IEEE Press},
3299    address     = {Piscataway, NJ, USA},
3300}
3301
3302@techreport{Hermes90,
3303    keywords    = {processes, distributed computing},
3304    contributer = {pabuhr@plg},
3305    author      = {Robert E. Strom and David F. Bacon and Arthur P. Goldberg and Andy Lowry and Daniel M. Yellin and Shaula Alexander Yemini}, 
3306    title       = {Hermes: A Language for Distributed Computing},
3307    institution = {IBM T. J. Watson Research Center},
3308    address     = {Yorktown Heights, New York, U.S.A., 10598},
3309    month       = oct,
3310    year        = 1990,
3311}
3312
3313@book{Hermes91,
3314    keywords    = {processes, distributed computing},
3315    contributer = {pabuhr@plg},
3316    author      = {Robert E. Strom and David F. Bacon and Arthur P. Goldberg and Andy Lowry and Daniel M. Yellin and Shaula Alexander Yemini}, 
3317    title       = {Hermes: A Language for Distributed Computing},
3318    publisher   = {Prentice-Hall},
3319    address     = {Englewood Cliffs},
3320    series      = {Innovative Technology},
3321    year        = 1991,
3322}
3323
3324@article{katzenelson83b,
3325    contributer = {gjditchfield@plg},
3326    author      = "Jacob Katzenelsen",
3327    title       = "Higher Level Programming and Data Abstraction---A Case Study using Enhanced C",
3328    journal     = spe,
3329    year        = 1983,
3330    volume      = 13,
3331    number      = 7,
3332    pages       = {577-596},
3333    month       = jul
3334}
3335
3336@techreport{Hoare73,
3337    keywords    = {},
3338    contributer = {gjditchfield@plg},
3339    author      = {C. A. R. Hoare},
3340    title       = {Hints on Programming Language Design},
3341    institution = {Stanford University Computer Science Department},
3342    year        = 1973,
3343    month       = dec,
3344    number      = {CS-73-403},
3345    note        = {Reprinted in \cite{pldesign}.}
3346}
3347
3348@article{Dijkstra71,
3349    keywords    = {monitor, secretary},
3350    contributer = {pabuhr@plg},
3351    author      = {E. W. Dijkstra},
3352    title       = {Hierarchical Ordering of Sequential Processes},
3353    journal     = acta,
3354    volume      = 1,
3355    pages       = {115-138},
3356    year        = 1971,
3357}
3358
3359@article{Hesselink17,
3360    keywords    = {concurrency, mutual exclusion, performance experiment, software solutions},
3361    title       = {High-Contention Mutual Exclusion by Elevator Algorithms},
3362    author      = {Peter Buhr and David Dice and Wim H. Hesselink},
3363    journal     = ccpe,
3364    volumeopt   = 30,
3365    numberopt   = 4,
3366    year        = 2018,
3367    month       = may,
3368    publisher   = {John Wiley \& Sons},
3369    note        = {\url{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}}
3370}
3371
3372@article{Buhr15a,
3373    keywords    = {software solution, mutual exclusion, performance experiment},
3374    author      = {Peter A. Buhr and David Dice and Wim H. Hesselink},
3375    title       = {High-Performance {$N$}-Thread Software Solutions for Mutual Exclusion},
3376    journal     = ccpe,
3377    volume      = 27,
3378    number      = 3,
3379    pages       = {651-701},
3380    month       = mar,
3381    year        = 2015,
3382}
3383
3384@article{Ackermann28,
3385    keywords    = {recursion, Ackermann function},
3386    contributer = {pabuhr@plg},
3387    author      = {Wilhelm Ackermann},
3388    title       = {Zum Hilbertschen Aufbau der reellen Zahlen},
3389    publisher   = {Springer},
3390    journal     = mathann,
3391    number      = 1,
3392    volume      = 99,
3393    pages       = {118-133},
3394    month       = dec,
3395    year        = 1928,
3396}
3397
3398@inproceedings{typeclass,
3399    keywords    = {Hindley/Miller type systems, Haskell},
3400    contributer = {gjditchfield@plg},
3401    author      = {Philip Wadler and Stephen Blott},
3402    title       = {How to make {\em Ad-Hoc} Polymorphism Less {\em Ad-Hoc}},
3403    booktitle   = popl,
3404    year        = 1989,
3405    pages       = {60-76},
3406    organization= {Association for Computing Machinery}
3407}
3408
3409% I
3410
3411@book{IBM370,
3412    keywords    = {370, IBM},
3413    contributer = {pabuhr@plg},
3414    key         = {IBM370},
3415    title       = {{IBM} System/370 Principles of Operation},
3416    publisher   = {IBM},
3417    number      = {GA22-7000-8},
3418    month       = oct,
3419    year        = 1981,
3420    edition     = {9th}
3421}
3422
3423@book{Icon,
3424    keywords    = {Icon},
3425    contributer = {pabuhr@plg},
3426    author      = {Ralph E. Griswold and Madge T. Griswold},
3427    title       = {The Icon Programming Language},
3428    publisher   = {Prentice-Hall},
3429    address     = {Englewood Cliffs},
3430    year        = 1983,
3431}
3432
3433@inproceedings{Valois94,
3434    keywords    = {lock free, queue},
3435    contributer = {pabuhr@plg},
3436    author      = {John D. Valois},
3437    title       = {Implementing Lock-Free Queues},
3438    booktitle   = {Seventh International Conference on Parallel and Distributed Computing Systems},
3439    address     = {Las Vegas, Nevada, U.S.A.},
3440    year        = {1994},
3441    pages       = {64-69},
3442}
3443
3444@article{Hehner81,
3445    keywords    = {concurrency, critical section, bakery algorithm},
3446    contributer = {pabuhr@plg},
3447    author      = {Eric C. R. Hehner and R. K. Shyamasundar},
3448    title       = {An Implementation of {P} and {V}},
3449    journal     = ipl,
3450    year        = 1981,
3451    month       = aug,
3452    volume      = 12,
3453    number      = 4,
3454    pages       = {196-198},
3455}
3456
3457@incollection{Steenkiste91,
3458    keywords    = {lisp},
3459    contributer = {gjditchfield@plg},
3460    author      = {Peter A. Steenkiste},
3461    title       = {The Implementation of Tags and Run-Time Checking},
3462    booktitle   = {Topics in Advanced Language Implementation},
3463    pages       = {3-24},
3464    year        = 1991,
3465    editor      = {Peter Lee},
3466    chapter     = {1},
3467    publisher   = {The MIT Press}
3468}
3469
3470@techreport{Roberts89,
3471    keywords    = {},
3472    contributer = {pabuhr@plg},
3473    author      = {Eric S. Roberts},
3474    title       = {Implementing Exceptions in {C}},
3475    institution = {Digital Systems Research Center},
3476    address     = {130 Lytton Avenue, Palo Alto, California, 94301},
3477    number      = {40},
3478    month       = mar,
3479    year        = 1989,
3480}
3481
3482@mastersthesis{Bilson03,
3483    keywords    = {Cforall, parametric polymorphism, overloading},
3484    contributer = {pabuhr@plg},
3485    author      = {Richard C. Bilson},
3486    title       = {Implementing Overloading and Polymorphism in \textsf{C}$\mathbf{\forall}$},
3487    school      = {School of Computer Science, University of Waterloo},
3488    year        = 2003,
3489    address     = {Waterloo, Ontario, Canada, N2L 3G1},
3490    note        = {\href{http://plg.uwaterloo.ca/theses/BilsonThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-BilsonThesis.pdf}},
3491}
3492
3493@article{Buhr05b,
3494    keywords    = {monitor, automatic signal, implicit signal},
3495    contributer = {pabuhr@plg},
3496    author      = {Peter A. Buhr and Ashif S. Harji},
3497    title       = {Implicit-signal monitors},
3498    journal     = toplas,
3499    volume      = 27,
3500    number      = 6,
3501    month       = nov,
3502    year        = 2005,
3503    issn        = {0164-0925},
3504    pages       = {1270--1343},
3505    publisher   = {ACM Press},
3506    address     = {New York, NY, USA},
3507}
3508
3509@article{Baker77,
3510    author      = {Henry C. Baker, Jr. and Carl Hewitt},
3511    title       = {The Incremental Garbage Collection of Processes},
3512    journal     = {SIGART Bulletin},
3513    publisher   = {ACM},
3514    address     = {New York, NY, USA},
3515    month       = aug,
3516    year        = 1977,
3517    pages       = {55-59},
3518    issn        = {0163-5719},
3519}
3520
3521@book{Algol68,
3522    keywords    = {Algol68},
3523    contributer = {pabuhr@plg},
3524    author      = {C. H. Lindsey and S. G. van der Meulen},
3525    title       = {Informal Introduction to ALGOL 68},
3526    publisher   = {North-Holland},
3527    address     = {London},
3528    year        = 1977,
3529}
3530
3531@inproceedings{Cook90,
3532    keywords    = {f-bounded polymorhpism, lambda calculus},
3533    contributer = {gjditchfield@plg},
3534    author      = {William R. Cook and Walter L. Hill and Peter S. Canning},
3535    title       = {Inheritance is Not Subtyping},
3536    booktitle   = popl,
3537    year        = 1990,
3538    pages       = {125-135},
3539    organization= {Association for Computing Machinery},
3540    abstract    = {
3541        In typed object-oriented languages the subtype relation is
3542        typically based on the inheritance hierarchy.  This approach,
3543        however, leads either to insecure type-systems or to restrictions
3544        on inheritance that make it less flexible than untyped Smalltalk
3545        inheritance.  We present a new typed model of inheritance that
3546        allows more of the flexibility of Smalltalk inheritance within a
3547        statically-typed system.  Significant features of our analysis are
3548        the introduction of polymorphism into the typing of inheritance and
3549        the uniform application of inheritance to objects, classes and
3550        types.  The resulting notion of {\em type inheritance} allows us to
3551        show that the type of an inherited object is an inherited type but
3552        not always a subtype.
3553    }
3554}
3555
3556@inproceedings{MMR92,
3557    keywords    = {},
3558    contributer = {gjditchfield@plg},
3559    author      = {Robert E. Minnear and Patrick A. Muckelbauer and Vincent F. Russo},
3560    title       = {Integrating the {Sun Microsystems} {XDR/RPC} Protocols
3561                  into the {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Stream Model},
3562    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference Proceedings},
3563    year        = 1992,
3564    month       = aug,
3565    pages       = {295-312},
3566    organization= {USENIX Association},
3567    address     = {2590 Ninth Street, Suite 215, Berkeley, CA 94710},
3568    abstract    = {
3569        This paper reports our experiences integrating the Sun Microsystems
3570        RPC and XDR protocol specifications into the C++ model of
3571        input/output streams.  As part of the {\it Renaissance} operating
3572        system project, we wish to construct network servers and clients,
3573        written in C++, which interoperate with existing UNIX clients
3574        and servers.  We discovered that, although it would be possible to
3575        re-implement the procedural based XDR/RPC implementation
3576        distributed by Sun Microsystems in C++, it is far cleaner to
3577        integrate the protocols with the C++ I/O stream model.  We
3578        feel the resulting model provides a cleaner way of implementing RPC
3579        clients and servers without losing functionality or compatibility
3580        with existing clients and servers.
3581    }
3582}
3583
3584@inproceedings{Zuo08,
3585    keywords    = {shared memory systems,intelligent multiport memory,multiprocessors systems,shared memory system},
3586    author      = {Wang Zuo and Wang Zuo and Li Jiaxing},
3587    title       = {An Intelligent Multi-Port Memory},
3588    booktitle   = {Symposium on Intelligent Information Technology Application Workshops, Shanghai, China},
3589    month       = dec,
3590    year        = 2008,
3591    pages       = {251-254},
3592    publisher   = {IEEE Computer Society},
3593    address     = {Los Alamitos, CA, USA},
3594}
3595
3596@book{Francez96,
3597    keywords    = {await, formal},
3598    contributer = {pabuhr@plg},
3599    author      = {Nissim Francez and Ira R. Forman},
3600    title       = {Interacting Processes: A Multiparty Approach to Coordinated Distributed Programming},
3601    publisher   = {Addison-Wesley},
3602    address     = {Boston},
3603    series      = {ACM Press Books},
3604    year        = 1996,
3605}
3606
3607@article{Labreche90,
3608    keywords    = {concurrency, C++},
3609    contributer = {pabuhr@plg},
3610    author      = {Pierre Labr{\`{e}}che},
3611    title       = {Interactors: A Real-Time Executive with Multiparty Interactions in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
3612    journal     = sigplan,
3613    volume      = 25,
3614    number      = 4,
3615    month       = apr,
3616    year        = 1990,
3617    pages       = {20-32},
3618}
3619
3620@inproceedings{interfaces,
3621    keywords    = {parameterized interfaces, classes, recursion/inheritance},
3622    contributer = {gjditchfield@plg},
3623    author      = {Peter S. Canning and William R. Cook and Walter L. Hill and
3624        Walter G. Olthoff},
3625    title       = {Interfaces for Strongly-Typed Object-Oriented Programming},
3626    crossref    = "OOPSLA89",
3627    pages       = {457-467},
3628    abstract    = {
3629        This paper develops a system of explicit interfaces for
3630        object-oriented programming.  The system provides the benefits of
3631        module interfaces found in languages like Ada and Modula-2 while
3632        preserving the expressiveness that gives untyped object-oriented
3633        languages like Smalltalk their flexibility.  Interfaces are
3634        interpreted as polymorphic types to make the system sufficiently
3635        powerful.  We use interfaces to analyze the properties of
3636        inheritance, and identify three distinct kinds of inheritance in
3637        object-oriented programming, corresponding to objects, classes, and
3638        interfaces, respectively.  Object interfaces clarify the
3639        distinction between interface containment and inheritance and give
3640        insight into limitations caused by equating the notions of type and
3641        class in many typed object-oriented programming languages.
3642        Interfaces also have practical consequences for design,
3643        specification, and maintenance of object-oriented systems.
3644    }
3645}
3646
3647@phdthesis{Girard72,
3648    keywords    = {universal quantification},
3649    contributer = {gjditchfield@plg},
3650    author      = {J.-Y. Girard},
3651    title       = {Interpretation fonctionelle et elimination des coupures de
3652        l'arithmetique d'ordre superieur},
3653    school      = {Universite Paris},
3654    year        = {1972}
3655}
3656
3657@article{Karaorman93,
3658    keywords    = {Eiffel, concurrency libraries},
3659    contributer = {pabuhr@plg},
3660    author      = {Murat Karaorman and John Bruno},
3661    title       = {Introducing Concurrency to a Sequential Language},
3662    journal     = cacm,
3663    month       = sep,
3664    year        = 1993,
3665    volume      = 36,
3666    number      = 9,
3667    pages       = {103-116}
3668}
3669
3670@book{Corman92,
3671    keywords    = {PRAM, parallel algorithms},
3672    contributer = {pabuhr@plg},
3673    author      = {Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest},
3674    title       = {Introduction to Algorithms},
3675    publisher   = {MIT Press/McGraw-Hill},
3676    address     = {Cambridge},
3677    series      = {Electrical Engineering and Computer Science Series},
3678    year        = 1992,
3679}
3680
3681@book{Hopcroft79,
3682    keywords    = {finite-state machine, push-dowm automata},
3683    contributer = {pabuhr@plg},
3684    author      = {John E. Hopcroft and Jeffrey D. Ullman},
3685    title       = {Introduction to Automata Theory, Languages and Computation},
3686    publisher   = {Addison-Wesley},
3687    address     = {Boston},
3688    year        = 1979,
3689}
3690
3691@techreport{walker87,
3692    keywords    = {CCS},
3693    contributer = {gjditchfield@plg},
3694    author      = {David Walker},
3695    title       = {Introduction to a Calculus of Communicating Systems},
3696    institution = {Laboratory for Foundations of Computer Science},
3697    year        = 1987,
3698    address     = {Department of Computer Science, University of Edinburgh, Edinburgh EH9 3JZ},
3699    month       = jun,
3700    number      = {ECS-LFCS-87-22},
3701}
3702
3703@article{katzenelson83a,
3704    author      = {Jacob Katzenelson},
3705    title       = {Introduction to Enhanced C (EC)},
3706    journal     = spe,
3707    volume      = 13,
3708    number      = 7,
3709    year        = 1983,
3710    month       = jul,
3711    pages       = {551-576},
3712}
3713
3714@book{Deitel90,
3715    keywords    = {concurrency, operating systems},
3716    contributer = {pabuhr@plg},
3717    author      = {Harvey M. Deitel},
3718    title       = {An Introduction to Operating Systems},
3719    publisher   = {Addison-Wesley},
3720    address     = {Boston},
3721    year        = 1990,
3722    edition     = {2nd},
3723}
3724
3725@techreport{Birrell89,
3726    keywords    = {threads, monitors},
3727    contributer = {pabuhr@plg},
3728    author      = {Andrew D. Birrell},
3729    title       = {An Introduction to Programming with Threads},
3730    institution = {Digital Systems Research Center},
3731    address     = {130 Lytton Avenue, Palo Alto, California, 94301},
3732    number      = {35},
3733    month       = jan,
3734    year        = 1989,
3735    note        = {{\textsf{http://www.hpl.hp.com/\-techreports/\-Compaq-DEC/\-SRC-RR-35.html}}},
3736
3737}
3738
3739@article{t/o,
3740    keywords    = {Trellis/Owl},
3741    contributer = {gjditchfield@plg},
3742    author      = {Craig Schaffert and Topher Cooper and Bruce Bullis and Mike Kilian and Carrie Wilpot},
3743    title       = {An Introduction to Trellis/Owl},
3744    journal     = sigplan,
3745    volume      = 21,
3746    number      = 11,
3747    year        = 1986,
3748    month       = nov,
3749    pages       = {9-16},
3750}
3751
3752@inproceedings{Pharr12,
3753    title       = {ispc: A {SPMD} compiler for high-performance CPU programming},
3754    author      = {Pharr, Matt and Mark, William R},
3755    booktitle   = {Innovative Parallel Computing (InPar), 2012},
3756    pages       = {1--13},
3757    year        = {2012},
3758    month       = may,
3759    address     = {San Jose, CA, USA},
3760    publisher   = {IEEE},
3761}
3762
3763@inproceedings{DeLozier13,
3764    keywords    = {C++, local pointers, memory safety, type-safety},
3765    author      = {DeLozier, Christian and Eisenberg, Richard and Nagarakatte, Santosh and Osera, Peter-Michael and Martin, Milo M.K. and Zdancewic, Steve},
3766    title       = {{I}ronclad {C++}: A Library-augmented Type-safe Subset of {C++}},
3767    booktitle   = {Proceedings of the 2013 ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages \& Applications},
3768    series      = {OOPSLA'13},
3769    year        = {2013},
3770    address     = {Indianapolis, Indiana, USA},
3771    pages       = {287-304},
3772    publisher   = {ACM},
3773}
3774
3775@inproceedings{Hibbard77,
3776    keywords    = {algol-68, concurrency},
3777    contributer = {pabuhr@plg},
3778    author      = {Peter G. Hibbard and P. Knueven and B. W. Leverett},
3779    title       = {Issues in the Efficient Implementation and Use of Multiprocessing in {Algol} 68},
3780    booktitle   = {Proceedings of the 5th Annual iii Conference},
3781    address     = {Guidel, France},
3782    month       = may,
3783    year        = 1977,
3784    pages       = {203-221}
3785}
3786
3787@inproceedings{Miller97,
3788    keywords    = {exception handling, software-engineering},
3789    contributer = {pabuhr@plg},
3790    author      = {Robert Miller and Anand Tripathi},
3791    title       = {Issues with Exception Hnadling in Object-Oriented Systems},
3792    booktitle   = {ECOOP'97},
3793    publisher   = {Springer},
3794    volume      = 1241,
3795    series      = {Lecture Notes in Computer Science},
3796    year        = 1997,
3797    pages       = {85-103}
3798}
3799   
3800@article{Murer96,
3801    keywords    = {interators, generators, cursors},
3802    contributer = {pabuhr@plg},
3803    author      = {Stephan Murer and Stephen Omohundro and David Stoutamire and Clemens Szyperski},
3804    title       = {Iteration Abstraction in Sather},
3805    journal     = toplas,
3806    month       = jan,
3807    year        = 1996,
3808    volume      = 18,
3809    number      = 1,
3810    pages       = {1-15},
3811}
3812
3813% J
3814                 
3815@book{Java,
3816    keywords    = {Java},
3817    contributer = {pabuhr@plg},
3818    author      = {James Gosling and Bill Joy and Guy Steele and Gilad Bracha},
3819    title       = {The {Java} Language Specification},
3820    publisher   = {Addison-Wesley},
3821    address     = {Reading},
3822    year        = 2000,
3823    edition     = {2nd},
3824}
3825
3826@manual{Java8,
3827    keywords    = {Java SE 8},
3828    contributer = {pabuhr@plg},
3829    author      = {James Gosling and Bill Joy and Guy Steele and Gilad Bracha and Alex Buckley},
3830    title       = {{Java} Language Specification},
3831    publisher   = {Oracle},
3832    year        = 2015,
3833    edition     = {{J}ava {SE} 8},
3834}
3835
3836@manual{JUC,
3837    keywords    = {Java concurrency library},
3838    contributer = {pabuhr@plg},
3839    title       = {java.util.concurrency},
3840    author      = {Doug Lea},
3841    organization= {Oracle},
3842    year        = 2014,
3843    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}},
3844}
3845
3846% K
3847
3848@article{Duggan96,
3849    keywords    = {concurrency, critical section},
3850    contributer = {pabuhr@plg},
3851    author      = {Dominic Duggan and G. V. Cormack and John Ophel},
3852    title       = {Kinded Type Inference for Parametric Overloading},
3853    journal     = acta,
3854    volume      = 33,
3855    number      = 1,
3856    year        = 1996,
3857    pages       = {21-68},
3858}
3859
3860@article{Peter35,
3861    keywords    = {recursion, Ackermann function},
3862    contributer = {pabuhr@plg},
3863    author      = {R{\'{o}}zsa P{\'{e}}ter},
3864    title       = {Konstruktion nichtrekursiver Funktionen},
3865    publisher   = {Springer},
3866    journal     = mathann,
3867    number      = 111,
3868    volume      = 1,
3869    pages       = {42-60},
3870    month       = dec,
3871    year        = 1935,
3872}
3873
3874% L
3875
3876@TechReport{WVWR88:L,
3877    contributer = {gjditchf@plg},
3878    author      = {Hanno Wupper and Jan Vytopil and Martin Wieczorek and Dick de Reus},
3879    title       = {{L}_{3333}: A Simple Language with Static Typing of Hard Real-Time Constraints},
3880    institution = {Department of Informatics, Faculty of Science, Catholic University Nijmegen},
3881    year        = 1988,
3882    number      = {88-3},
3883    address     = {Katholieke Universiteit Nijmegen, Fakulteit der Wiskunde
3884                   en Natuurwetenschappen, Infomatica V, Toernooiveld, 6512
3885                   ED Nijmegen, The Netherlands},
3886    month       = apr,
3887    annote      = {A polymorphic typed lambda calculus with \begin{itemize}
3888                   \item A trivial type, ``!'', with a single element.
3889                   \item Labelled types, distinct from each other.
3890                   ``!False'' and ``!True'' are distinct types, each
3891                   containing a single value serving as boolean false and
3892                   true.  ``2'' is an abbreviation for ``!0 succ succ'', the
3893                   type containing only 2.
3894                   \item Disjunction types ``\{| !False, !True |\}''.  Interval
3895                   types are abbreviations for disjunctions.
3896                   \item Conjunction types ``\{\& real Re, real Im \&\}'', where
3897                   ``Re'' and ``Im'' are type labels that distinguish between the
3898                   fields.
3899                   \item Pair types ``\{^ a, b ^\}'', for use in recursive types
3900                   and dyadic infix functions.
3901                   \item Function types, universal types, existential types,
3902                   and subtyping (viewed as coercion), as in Fun.
3903                   \end{itemize}
3904                   Disjunctions and conjunctions types are associative and
3905                   commutative (i.e. flat).  Each type has a matching
3906                   constructor.  Functions use pattern matching on type
3907                   labels to strip labels and extract conjunction fields:
3908                   \begin{verbatim}
3909                   \lambda n {0...1000000 Guilders}. ... n ...
3910                   -- both argument and n are amounts in Guilders.
3911                   \lambda n {0...1000000} Guilders. ... n ...
3912                   -- argument in Guilders, but n is in 0...1000000.
3913                   \end{verbatim}
3914                   ``Function bundles'' (conjunctions of functions), applied
3915                   to arguments, replace Dijkstra's guarded if...fi, but the
3916                   bundles are first-class and the guards are part of their
3917                   type.
3918
3919                   The same trick used to define the type ``2'' is used to
3920                   move absolute times into the type system, to allow static
3921                   checking. ``0`'' denotes a time before the system begins
3922                   execution.  ``\#`'' denotes ``eventually'', and ``?`''
3923                   denotes ``maybe never''.  ``a\\t'' and ``a@t'' are types
3924                   of a value of type a that will be available no later
3925                   (earlier) than time t.  Universals and existentials use
3926                   subtyping to parameterize functions by start time:
3927                   \begin{verbatim}
3928                   let f {\forall t > \#`}. {a\t} \on {b\t+d}
3929                   f{then} y -- argument y must be available at time ``then''.
3930                   \end{verbatim}
3931                   Functions can return before their arguments are available
3932                   if they don't use them.  However, function {\em bundles}
3933                   can't return until their result type is known, so the
3934                   lower and upper time bounds of the bundle are the
3935                   second-last upper bound of the component functions: at
3936                   that time, there is only one alternative left.
3937
3938                   Explicit time parameterization allows slack in time
3939                   specification.  Tools could point out slack or determine
3940                   degree of parallelism.}
3941}
3942
3943@mastersthesis{Clarke90,
3944    keywords    = {concurrency, postponing requests},
3945    contributer = {pabuhr@plg},
3946    author      = {Charles L. A. Clarke},
3947    title       = {Language and Compiler Support for Synchronous Message Passing Architectures},
3948    school      = {University of Waterloo},
3949    year        = 1990,
3950    address     = {Waterloo, Ontario, Canada, N2L 3G1}
3951}
3952
3953@article{Tennent77,
3954    keywords    = {abstraction, correspondence, Pascal},
3955    contributer = {gjditchfield@plg},
3956    author      = {R. D. Tennent},
3957    title       = {Language Design Methods Based on Semantic Principles},
3958    journal     = acta,
3959    year        = 1977,
3960    volume      = 8,
3961    number      = 2,
3962    pages       = {97-112},
3963    note        = {reprinted in \cite{pldesign}},
3964    abstract    = {
3965        Two language design methods based on principles derived from the
3966        denotational approach to programming language semantics are
3967        described and illustrated by an application to the language Pascal.
3968        The principles are, firstly, the correspondence between parametric
3969        and declarative mechanisms and secondly, a principle of abstraction
3970        for programming languages adapted from set theory.  Several useful
3971        extensions and generalizations of Pascal emerge by applying these
3972        principles, including a solution to the array parameter problem,
3973        and a modularization facility.
3974    },
3975}
3976
3977@article{Liskov86,
3978    keywords    = {synchronous communication, concurrency},
3979    contributer = {pabuhr@plg},
3980    author      = {Barbara Liskov and Maurice Kerlihy and Lucy Gilbert},
3981    title       = {Limitations of Synchronous Communication with Static
3982                   Process Structure in Languages for Distributed Computing},
3983    journal     = {},
3984    volume      = {},
3985    number      = {},
3986    month       = {},
3987    year        = {},
3988    pages       = {},
3989}
3990
3991@article{Linda,
3992    keywords    = {Linda, concurrency},
3993    contributer = {pabuhr@plg},
3994    author      = {Nicholas Carriero and David Gelernter},
3995    title       = {Linda in Context},
3996    journal     = cacm,
3997    volume      = 32,
3998    number      = 4,
3999    month       = apr,
4000    year        = 1989,
4001    pages       = {444-458}
4002}
4003
4004@book{Weissman67,
4005    keywords    = {lisp},
4006    author      = {Clark Weissman},
4007    title       = {Lisp 1.5 Primer},
4008    publisher   = {Dickenson Publishing},
4009    address     = {Belmont},
4010    year        = 1967,
4011}
4012
4013@article{Sundell08,
4014    keywords    = {lock free, deque},
4015    contributer = {pabuhr@plg},
4016    author      = {H{\r{a}}kan Sundell and Philippas Tsigas},
4017    title       = {Lock-free Deques and Doubly Linked Lists},
4018    journal     = {J. Parallel Distrib. Comput.},
4019    volume      = 68,
4020    number      = 7,
4021    year        = 2008,
4022    pages       = {1008-1020},
4023}
4024
4025@article{Cormack89,
4026    keywords    = {parsing, LR, error recovery},
4027    contributer = {pabuhr@plg},
4028    author      = {Gordon V. Cormack},
4029    title       = {An {LR} Substring Parser for Noncorrecting Syntax Error Recovery},
4030    journal     = sigplan,
4031    volume      = 24,
4032    number      = 7,
4033    month       = jul,
4034    year        = 1989,
4035    pages       = {161-169},
4036    note        = {Proceedings of the {SIGPLAN}~'89 Conference on Programming Language Design and Implementation}
4037}
4038
4039% M
4040
4041@book{M68K,
4042    keywords    = {M680XX, Motorola},
4043    contributer = {pabuhr@plg},
4044    key         = {Motorola},
4045    title       = {M68000 Family Programmer's Reference Manual},
4046    publisher   = {Motorola},
4047    year        = 1992,
4048}
4049
4050@article{c++libs,
4051    keywords    = {directory structure},
4052    contributer = {gjditchfield@plg},
4053    author      = {J. M. Coggins and G. Bollella},
4054    title       = {Managing {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Libraries},
4055    journal     = sigplan,
4056    year        = 1989,
4057    month       = jun, volume = 24, number = 6, pages = {37-48},
4058    abstract    = {
4059        This paper describes a scheme we have used to manage a large
4060        library written in the C++ language.  The scheme imposes a
4061        directory structure, and represents dependency hierarchy in a
4062        globally accessible file we call the 'prelude' file.  We also
4063        discuss the structure of the description files (makefiles) used
4064        with the UNIX options we have found to be useful in reducing the
4065        size of the library, and how to minimize recompilation time after
4066        trivial changes to the source code of the library.
4067    }
4068}
4069
4070@inproceedings{mprof,
4071    keywords    = {malloc},
4072    contributer = {gjditchfield@plg},
4073    author      = {Benjamin Zorn and Paul Hilfinger},
4074    title       = {A Memory Allocation Profiler for {C} and Lisp Programs},
4075    booktitle   = {Summer 1988 {USENIX} proceedings},
4076    year        = 1988
4077}
4078
4079@manual{MMTk,
4080    keywords    = {Java memory management},
4081    contributer = {pabuhr@plg},
4082    title       = {MMTk: The Memory Management Toolkit},
4083    author      = {Steve Blackburn and Robin Garner and Daniel Frampton},
4084    month       = sep,
4085    year        = 2006,
4086    note        = {\textsf{http://cs.anu.edu.au/\-\char`\~Robin.Garner/\-mmtk-guide.pdf}},
4087}
4088
4089@article{Adve10,
4090    keywords    = {Java memory management},
4091    contributer = {pabuhr@plg},
4092    author      = {Sarita V. Adve and Hans-J. Boehm},
4093    title       = {Memory Models: A Case for Rethinking Parallel Languages and Hardware},
4094    journal     = cacm,
4095    volume      = 53,
4096    number      = 8,
4097    month       = aug,
4098    year        = 2010,
4099    pages       = {90-101},
4100    publisher   = {ACM},
4101    address     = {New York, NY, USA},
4102}
4103@techreport{Mesa,
4104    keywords    = {monitors, packages},
4105    contributer = {pabuhr@plg},
4106    author      = {James G. Mitchell and William Maybury and Richard Sweet},
4107    title       = {Mesa Language Manual},
4108    institution = {Xerox Palo Alto Research Center},
4109    number      = {CSL--79--3},
4110    month       = apr,
4111    year        = 1979
4112}
4113
4114@article{Andrews89,
4115    keywords    = {semaphore, split-binary, baton},
4116    contributer = {pabuhr@plg},
4117    author      = {Gregory R. Andrews},
4118    title       = {A Method for Solving Synronization Problems},
4119    journal     = scp,
4120    volume      = 13,
4121    number      = 4,
4122    month       = dec,
4123    year        = 1989,
4124    pages       = {1-21},
4125}
4126
4127@inproceedings{Mitchell78,
4128    keywords    = {Mesa},
4129    contributer = {pabuhr@plg},
4130    author      = {James G. Mitchell},
4131    title       = {Mesa: A Designer's User Perspective},
4132    booktitle   = {Spring CompCom 78},
4133    organization= {Sixteenth IEEE Computer Society International Conference},
4134    address     = {San Francisco, California, U.S.A.},
4135    month       = feb,
4136    year        = 1978,
4137    pages       = {36-39},
4138    note        = {IEEE Catalog No. 78CH1328-4C},
4139}
4140
4141@article{Gentleman81,
4142    keywords    = {messages, concurrency},
4143    contributer = {pabuhr@plg},
4144    author      = {W. Morven Gentleman},
4145    title       = {Message Passing between Sequential Processes:
4146                   the Reply Primitive and the Administrator Concept},
4147    journal     = spe,
4148    month       = may,
4149    year        = 1981,
4150    volume      = 11,
4151    number      = 5,
4152    pages       = {435-466}
4153}
4154
4155@article{Cormack88,
4156    keywords    = {concurrency},
4157    contributer = {pabuhr@plg},
4158    author      = {G. V. Cormack},
4159    title       = {A Micro Kernel for Concurrency in C},
4160    journal     = spe,
4161    month       = may,
4162    year        = 1988,
4163    volume      = 18,
4164    number      = 4,
4165    pages       = {485-491}
4166}
4167
4168@article{Buhr90a,
4169    keywords    = {concurrency, light-weight process, shared memory},
4170    contributer = {pabuhr@plg},
4171    author      = {Peter A. Buhr and Richard A. Stroobosscher},
4172    title       = {The $\mu${S}ystem: Providing Light-Weight Concurrency on Shared-Memory Multiprocessor Computers Running {UNIX}},
4173    journal     = spe,
4174    volume      = 20,
4175    number      = 9,
4176    month       = sep,
4177    year        = 1990,
4178    pages       = {929-963},
4179}
4180
4181@techreport{uSystem,
4182    keywords    = {C, concurrency, light-weight process, shared memory},
4183    contributer = {pabuhr@plg},
4184    author      = {Peter A. Buhr and Hamish I. Macdonald and Richard A. Stroobosscher},
4185    title       = {$\mu${S}ystem Annotated Reference Manual, Version 4.4.3},
4186    institution = {Department of Computer Science, University of Waterloo},
4187    address     = {Waterloo, Ontario, Canada, N2L 3G1},
4188    month       = sep,
4189    year        = 1994,
4190    note        = {{\small\textsf{ftp://\-plg.uwaterloo.ca/\-pub/\-uSystem/\-uSystem.ps.gz}}},
4191}
4192
4193@book{Mips4000,
4194    key         = {Mips4000},
4195    title       = {MIPS R4000 Microprocessor User's Manual},
4196    publisher   = {MIPS Computer Systems Inc},
4197    year        = 1991,
4198}
4199
4200@inproceedings{Mjolner,
4201    keywords    = {Mjolner, hierarchical windows},
4202    contributer = {pabuhr@plg},
4203    author      = {G\"{o}rel Hedin and Boris Magnusson},
4204    title       = {The Mj{\o}lner Environment: Direct Interaction with Abstractions},
4205    booktitle   = {Proceedings of the European Conference on Object Oriented Programming},
4206    organization= {ECOOP'88},
4207    publisher   = {Springer},
4208    volume      = 322,
4209    editor      = {S. Gjessing and K. Nygaard},
4210    address     = {Oslo, Norway},
4211    month       = aug,
4212    year        = 1988,
4213    pages       = {41-54},
4214    note        = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis},
4215}
4216
4217@article{Skillicorn98,
4218    keywords    = {parallel models},
4219    contributer = {pabuhr@plg},
4220    author      = {David B. Skillicorn and Domenico Talia},
4221    title       = {Models and Languages for Parallel Computation},
4222    journal     = acmcs,
4223    volume      = 30,
4224    number      = 2,
4225    month       = jun,
4226    year        = 1998,
4227    pages       = {123-169},
4228}
4229
4230@article{Werther96,
4231    keywords    = {C++, language syntax},
4232    contributer = {pabuhr@plg},
4233    author      = {Ben Werther and Damian Conway},
4234    title       = {A Modest Proposal: {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Resyntaxed},
4235    journal     = sigplan,
4236    volume      = 31,
4237    number      = 11,
4238    month       = nov,
4239    year        = 1996,
4240    pages       = {74-82},
4241}
4242
4243@book{Alexandrescu01,
4244    keywords    = {c design-patterns programming},
4245    contributer = {pabuhr@plg},
4246    author      = {Andrei Alexandrescu},
4247    title       = {Modern C++ Design: Generic Programming and Design Patterns Applied},
4248    publisher   = {Addison-Wesley Professional},
4249    address     = {Boston},
4250    month       = feb,
4251    year        = 2001,
4252    isbn        = {0201704315},
4253}
4254
4255@book{Tanenbaum92,
4256    keywords    = {concurrency, operating systems},
4257    contributer = {pabuhr@plg},
4258    author      = {Andrew S. Tanenbaum},
4259    title       = {Modern Operating Systems},
4260    publisher   = {Prentice-Hall},
4261    address     = {Englewood Cliffs},
4262    year        = 1992,
4263}
4264
4265@article{Wirth77,
4266    keywords    = {modules, coroutines},
4267    contributer = {pabuhr},
4268    author      = {Niklaus Wirth},
4269    title       = {Modula: a Language for Modular Multiprogramming},
4270    journal     = spe,
4271    month       = {January--February},
4272    year        = 1977,
4273    volume      = 7,
4274    number      = 1,
4275    pages       = {3-35},
4276}
4277
4278@book{Harbison92,
4279    contributer = {mhcoffin},
4280    author      = {Samuel P. Harbison},
4281    title       = {Modula-3},
4282    publisher   = {Prentise Hall, Inc.},
4283    year        = {1992},
4284    comment     = {This is a textbook for learning Modula-3.}
4285}
4286
4287@techreport{Modula-3:old,
4288    keywords    = {Modula-3, inheritance, type extension},
4289    contributer = {gjditchfield@plg},
4290    author      = {Luca Cardelli and James Donahue and Lucille Glassman and Mick
4291                   Jordan and Bill Kalsow and Greg Nelson},
4292    title       = {Modula-3 Report},
4293    institution = {Systems Research Center},
4294    address     = {130 Lytton Avenue, Palo Alto, California  94301},
4295    month       = aug,
4296    year        = 1988,
4297    number      = 31
4298}
4299 
4300@article{Dueck90,
4301    keywords    = {attribute grammars},
4302    contributer = {pabuhr@plg},
4303    author      = {Gerald D. P. Dueck and Gordon V. Cormack},
4304    title       = {Modular Attribute Grammars},
4305    journal     = {The Computer Journal},
4306    month       = apr,
4307    year        = 1990,
4308    volume      = 33,
4309    number      = 2,
4310    pages       = {164-172},
4311}
4312
4313@article{Yemini85,
4314    keywords    = {exception handling},
4315    contributer = {pabuhr@plg},
4316    author      = {Shaula Yemini and Daniel M. Berry},
4317    title       = {A Modular Verifiable Exception-Handling Mechanism},
4318    journal     = toplas,
4319    month       = apr,
4320    year        = 1985,
4321    volume      = 7,
4322    number      = 2,
4323    pages       = {214-243},
4324}
4325
4326@article{Buhr95b,
4327    keywords    = {concurrency, monitors, classification},
4328    contributer = {pabuhr@plg},
4329    author      = {Peter A. Buhr and Michel Fortier and Michael H. Coffin},
4330    title       = {Monitor Classification},
4331    journal     = acmcs,
4332    volume      = 27,
4333    number      = 1,
4334    month       = mar,
4335    year        = 1995,
4336    pages       = {63-107},
4337}
4338
4339@article{Hoare74,
4340    keywords    = {monitor},
4341    contributer = {pabuhr@plg},
4342    author      = {C. A. R. Hoare},
4343    title       = {Monitors: An Operating System Structuring Concept},
4344    journal     = cacm,
4345    volume      = 17,
4346    number      = 10,
4347    month       = oct,
4348    year        = 1974,
4349    pages       = {549-557},
4350    annote      = {
4351    }
4352}
4353
4354@inbook{Buhr99a,
4355    keywords    = {concurrency, monitors, classification},
4356    contributer = {pabuhr@plg},
4357    author      = {Peter A. Buhr and Michel Fortier and Michael H. Coffin},
4358    title       = {Encyclopedia of Computer Science and Technology},
4359    chapter     = {Monitor Taxonomy},
4360    publisher   = {Marcel Dekker, Inc},
4361    volume      = {40, supplement 25},
4362    year        = 1999,
4363    pages       = {191-212},
4364}
4365%    editor     = {Allen Kent and James G. Williams},
4366
4367@manual{MPI,
4368    keywords    = {MPI},
4369    contributer = {pabuhr@plg},
4370    title       = {MPI: A Message-Passing Interface Standard, Version 3.1},
4371    organization= {Message Passing Interface Forum},
4372    address     = {University of Tennessee, Knoxville, Tennessee},
4373    month       = jun,
4374    year        = 2015,
4375    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}},
4376}
4377
4378@article{multilisp,
4379    keywords    = {futures, scheme},
4380    contributer = {gjditchfield@plg},
4381    author      = {Halstead, Jr.,Robert H.},
4382    title       = {Multilisp: A Language for Concurrent Symbolic Programming},
4383    journal     = toplas,
4384    volume      = 7,
4385    number      = 4,
4386    pages       = {501-538},
4387    month       = oct,
4388    year        = 1985,
4389    comment     = {
4390        (future E) begins evaluating the expression E, and
4391        returns a ``future'' representing the value.  When evaluation is
4392        finished, the value of E replaces the future.  Operations that need
4393        the future's value suspend until it is available.  Assignment and
4394        parameter passing do not suspend.  Future introduces concurrency
4395        between the calculation of a value and its use; reference to
4396        futures is a synchronization mechanism.
4397
4398        (pcall F A B ... C) concurrently evaluates F, A, B, ... C, and then
4399        applies F to the arguments.  pcall can be built from future and a
4400        ``touch'' operation.  pcall is included because it may not be easy
4401        to determine that there are no critical sections between the future
4402        expression and the code between the future call and the value's
4403        first use.
4404
4405        (delay E) is like future, but E's process does not begin until its
4406        value is needed.  It provides lazy evaluation.  Replacing delay
4407        with future would launch an infinite number of processes.
4408    }
4409}
4410
4411@techreport{Bretthauer89,
4412    keywords    = {multiple inheritance},
4413    contributer = {pabuhr@plg},
4414    author      = {Harry Bretthauer and Thomas Christaller and J\"{u}rgen Kopp}, 
4415    title       = {Multiple vs. Single Inheritance in Object-oriented Programming Languages. What do we really want?},
4416    institution = {Gesellschaft F\"{u}r Mathematik und Datenverarbeitung mbH},
4417    address     = {Schlo$\beta$ Birlinghoven, Postfach 12 40, D-5205 Sankt Augustin 1, Deutschland},
4418    number      = {Arbeitspapiere der GMD 415},
4419    month       = nov,
4420    year        = 1989,
4421}
4422
4423@inproceedings{c++:multinh,
4424    keywords    = {C++, multiple inheritance, implementation},
4425    contributer = {gjditchfield@plg},
4426    author      = {Bjarne Stroustrup},
4427    title       = {Multiple Inheritance for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
4428    booktitle   = {Proceedings of the Spring '87 EUUG Conference},
4429    month       = may, year = 1987
4430}
4431
4432@inproceedings{st:mult,
4433    keywords    = {smalltalk, multiple inheritance, implementation},
4434    contributer = {gjditchfield@plg},
4435    author      = {Daniel H. H. Ingalls and A. H. Borning},
4436    title       = {Multiple Inheritance in Smalltalk-80},
4437    booktitle   = {Proceedings of the National Conference on Artificial Intelligence},
4438    month       = aug,
4439    year        = 1982,
4440    pages       = {234-238},
4441    organization= {American Association for Artificial Intelligence},
4442    comment     = {
4443        Methods are looked up in the current class, the superclasses, the
4444        supersuperclasses, etc.  The same method can be inherited
4445        repeatedly, but having different methods for the same message is an
4446        error.  Only one copy is made for multiply-inherited fields.
4447
4448        {\tt X.m} is the method m in superclass X.  {\tt super.m} is
4449        allowed if there is no ambiguity; {\tt self super.m} replaces {\tt
4450        super m}.  {\tt all.m} invokes all inherited versions of m.
4451
4452        Methods on the first-superclass chain are found as usual.  Methods
4453        from other superclasses are copied into the class dictionary.  An
4454        error method is created if inherited methods conflict.  The parser
4455        is changed to allow compound selectors.  {\tt Object
4456        messageNotUnderstood} is changed to look for compound selectors and
4457        dynamically add a method with the right name and body to the class.
4458        When methods are edited, they are copied into subclasses and
4459        compound selector versions are deleted, as appropriate.
4460    }
4461}
4462
4463@article{Lamport86I,
4464    keywords    = {software solutions, N-thread, mutual exclusions},
4465    contributer = {pabuhr@plg},
4466    author      = {Leslie Lamport},
4467    title       = {The Mutual Exclusion Problem: Part\,{I}--A Theory of Interprocess Communication},
4468    journal     = jacm,
4469    volume      = 33,
4470    number      = 2,
4471    month       = apr,
4472    year        = 1986,
4473    pages       = {313--326},
4474    numpages    = {14},
4475    publisher   = {ACM},
4476    address     = {New York, NY, USA},
4477}
4478
4479@article{Lamport86II,
4480    keywords    = {software solutions, N-thread, mutual exclusions},
4481    contributer = {pabuhr@plg},
4482    author      = {Leslie Lamport},
4483    title       = {The Mutual Exclusion Problem: Part\,{II}--Statement and Solutions},
4484    journal     = jacm,
4485    volume      = 33,
4486    number      = 2,
4487    month       = apr,
4488    year        = 1986,
4489    pages       = {327--348},
4490    numpages    = {22},
4491    publisher   = {ACM},
4492    address     = {New York, NY, USA},
4493}
4494
4495@article{Burns78,
4496    keywords    = {hardware, N-process solution, O(N)},
4497    contributer = {pabuhr@plg},
4498    author      = {James E. Burns},
4499    title       = {Mutual Exclusion with Linear Waiting Using Binary Shared Variables},
4500    journal     = {SIGACT News},
4501    volume      = 10,
4502    number      = 2,
4503    month       = {Summer},
4504    year        = 1978,
4505    pages       = {42-47},
4506}
4507
4508@inproceedings{Burns80,
4509    keywords    = {N-process software solution},
4510    contributer = {pabuhr@plg},
4511    author      = {James E. Burns and Nancy A. Lynch},
4512    title       = {Mutual Exclusion using Indivisible Reads and Writes},
4513    booktitle   = {Proceedings of the 18th Annual Allerton Conference on Communications, Control and Computing, Monticello, Illinois, USA},
4514    year        = 1980,
4515    pages       = {833-842},
4516    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]},
4517    optnote     = {\textsf{http://\-groups.csail.mit.edu/\-tds/\-papers/\-Lynch/\-allertonconf.pdf}},
4518}
4519
4520@article{Peterson81,
4521    keywords    = {concurrency, critical section},
4522    contributer = {pabuhr@plg},
4523    author      = {G. L. Peterson},
4524    title       = {Myths About the Mutual Exclusion Problem},
4525    journal     = ipl,
4526    year        = 1981,
4527    month       = jun,
4528    volume      = 12,
4529    number      = 3,
4530    pages       = {115-116},
4531}
4532
4533% N
4534
4535@article{Haddon77,
4536    keywords    = {monitors, nested monitor calls},
4537    contributer = {pabuhr@plg},
4538    author      = {Bruce K. Haddon},
4539    title       = {Nested Monitor Calls},
4540    journal     = osr,
4541    volume      = 11,
4542    number      = 4,
4543    month       = oct,
4544    year        = 1977,
4545    pages       = {18-23},
4546}
4547
4548@inproceedings{nesting,
4549    keywords    = {},
4550    contributer = {gjditchfield@plg},
4551    author      = {Lori A. Clarke and Jack C. Wilenden and Alexander L. Wolf},
4552    title       = {Nesting in {Ada} Programs is for the Birds},
4553    booktitle   = {Proceedings of the ACM-SIGPLAN Symposium on the {Ada}
4554        Programming Language},
4555    year        = 1980,
4556    month       = dec, pages = {139-145},
4557    note        = {SIGPLAN Notices, v. 15, n. 11},
4558    abstract    = {
4559        Given a data abstraction construct like the Ada package and in the
4560        light of current thoughts on programming methodology, we feel that
4561        nesting is an anachronism.  In this paper we propose a nest-free
4562        program style for Ada that eschews nested program units and
4563        declarations within blocks and instead heavily utilizes packages
4564        and context specifications as mechanisms for controlling
4565        visibility.  We view this proposal as a first step toward the
4566        development of programming methods that exploit the novel language
4567        features available in Ada.  Consideration of this proposal's
4568        ramifications for data flow, control flow, and overall program
4569        structure substantiates our contention that a tree structure is
4570        seldom a natural representation of a program and that nesting
4571        therefore generally interferes with program development and
4572        readability.
4573    }
4574}
4575
4576@inproceedings{Buhr88,
4577    keywords    = {nested classes, persistence},
4578    contributer = {pabuhr@plg},
4579    author      = {P. A. Buhr and C. R. Zarnke},
4580    title       = {Nesting in an Object Oriented Language is NOT for the Birds},
4581    booktitle   = {Proceedings of the European Conference on Object Oriented Programming},
4582    publisher   = {Springer},
4583    volume      = 322,
4584    editor      = {S. Gjessing and K. Nygaard},
4585    address     = {Oslo, Norway},
4586    month       = aug,
4587    year        = 1988,
4588    pages       = {128-145},
4589    note        = {Lecture Notes in Computer Science, Ed. by G. Goos and J. Hartmanis},
4590}
4591
4592@inproceedings{Thompson90new,
4593    keywords    = {Plan 9},
4594    contributer = {pabuhr@plg},
4595    title       = {A New {C} Compiler},
4596    author      = {Ken Thompson},
4597    booktitle   = {Proceedings of the Summer 1990 UKUUG Conference},
4598    year        = 1990,
4599    pages       = {41-51},
4600    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}},
4601}
4602
4603@article{Trono94,
4604    author      = {John A. Trono},
4605    title       = {A New Exercise in Concurrency},
4606    journal     = {SIGCSE Bulletin},
4607    volume      = {26},
4608    number      = {3},
4609    month       = sep,
4610    year        = {1994},
4611    pages       = {8-10},
4612    publisher   = {ACM},
4613    address     = {New York, NY, USA},
4614}
4615
4616@article{Anderson01,
4617    keywords    = {software solutions, fast path},
4618    contributer = {pabuhr@plg},
4619    author      = {James H. Anderson and Yong-Jik Kim},
4620    title       = {A New Fast-Path Mechanism For Mutual Exclusion},
4621    journal     = {Distributed Computing},
4622    month       = jan,
4623    year        = 2001,
4624    volume      = 14,
4625    number      = 1,
4626    pages       = {17-29},
4627}
4628
4629@article{Lamport74,
4630    keywords    = {concurrency, N-Process solution, O(N)},
4631    contributer = {pabuhr@plg},
4632    author      = {Leslie Lamport},
4633    title       = {A New Solution of Dijkstra's Concurrent Programming Problem},
4634    journal     = cacm,
4635    month       = aug,
4636    year        = 1974,
4637    volume      = 17,
4638    number      = 8,
4639    pages       = {453-455},
4640}
4641
4642@book{NeWS,
4643    AUTHOR      = {James Gosling and David S. H. Rosenthal and Richelle J. Arden},
4644    TITLE       = {The {NeWS} Book},
4645    PUBLISHER   = {Springer-Verlag},
4646    YEAR        = {1989}
4647}
4648
4649@article{landin,
4650    keywords    = {},
4651    contributer = {gjditchfield@plg},
4652    author      = {P. J. Landin},
4653    title       = {The Next 700 Programing Languages},
4654    journal     = cacm,
4655    year        = 1966,
4656    volume      = 9,
4657    pages       = {157-164},
4658}
4659
4660@article{Herlihy05,
4661    keywords    = {Multiprocessors, concurrent data structures, dynamic data structures, memory management, nonblocking synchronization},
4662    contributer = {pabuhr@plg},
4663    author      = {Maurice Herlihy and Victor Luchangco and Paul Martin and Mark Moir},
4664    title       = {Nonblocking Memory Management Support for Dynamic-sized Data Structures},
4665    journal     = tocs,
4666    volume      = 23,
4667    number      = 2,
4668    month       = may,
4669    year        = 2005,
4670    pages       = {146-196},
4671    numpages    = {51},
4672    publisher   = {ACM},
4673    address     = {New York, NY, USA},
4674}
4675
4676% O
4677
4678@inproceedings{oop:abcl/1,
4679    keywords    = {concurrency, OOPL, futures},
4680    contributer = {gjditchfield@plg},
4681    author      = {Akinori Yonezawa and Jean-Pierre Briot and Etsuya Shibayama},
4682    title       = {Object-Oriented Concurrent Programming in {ABCL/1}},
4683    crossref    = "OOPSLA86",
4684    pages       = {258-268},
4685    comment     = {
4686        Actions for messages sent to an object are executed concurrently
4687        iff the object has no members.  A select construct specifies a set
4688        of message patterns.
4689
4690        Express messages have priority.  If an express message arrives
4691        while an ordinary message is being processed, the action for the
4692        ordinary message is suspended or aborted and the action for the
4693        express message is executed.  The sender decides which class a
4694        message belongs in.  Non-interruptible sections can be defined.
4695
4696        Message sends can be non-blocking, or can block until a reply is
4697        received, at the sender's option.  The receiver can continue to
4698        execute after sending the reply.
4699
4700        Replies can send back ``futures'', and put values in them later.
4701        Futures are queues of values, not single values.  The caller can
4702        use a ``ready?'' predicate to test for empty queue, or can use
4703        operations to get the first or all queue elements; these operations
4704        block if the queue is empty.
4705    }
4706}
4707
4708@techreport{Schmidt95,
4709    keywords    = {ACE, concurrency, library},
4710    contributer = {pabuhr@plg},
4711    author      = {Douglas C. Schmidt},
4712    title       = {An OO Encapsulation of Lightweight OS Concurrency Mechanisms in the {ACE} Toolkit},
4713    institution = {Washington University in St. Louis},
4714    year        = 1995,
4715    number      = 31,
4716    note        = {{\small\textsf{http://\-www.cs.wustl.edu/\-\char`\~schmidt/\-PDF/\-IPC\_SAP-92.pdf}}},
4717}
4718
4719@inproceedings{OOEx,
4720    keywords    = {Exceptions, object-oriented programming languages},
4721    contributer = {gjditchfield@plg},
4722    author      = {Christophe Dony},
4723    title       = {An Object-oriented Exception Handling System for an Object-oriented Language},
4724    booktitle   = {ECOOP '88. European Conference on Object-Oriented Programming},
4725    year        = 1988,
4726    pages       = {146-161},
4727    editor      = {S. Gjessing and K. Nygaard},
4728    organization= {DND, The Norwegian Computer Society},
4729    publisher   = {Springer},
4730    comment     = {
4731           Objectives:
4732           - Users can define new exceptions.
4733           - Default handlers can be attached to exceptions.
4734           - Handlers can be attached to classes.
4735           - Handlers can be attached to dynamic entities (expressions).
4736           - Exceptions propagate first along the invocation chain.
4737           - Exceptions should be hierarchically organized classes.
4738           - Handlers should take into account the exception hierarchy (i.e.,
4739             should handle raising of sub-exceptions).
4740           The ``exceptional-event'' class has two subclasses.  ``Warning''
4741           has a ``resume'' method, and ``error'' has ``exit'' and
4742           ``retry'' methods.  Signalling an exception creates an instance
4743           of the exception, whose members are used to pass information
4744           back to the handler.  Handlers are instances of class
4745           ``protect-handler'' with a method ``protect {\em expression}'',
4746           or are methods defined for the class or the exception.
4747    }
4748}
4749
4750@article{CommonObjects,
4751    author      = {A. Snyder},
4752    title       = {Object-Oriented Programming for Common Lisp},
4753    address     = {Palo Alto CA},
4754    year        = 1985,
4755    publisher   = {Software Technology Laboratory, Hewlett-Packard Laboratories},
4756    journal     = {Report ATC-85-1},
4757}
4758
4759@book{objective-c,
4760    keywords    = {},
4761    author      = {Brad J. Cox},
4762    title       = {Object-oriented programming; an evolutionary approach},
4763    publisher   = {Addison-Wesley},
4764    address     = {Boston},
4765    year        = 1986
4766}
4767
4768@misc{obj-c-book,
4769    keywords    = {objective-c},
4770    contributor = {a3moss@uwaterloo.ca},
4771    key         = {Objective-C},
4772    title       = {Objective-C},
4773    publisher   = {Apple Inc.},
4774    year        = 2015,
4775    howpublished= {\href{https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectiveC.html}{https://developer.apple.com/\-library/\-content/\-documentation/\-General/\-Conceptual/\-DevPedia-\-CocoaCore/\-ObjectiveC.html}},
4776    optnote     = {Accessed: 2018-03}
4777}
4778
4779@misc{xcode7,
4780    keywords    = {objective-c},
4781    contributor = {a3moss@uwaterloo.ca},
4782    key         = {Xcode},
4783    title       = {{X}code 7 Release Notes},
4784    year        = 2015,
4785    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}},
4786    optnote     = {Accessed: 2017-04}
4787}
4788
4789@book{Beta,
4790    keywords    = {Beta, object oriented, concurrency, exceptions},
4791    contributer = {pabuhr@plg},
4792    author      = {Ole Lehrmann Madsen and Birger M{\o}ller-Pedersen and Kristen Nygaard},
4793    title       = {Object-oriented Programming in the {BETA} Programming Language},
4794    publisher   = {Addison-Wesley},
4795    address     = {Boston},
4796    year        = 1993,
4797}
4798
4799@article{Flavors,
4800    author      = {D. A. Moon},
4801    title       = {Object-Oriented Programming with Flavors},
4802    address     = {Portland OR},
4803    month       = sep,
4804    year        = 1986,
4805    journal     = {Proc. ACM Conf. on Object-Oriented Systems, Languages and Applications},
4806}
4807
4808@article{Buhr00b,
4809    keywords    = {concurrency, C++, real-time},
4810    contributer = {pabuhr@plg},
4811    author      = {Peter A. Buhr and Ashif S. Harji and Philipp E. Lim and Jiongxiong Chen},
4812    title       = {Object-Oriented Real-Time Concurrency},
4813    journal     = sigplan,
4814    volume      = 35,
4815    number      = 10,
4816    month       = oct,
4817    year        = 2000,
4818    pages       = {29-46},
4819    note        = {OOPSLA'00, Oct. 15--19, 2000, Minneapolis, Minnesota, U.S.A.},
4820}
4821
4822@book{Meyer88,
4823    keywords    = {Eiffel},
4824    contributer = {pabuhr@plg},
4825    author      = {Bertrand Meyer},
4826    title       = {Object-oriented Software Construction},
4827    publisher   = {Prentice-Hall},
4828    address     = {Englewood Cliffs},
4829    year        = {1988},
4830    series      = {Prentice-Hall International Series in Computer Science},
4831}
4832
4833@article{objectPascal,
4834    keywords    = {objects, modules},
4835    contributer = {gjditchfield@plg},
4836    author      = {Larry Tesler},
4837    title       = {Object Pascal Report},
4838    journal     = {Structured Language World},
4839    year        = 1985,
4840    volume      = 9,
4841    number      = 3,
4842}
4843
4844@misc{obj-c:next,
4845    keywords    = {categories, protocols, Objective C},
4846    contributor = {gjditchfield@angus},
4847    author      = {NeXT Computer, Inc.},
4848    title       = {Objective C Extensions},
4849    howpublished= {On-line documentation in ``NEXTSTEP 3.1 Developer''},
4850    year        = 1993
4851}
4852
4853@book{Galletly96,
4854    keywords    = {occam},
4855    author      = {John Galletly},
4856    title       = {{OCCAM} 2: Including {OCCAM} 2.1},
4857    publisher   = {{UCL} (University College London) Press},
4858    address     = {London},
4859    edition     = {2nd},
4860    year        = 1996,
4861}
4862
4863@techreport{Morrison88,
4864    keywords    = {objects, concurrency, persistence},
4865    contributer = {pabuhr@plg},
4866    author      = {R. Morrison and A. L. Brown and R. Carrick and R. Connor and A. Dearle},
4867    title       = {On the integration of Object-Oriented and Process-Oriented computation in persistent environments},
4868    institution = {Department of Computational Science, University of St. Andrews, Scotland},
4869    number      = {PPRR 57},
4870    month       = jan,
4871    year        = 1988,
4872}
4873
4874@article{Peterson73,
4875    keywords    = {goto, structured programming},
4876    contributer = {pabuhr@plg},
4877    author      = {W. W. Peterson and T. Kasami and N. Tokura},
4878    title       = {On the Capabilities of While, Repeat, and Exit Statements},
4879    journal     = cacm,
4880    month       = aug,
4881    year        = 1973,
4882    volume      = 16,
4883    number      = 8,
4884    pages       = {503-512}
4885}
4886
4887@article{Baker82,
4888    keywords    = {compilation},
4889    contributer = {gjditchfield@plg},
4890    author      = {Theodore P. Baker},
4891    title       = {A One-Pass Algorithm for Overload Resolution in {Ada}},
4892    journal     = toplas,
4893    year        = 1982,
4894    month       = oct,
4895    volume      = 4,
4896    number      = 4,
4897    pages       = {601-614},
4898    abstract    = {
4899        A simple method is presented for detecting ambiguities and finding
4900        the correct interpretations of expressions in the programming
4901        language Ada.  Unlike previously reported solutions to this
4902        problem, which require multiple passes over a tree structure, the
4903        method described here operates in one bottom-up pass, during which
4904        a directed acyclic graph is produced.  The correctness of this
4905        approach is demonstrated by a brief formal argument.
4906    },
4907    comment     = {
4908        See also \cite{D:overload}.
4909        }
4910}
4911
4912@manual{OpenMP,
4913    keywords    = {concurrency, openmp, spmd},
4914    contributer = {pabuhr@plg},
4915    key         = {OpenMP},
4916    title       = {OpenMP Application Program Interface, Version 4.5},
4917    month       = nov,
4918    year        = 2015,
4919    note        = {\href{https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf}{https://\-www.openmp.org/\-wp-content/\-uploads/\-openmp-4.5.pdf}},
4920}
4921
4922@book{Deitel04,
4923    keywords    = {concurrency, operating systems},
4924    contributer = {pabuhr@plg},
4925    author      = {Harvey M. Deitel and Paul J. Deitel and David R. Choffnes},
4926    title       = {Operating Systems},
4927    publisher   = {Pearson Prentice-Hall},
4928    address     = {Englewood Cliffs},
4929    year        = 2004,
4930    edition     = {3rd},
4931}
4932
4933@book{Stalling98,
4934    keywords    = {concurrency, operating systems},
4935    contributer = {pabuhr@plg},
4936    author      = {William Stallings},
4937    title       = {Operating Systems: Internals and Design Principles},
4938    publisher   = {Prentice-Hall},
4939    address     = {Englewood Cliffs},
4940    year        = 1998,
4941    edition     = {3rd},
4942}
4943
4944@book{Stalling01,
4945    keywords    = {concurrency, operating systems},
4946    contributer = {pabuhr@plg},
4947    author      = {William Stallings},
4948    title       = {Operating Systems: Internals and Design Principles},
4949    publisher   = {Prentice-Hall},
4950    address     = {Englewood Cliffs},
4951    year        = 2001,
4952    edition     = {4th},
4953}
4954
4955@book{Silberschatz91,
4956    keywords    = {concurrency, operating systems},
4957    contributer = {pabuhr@plg},
4958    author      = {Abraham Silberschatz and James L. Peterson and Peter Galvin},
4959    title       = {Operating System Concepts},
4960    publisher   = {Addision-Wesley},
4961    address     = {Boston},
4962    year        = 1991,
4963    edition     = {3rd},
4964}
4965
4966@book{Tanenbaum87,
4967    keywords    = {concurrency, operating systems},
4968    contributer = {pabuhr@plg},
4969    author      = {Andrew S. Tanenbaum},
4970    title       = {Operating Systems : Design and Implementation},
4971    publisher   = {Prentice-Hall},
4972    address     = {Englewood Cliffs},
4973    series      = {Software Series},
4974    year        = 1987,
4975}
4976
4977@book{Hansen73,
4978    keywords    = {monitors},
4979    contributer = {pabuhr@plg},
4980    author      = {Per {Brinch Hansen}},
4981    title       = {Operating System Principles},
4982    publisher   = {Prentice-Hall},
4983    address     = {Englewood Cliffs},
4984    year        = 1973,
4985}
4986
4987@book{Bic03,
4988    keywords    = {concurrency, operating systems},
4989    contributer = {pabuhr@plg},
4990    author      = {Lubomir F. Bic and Alan C. Shaw},
4991    title       = {Operating System Principles},
4992    publisher   = {Prentice-Hall},
4993    address     = {Englewood Cliffs},
4994    year        = 2003,
4995}
4996
4997@techreport{milner88,
4998    keywords    = {},
4999    contributer = {gjditchfield@plg},
5000    author      = {Robin Milner},
5001    title       = {Operational and Algebraic Semantics of Concurrent Processes},
5002    institution = {Laboratory for Foundations of Computer Science},
5003    year        = 1988,
5004    address     = {Department of Computer Science, University of Edinburgh, Edinburgh EH9 3JZ},
5005    month       = feb,
5006    number      = {ECS-LFCS-88-46}
5007}
5008
5009@article{Ganzinger80,
5010    contributer = {a3moss@uwaterloo.ca},
5011    author      = {Ganzinger, Harald and Ripken, Knut},
5012    title       = {Operator Identification in {ADA}: Formal Specification, Complexity, and Concrete Implementation},
5013    journal     = {SIGPLAN Notices},
5014    issue_date  = {February 1980},
5015    volume      = {15},
5016    number      = {2},
5017    month       = feb,
5018    year        = {1980},
5019    issn        = {0362-1340},
5020    pages       = {30--42},
5021    numpages    = {13},
5022    url         = {http://doi.acm.org/10.1145/947586.947589},
5023    doi         = {10.1145/947586.947589},
5024    publisher   = {ACM},
5025    address     = {New York, NY, USA}
5026}
5027
5028@article{Ford82,
5029    keywords    = {},
5030    contributer = {pabuhr@plg},
5031    author      = {G. Ford and B. Hansche},
5032    title       = {Optional, Repeatable, and Varying Type Parameters},
5033    journal     = sigplan,
5034    volume      = 17,
5035    number      = 2,
5036    month       = feb,
5037    year        = 1982,
5038    pages       = {41-48},
5039}
5040
5041@manual{pli,
5042    keywords    = {PL/I},
5043    contributer = {gjditchfield@plg},
5044    key         = {IBM},
5045    title       = {{OS} and {DOS} {PL/I} Reference Manual},
5046    organization= {International Business Machines},
5047    edition     = {1st},
5048    month       = sep,
5049    year        = 1981,
5050    note        = {Manual GC26-3977-0},
5051}
5052
5053@techreport{D:overload,
5054    keywords    = {overload resolution, compilation},
5055    contributer = {gjditchfield@plg},
5056    author      = {M. Dausmann et. al.},
5057    title       = {Overloading in {Ada}},
5058    institution = {Universitat Karlsruhe},
5059    year        = 1979,
5060    number      = {23/79},
5061    comment     = {
5062        Probably the earliest description of the two-pass (bottom-up,
5063        top-down) overload resolution algorithm. See also
5064        \cite{PW:overload,WS:overload,PDM:overload,Cor:overload,Bak:overload}.
5065    }
5066}
5067
5068@article{EB87,
5069    keywords    = {packages, private types, assignment, equality},
5070    contributer = {gjditchfield@plg},
5071    author      = {J. Dana Eckart and Richard J. LeBlanc},
5072    title       = {Overloading in the {Ada} Language: Is it too restrictive?},
5073    journal     = {Computer Languages},
5074    year        = 1987,
5075    volume      = 12,
5076    number      = {3/4},
5077    pages       = {163-172},
5078    abstract    = {
5079        Packages in the Ada language provide a mechanism for extending the
5080        language through the development of additional data types.  Such
5081        types can be better integrated into the language using operator
5082        overloading; however, key limitations prevent new types from being
5083        transparently integrated into the language.  Allowing function
5084        names to overload private type names would give a cleaner and
5085        clearer mechanism for building values of these types.  Furthermore,
5086        by allowing redefinitions of ``:='' and by making it easier to
5087        overload ``='' for private types, Ada coud be transformed into a
5088        more expressive language.
5089    }
5090}
5091
5092@article{PW:overload,
5093    keywords    = {compilation},
5094    contributer = {gjditchfield@plg},
5095    author      = {Guido Persch and Georg Winterstein and Manfred Dausman and Sophia Drossopoulou},
5096    title       = {Overloading in Preliminary {Ada}},
5097    journal     = sigplan,
5098    year        = 1980,
5099    month       = nov, volume = 15, number = 11, pages = {47-56},
5100    note        = {Proceedings of the ACM-SIGPLAN Symposium on the {Ada} Programming Language}, 
5101    comment     = {
5102        The two-pass (bottom-up, then top-down) algorithm, with a proof
5103        that two passes suffice.  See also \cite{D:overload}.
5104    }
5105}
5106
5107@article{SR,
5108    keywords    = {concurrency, messages, rendezvous},
5109    contributer = {pabuhr@plg},
5110    author      = {Gregory R. Andrews and Ronald A. Olsson and Michael Coffin and
5111                  Irving Elshoff and Kelvin Nilsen and Titus Purdin and Gregg Townsend},
5112    title       = {An Overview of the {SR} Language and Implementation},
5113    journal     = toplas,
5114    month       = jan,
5115    year        = 1988,
5116    volume      = 10,
5117    number      = 1,
5118    pages       = {51-86},
5119}
5120
5121% P
5122
5123@article{Andrews91,
5124    keywords    = {general concurrency},
5125    contributer = {pabuhr@plg},
5126    author      = {Gregory R. Andrews},
5127    title       = {Paradigms for Process Interaction in Distributed Programs},
5128    journal     = acmcs,
5129    volume      = 23,
5130    number      = 1,
5131    month       = mar,
5132    year        = 1991,
5133    pages       = {49-90},
5134}
5135
5136@book{PPC++,
5137    keywords    = {concurrency, parallel, distributed, C++},
5138    contributer = {pabuhr@plg},
5139    editor      = {Gregory V. Wilson and Paul Lu},
5140    title       = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5141    publisher   = {MIT Press},
5142    series      = {Scientific and Engineering Computation Series},
5143    year        = 1996,
5144    pages       = {1-42},
5145}
5146
5147@incollection{Stroustrup96,
5148    keywords    = {concurrency, C++},
5149    contributer = {pabuhr@plg},
5150    author      = {Bjarne Stroustrup},
5151    title       = {A Perspective on Concurrency in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5152    editor      = {Gregory V. Wilson and Paul Lu},
5153    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5154    publisher   = {MIT Press},
5155    series      = {Scientific and Engineering Computation Series},
5156    year        = 1996,
5157    pages       = {xxvi-xxvii},
5158}
5159
5160@incollection{Yang96b,
5161    keywords    = {concurrency, C++},
5162    contributer = {pabuhr@plg},
5163    author      = {Shelby X. Yang and Dennis Gannon and Peter Beckman and Jacob Gotwals and Neelakantan Sundaresan},
5164    editor      = {Gregory V. Wilson and Paul Lu},
5165    title       = {p{C}++},
5166    booktitle   = {Parallel Programming in {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5167    publisher   = {MIT Press},
5168    address     = {Cambridge},
5169    series      = {Scientific and Engineering Computation Series},
5170    pages       = {507-546},
5171    year        = 1996,
5172}
5173
5174@article{goguen84,
5175    keywords    = {},
5176    contributer = {gjditchfield@plg},
5177    author      = {Goseph A. Goguen},
5178    title       = {Parameterized Programming},
5179    journal     = ieeese,
5180    year        = 1984,
5181    month       = sep, volume = "SE-10", number = 5, pages = {528-543},
5182    abstract    = {
5183        Parameterized programming is a powerful technique for the reliable
5184        reuse of software.  In this technique, modules are parameterized
5185        over very general interfaces that describe what properties of an
5186        environment are required for the module to work correctly.
5187        Reusability is enhanced by the flexibility of the parameterization
5188        mechanism proposed here.  Reliability is further enhanced by
5189        permitting interface requirements to include more than purely
5190        syntactic information.  This paper introduces three new ideas that
5191        seem especially useful in supporting parameterized programming: 1)
5192        {\em theories}, which declare global properties of program modules
5193        and interfaces; 2) {\em views}, which connect theories with program
5194        modules in an elegant way; and 3) {\em module expressions}, a kind
5195        of general structured program transformation which produces new
5196        modules by modifying and combining existing modules.  Although
5197        these ideas are illustrated with some simple examples in the OBJ
5198        programming language, they should also be taken as proposals for an
5199        Ada library system, for adding modules to Prolog, and as
5200        considerations for future language design efforts.  OBJ is an
5201        ultra-high level programming language, based upon rewrite rules,
5202        that incorporates these ideas, and many others from modern
5203        programming methodology.
5204    }
5205}
5206
5207@inproceedings{c++:templates,
5208    author      = {Bjarne Stroustrup},
5209    contributer = {gjditchfield@plg},
5210    title       = {Parameterized Types for {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}}},
5211    booktitle   = {USENIX {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Conference},
5212    organization= {USENIX Association},
5213    year        = 1988, pages = {1-18}
5214}
5215
5216@inproceedings{Boehm85,
5217    keywords    = {second-order unification},
5218    contributer = {gjditchfield@plg},
5219    author      = {Hans-J. Boehm},
5220    title       = {Partial Polymorphic Type Inference is Undecidable},
5221    booktitle   = {26th Annual Symposium on Foundations of Computer Science},
5222    year        = 1985,
5223    pages       = {339-345},
5224    organization= {IEEE Computer Society},
5225    publisher   = {IEEE Computer Society Press},
5226    address     = {1730 Massachusetts Avenue, N.W, Washington, D.C. 20036-1903},
5227    summary     = {
5228        Given a base typed lambda calculus with function types, type
5229        abstractions, and a recursive expression \(\mbox{fix } x:t.e\),
5230        then type inference for the partially typed language
5231        \begin{eqnarray}
5232        \lambda x:\tau.e        &\Rightarrow& \lambda x.e       \\
5233        \mbox{fix } x:\tau.e    &\Rightarrow& \mbox{fix } x.e   \\
5234        e \tau                  &\Rightarrow& e ?
5235        \end{eqnarray}
5236        is undecidable.
5237    }
5238}
5239
5240@book{Pascal,
5241    keywords    = {Pascal},
5242    contributer = {pabuhr@plg},
5243    author      = {Kathleen Jensen and Niklaus Wirth},
5244    title       = {{P}ascal User Manual and Report, ISO Pascal Standard},
5245    publisher   = {Springer--Verlag},
5246    year        = 1991,
5247    edition     = {4th},
5248    note        = {Revised by Andrew B. Mickel and James F. Miner}
5249}
5250
5251@book{Pascal:old,
5252    keywords    = {Pascal},
5253    contributer = {pabuhr@plg},
5254    author      = {Kathleen Jensen and Niklaus Wirth},
5255    title       = {{P}ascal User Manual and Report},
5256    publisher   = {Springer--Verlag},
5257    year        = 1975,
5258    edition     = {1st},
5259}
5260
5261@article{Turba85,
5262    keywords    = {Pascal, exception handling, inheritance},
5263    contributer = {pabuhr@plg},
5264    author      = {Thomas N. Turba},
5265    title       = {The {P}ascal Exception Handling Proposal},
5266    journal     = sigplan,
5267    volume      = 20,
5268    number      = 8,
5269    month       = aug,
5270    year        = 1985,
5271    pages       = {93-98},
5272}
5273
5274@manual{Pascal/VS,
5275    keywords    = {PL/I},
5276    contributer = {pabuhr@plg},
5277    key         = {IBM},
5278    title       = {{P}ascal/{VS} Language Reference Manual},
5279    organization= {International Business Machines},
5280    edition     = {1st},
5281    year        = 1981,
5282    note        = {Manual SH20-6168-1},
5283}
5284
5285@article{Anderson90,
5286    keywords    = {spin locks, back off, performance},
5287    contributer = {pabuhr@plg},
5288    author      = {Thomas E. Anderson},
5289    title       = {The Performance of Spin Lock Alternatives for Shared-Memory Multiprocessors},
5290    journal     = ieeepds,
5291    month       = jan,
5292    year        = 1990,
5293    volume      = 1,
5294    number      = 1,
5295    pages       = {6-16},
5296}
5297
5298@article{poly,
5299    keywords    = {Poly, Standard ML, Russell, persistence},
5300    contributer = {gjditchfield@plg},
5301    author      = {David C. J. Matthews},
5302    title       = {Poly Manual},
5303    journal     = sigplan,
5304    month       = sep, year = 1985,
5305    volume      = 20, number = 9, pages = {52-76}
5306}
5307
5308@techreport{Atkinson87b,
5309    keywords    = {naming, persistence},
5310    contributer = {pabuhr@plg},
5311    author      = {M. P. Atkinson and R. Morrison},
5312    title       = {Polymorphic Names and Iterations},
5313    institution = {Universities of Glasgow and St. Andrews, Scotland},
5314    number      = {PPRR-53-87},
5315    month       = nov,
5316    year        = 1987,
5317}
5318
5319@book{Harland,
5320    keywords    = {},
5321    author      = {David M. Harland},
5322    title       = {Polymorphic Programming Languages: Design and Implementation},
5323    publisher   = {Ellis Horwood},
5324    year        = 1984,
5325    series      = {Computers and their Applications},
5326    address     = {Market Cross House, Cooper Street, Chichester, West Sussex, PO19 1EB, England},
5327    summary     = {
5328        The principles of Procedural Abstraction, Data Type Completeness,
5329        Declaration Correspondence, and Orthogonality are ruthlessly applied
5330        to the design of a polymorphic language.
5331    }
5332}
5333
5334@unpublished{poa,
5335    keywords    = {Force N, type inference, reusability, transcendance},
5336    contributer = {gjditchfield@plg},
5337    author      = {G. V. Cormack and A. K. Wright},
5338    title       = {Polymorphism, Overloading, and Abstraction},
5339    note        = {personal communication}
5340}
5341
5342@inproceedings{forceone:impl,
5343    keywords    = {Parametric polymorphism, ForceOne},
5344    contributer = {gjditchfield@plg},
5345    author      = {G. V. Cormack and A. K. Wright},
5346    title       = {Polymorphism in the Compiled Language {ForceOne}},
5347    booktitle   = {Proceedings of the 20th Hawaii International Conference on Systems Sciences},
5348    month       = jan,
5349    year        = 1987,
5350    pages       = {284-292},
5351}
5352
5353@incollection{POOL-T,
5354    keywords    = {objects, concurrency},
5355    contributer = {pabuhr@plg},
5356    author      = {Pierre America},
5357    title       = {POOL-T: A Parallel Object-Oriented Language},
5358    booktitle   = {Object-Oriented Concurrent Programming},
5359    publisher   = {The MIT Press},
5360    year        = 1987,
5361    pages       = {199-220},
5362    editor      = {Akinori Yonezawa and Mario Tokoro}
5363}
5364
5365@article{Hardgrave76,
5366    keywords    = {positional, keyword, parameters, arguments},
5367    contributer = {pabuhr@plg},
5368    author      = {W. T. Hardgrave},
5369    title       = {Positional versus Keyword Parameter Communication in Programming Languages},
5370    journal     = sigplan,
5371    volume      = 11,
5372    number      = 5,
5373    month       = may,
5374    year        = 1976,
5375    pages       = {52-58},
5376}
5377
5378@inproceedings{Rafkind09,
5379    keywords    = {accurate, C programming language, conservative, garbage collection, precise},
5380    contributer = {pabuhr@plg},
5381    author      = {Rafkind, Jon and Wick, Adam and Regehr, John and Flatt, Matthew},
5382    title       = {Precise Garbage Collection for C},
5383    booktitle   = {Proceedings of the 2009 International Symposium on Memory Management},
5384    series      = {ISMM '09},
5385    year        = {2009},
5386    location    = {Dublin, Ireland},
5387    pages       = {39-48},
5388    publisher   = {ACM},
5389    address     = {New York, NY, USA},
5390}
5391
5392@article{Ada:preliminary,
5393    keywords    = {Ada},
5394    contributer = {pabuhr@plg},
5395    author      = {Jean D. Ichbiah and Bernd Krieg-Brueckner and Brian A. Wichmann
5396                   and Henry F. Ledgard and Jean-Claude Heliard and Jean-Raymond Abrial
5397                   and John G. P. Barnes and Olivier Roubine},
5398    title       = {Preliminary {Ada} Reference Manual},
5399    journal     = sigplan,
5400    volume      = 14,
5401    number      = 6,
5402    month       = jun,
5403    year        = 1979,
5404    note        = {Part A},
5405}
5406
5407@techreport{Forsythe,
5408    author      = {John C. Reynolds},
5409    title       = {Preliminary Design of the Programming Language {Forsythe}},
5410    institution = {Carnegie Mellon University},
5411    number      = {CMU-CS-88-159},
5412    month       = jun,
5413    year        = 1988,
5414}
5415
5416@article{PRESTO,
5417    keywords    = {concurrency, threads},
5418    contributer = {dgharriss@plg},
5419    author      = {B. N. Bershad and E. D. Lazowska and H. M. Levy},
5420    title       = {{PRESTO}: A System for Object-oriented Parallel Programming},
5421    journal     = spe,
5422    volume      = 18,
5423    number      = 8,
5424    month       = aug,
5425    year        = 1988,
5426    pages       = {713-732}
5427}
5428
5429@book{Ben-Ari82,
5430    keywords    = {concurrency, parallel, programming languages},
5431    contributer = {pabuhr@plg},
5432    author      = {Mordechai Ben-Ari},
5433    title       = {Principles of Concurrent Programming},
5434    publisher   = {Prentice-Hall International},
5435    address     = {Englewood Cliffs},
5436    year        = 1982,
5437}
5438
5439@book{Tennent81,
5440    author      = {R. D. Tennent},
5441    title       = {Principles of Programming Languages},
5442    publisher   = {Prentice-Hall International},
5443    address     = {Englewood Cliffs},
5444    year        = 1981,
5445    series      = {Series in Computer Science}
5446}
5447
5448@article{Lister77,
5449    keywords    = {monitors, nested monitor calls},
5450    contributer = {pabuhr@plg},
5451    author      = {Andrew Lister},
5452    title       = {The Problem of Nested Monitor Calls},
5453    journal     = osr,
5454    volume      = 11,
5455    number      = 3,
5456    month       = jul,
5457    year        = 1977,
5458    pages       = {5-7},
5459}
5460
5461@article{psa:persistence,
5462    keywords    = {persistence, first-class procedures, closure, PS-Algol, Abstract Data Types},
5463    contributer = {gjditchfield@plg},
5464    author      = {Malcolm P. Atkinson and Ronald Morrison},
5465    title       = {Procedures as Persistent Data Objects},
5466    journal     = toplas,
5467    volume      = {7},    number = {4},
5468    pages       = {539-559},
5469    month       = oct, year = 1985,
5470    comment     = {
5471        PS-Algol has ``structures'', accessible only through ``pntrs''.
5472        Pntrs can refer to any type of structure.  Field references involve
5473        a run-time check.  This, plus first-class procedures, can simulate
5474        abstract data types.  Procedure variables operating on pntrs
5475        simulate ADT operations.  A block defines a structure to implement
5476        the ADT, and assigns procedures to the variables.  Functions
5477        returning structures containing procedures  simulate multiple
5478        implementations and parameterized ADTs.
5479
5480        An outer procedure that returns a procedure that contains
5481        (non-local) references to the outer procedure's parameters
5482        implements partial evaluation.
5483
5484        Modules can be simulated like ADT's.  The module itself is a
5485        structure instance that is placed in persistent storage, and the
5486        module is imported by fetching it from the persistent store.
5487        Multiple instances of modules are easy.  Installation of new
5488        versions can be done by replacing the version in the database.
5489    }
5490}
5491
5492@article{Procol89,
5493    keywords    = {active objects, object-oriented languages, object-based languages, explicit per-object protocol},
5494    contributer = {akgoel@plg},
5495    author      = {Jan van den Bos and Chris Laffra},
5496    title       = {PROCOL: A Parallel Object Language with Protocols},
5497    journal     = sigplan,
5498    volume      = 24,
5499    number      = 10,
5500    month       = oct,
5501    year        = 1989,
5502    pages       = {95-102},
5503    note        = {Proceedings of the OOPSLA'89 Conference, Oct. 1--6, 1989, New Orleans, Lousiana},
5504    abstract    = {},
5505}
5506
5507@book{PowerPC,
5508    key         = {PowerPC processor},
5509    title       = {Programming Environments Manual for 32-Bit Implementations of the PowerPC ArchitectureARM Architecture},
5510    publisher   = {Freescale Semiconductor},
5511    volume      = {MPCFPE32B},
5512    edition     = {Rev. 3},
5513    month       = 9,
5514    year        = 2005,
5515}
5516
5517@book{Butenhof97,
5518    keywords    = {PThreads, concurrency},
5519    contributer = {pabuhr@plg},
5520    author      = {David R. Butenhof},
5521    title       = {Programming with {POSIX} Threads},
5522    publisher   = {Addison-Wesley},
5523    address     = {Boston},
5524    series      = {Professional Computing},
5525    year        = 1997,
5526}
5527
5528@book{SETL,
5529    keywords    = {SETL},
5530    contributer = {pabuhr@plg},
5531    author      = {J. T. Schwartz and R. B. K. Dewar and E. Dubinsky and E. Schonberg},
5532    title       = {Programming with Sets: An Introduction to {SETL}},
5533    publisher   = {Springer},
5534    address     = {New York, NY, USA},
5535    year        = 1986,
5536}
5537
5538@book{Genuys68,
5539    keywords    = {contains Dijkstra's Cooperating Sequential Processes},
5540    contributer = {pabuhr@plg},
5541    editor      = {F. Genuys},
5542    title       = {Programming Languages},
5543    publisher   = {Academic Press},
5544    address     = {London, New York},
5545    year        = 1968,
5546    note        = {NATO Advanced Study Institute, Villard-de-Lans, 1966}
5547}
5548
5549@manual{ANSI99:C,
5550    keywords    = {ANSI C 99},
5551    contributer = {pabuhr@plg},
5552    title       = {Programming Languages -- {C}},
5553    organization= {International Standard ISO/IEC 9899:1999 (E)},
5554    publisher   = {American National Standards Institute},
5555    address     = {www.ansi.org},
5556    year        = 1999,
5557}
5558
5559@manual{ANSI98:C++,
5560    keywords    = {ANSI C++ 98},
5561    contributer = {pabuhr@plg},
5562    key         = {C++98},
5563    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998},
5564    edition     = {1st},
5565    publisher   = {International Standard Organization},
5566    address     = {\href{https://www.iso.org/standard/25845.html}{https://\-www.iso.org/\-standard/\-25845.html}},
5567    year        = 1998,
5568}
5569
5570@manual{C++14,
5571    keywords    = {ISO/IEC C++ 14},
5572    contributer = {pabuhr@plg},
5573    key         = {C++14},
5574    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:2014},
5575    edition     = {4th},
5576    publisher   = {International Standard Organization},
5577    address     = {\href{https://www.iso.org/standard/64029.html}{https://\-www.iso.org/\-standard/\-64029.html}},
5578    year        = 2014,
5579}
5580
5581@manual{MS:VisualC++,
5582    keywords    = {Microsoft Visual C++},
5583    contributer = {pabuhr@plg},
5584    title       = {Microsoft Visual {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} .NET Language Reference},
5585    organization= {Microsoft Corporation},
5586    year        = 2002,
5587    note        = {Microsoft Press, Redmond, Washington, U.S.A.},
5588}
5589
5590@article{HasselBring00,
5591    keywords    = {concurrency, prototyping},
5592    contributer = {pabuhr@plg},
5593    author      = {Wilhelm Hasselbring},
5594    title       = {Programming Languages and Systems for Prototyping Concurrent Applications},
5595    journal     = acmcs,
5596    volume      = 32,
5597    number      = 1,
5598    month       = mar,
5599    year        = 2000,
5600    pages       = {43-79},
5601}
5602
5603@article{LLgen,
5604    keywords    = {ll(1), parser generator, separate compilation},
5605    contributer = {gjditchfield@plg},
5606    author      = {Dick Grune and Ceriel J. J. Jacobs},
5607    title       = {A Programmer-friendly LL(1) Parser Generator},
5608    journal     = spe,
5609    month       = jan, year = 1988,
5610    volume      = 18, number = 1, pages = {29-33},
5611    comment     = {
5612        LLgen generates C-language recursive-descent parsers.  The input
5613        contains procedure-like rules with alternation and repetition
5614        constructs on the right, and (typed) parameters on the left.
5615        C actions are specified between items in the right side.
5616        Alternation and repetition (reduce and shift) conflicts can be
5617        resolved statically or at run time.
5618
5619        A grammar can be specified in several files.  All files must be
5620        submitted to LLgen at once, but if the C file generated is no
5621        different from the old version, then the old version is not
5622        replaced and hence need not be recompiled, which saves lots of
5623        time.
5624
5625        When an incorrect token is found, the automatic error recovery
5626        algorithm discards tokens until an ``acceptable'' token is found;
5627        if the acceptable token is not correct, a correct one is inserted.
5628    }
5629}
5630
5631@techreport{russell,
5632    keywords    = {Russell},
5633    contributer = {gjditchfield@plg},
5634    author      = {H. Boehm and A. Demers and J. Donahue},
5635    title       = {A Programmer's Introduction to Russell},
5636    institution = {Rice University},
5637    year        = 1985,
5638    number      = {85-16}
5639}
5640
5641@techreport{PDM89,
5642    keywords    = {existential types, universal types},
5643    contributer = {gjditchfield@plg},
5644    author      = {Benjamin Pierce and Scott Dietzen and Spiro Michaylov},
5645    title       = {Programming in Higher-Order Typed Lambda Calculi},
5646    institution = {School of Computer Science, Carnegie Mellon University},
5647    year        = 1989,
5648    address     = {Pittsburg, PA 15213-3890},
5649    month       = mar, number = {CMU-CS-89-111},
5650    abstract    = {
5651        This tutorial presents a hierarchy of increasingly powerful
5652        languages, beginning with Church's simply typed
5653        \(\lambda\)-calculus (\(F_1\)) and the second-order polymorphic
5654        \(\lambda\)-calculus of Girard and Reynolds, and culminating in a
5655        fragment of Girard's \(\omega\)-order polymorphic
5656        \(\lambda\)-calculus (\(F_\omega\)).  Our focus throughout is on
5657        the unusual style of programming that arises in these languages,
5658        where all functions are total and the primary control construct is
5659        iteration rather than general recursion.
5660    }
5661}
5662
5663@book{Modula-2,
5664    keywords    = {modules, coroutines},
5665    contributer = {pabuhr},
5666    author      = {Niklaus Wirth},
5667    title       = {Programming in Modula-2},
5668    publisher   = {Springer},
5669    address     = {New York},
5670    year        = 1988,
5671    edition     = {4th},
5672    series      = {Texts and Monographs in Computer Science},
5673}
5674
5675@manual{Ada,
5676    keywords    = {Ada, packages, tasks, exceptions},
5677    contributer = {pabuhr@plg},
5678    title       = {The Programming Language {Ada}: Reference Manual},
5679    author      = {Ada},
5680    organization= {United States Department of Defense},
5681    edition     = {{ANSI/MIL-STD-1815A-1983}},
5682    month       = feb,
5683    year        = 1983,
5684    note        = {Springer, New York},
5685}
5686
5687@manual{ada:old,
5688    keywords    = {Ada, packages, tasks, exceptions},
5689    contributer = {gjditchfield@plg},
5690    title       = {The Programming Language {Ada}: Reference Manual},
5691    organization= {United States Department of Defense},
5692    publisher   = {Springer},
5693    year        = 1981
5694}
5695
5696@book{Ghezzi,
5697    keywords    = {},
5698    author      = {Carlo Ghezzi and Mehdi Jazayeri},
5699    title       = {Programming Language Concepts},
5700    publisher   = {Wiley},
5701    year        = 1982
5702}
5703
5704@article{ConcurrentPascal,
5705    keywords    = {Concurrent Pascal},
5706    contributer = {pabuhr@plg},
5707    author      = {Per {Brinch Hansen}},
5708    title       = {The Programming Language Concurrent Pascal},
5709    journal     = ieeese,
5710    volume      = 2,
5711    month       = jun,
5712    year        = 1975,
5713    pages       = {199-206}
5714}
5715
5716@phdthesis{Buhr85:thesis,
5717    keywords    = {},
5718    contributer = {pabuhr@plg},
5719    author      = {P. A. Buhr},
5720    title       = {A Programming System},
5721    school      = {University of Manitoba},
5722    year        = {1985}
5723}
5724
5725@techreport{pierce91,
5726    keywords    = {typed lambda calculus},
5727    contributer = {gjditchfield@plg},
5728    author      = {Benjamin C. Pierce},
5729    title       = {Programming with Intersection Types, Union Types, and Polymorphism},
5730    institution = {Carnegie Mellon University},
5731    year        = 1991,
5732    month       = feb, number = "CMU-CS-91-106",
5733    annote      = {
5734        Discusses a typed lambda calculus with
5735        \begin{itemize}
5736        \item
5737        Intersection types \(\tau = \tau_1\wedge\tau_2\) with \(\tau \le
5738        \tau_i\) for all \(i\).
5739        \item
5740        Union types \(\tau = \tau_1\vee\tau_2\) with \(\tau_i \le \tau\),
5741        and with implicit coercions from \(tau_i\) to \(\tau\).  Only
5742        operations valid for both element types can be applied to the
5743        union; there are no projections.  Union types are to variant
5744        records as set union is to disjoint set union.
5745        \item
5746        Function types and universal quantification, with subtyping rules.
5747        When functions and arguments intersections, the result of
5748        application is the intersection of all valid combinations.
5749        \item
5750        Distribution rules for combinations of types.
5751        \item
5752        "Union elimination": "case \(x = e\) of \(e'\)", where \(e\) is a
5753        union, has type \(\tau\) if \(e'\) has that type with \(x\) having
5754        every element type of the union.
5755        \item
5756        "Finitary quantification": "for \(t\) in \(\tau_1,\ldots,\tau_n.e\)"
5757        typechecks \(e\) with \(t\) bound to each choice, and intersects
5758        the results.
5759        \end{itemize}
5760
5761        Examples include: type of "natural" numbers, treated as a union of
5762        "zero" and "positive" types; default parameters, faked by using an
5763        argument that is an intersection of a data type and a function
5764        taking an explicit argument.
5765
5766        Unions can be mostly faked, according to Mitchell:
5767        \[\tau_1\vee\tau_2 \equiv
5768             \forall\tau.(\tau_1\on\tau)\wedge(\tau_2\on\tau)\]
5769    }
5770}
5771
5772@article{Moore75,
5773    keywords    = {approximation methods, integrated circuits},
5774    contributer = {pabuhr@plg},
5775    author      = {Gordon E. Moore},
5776    title       = {Progress in Digital Integrated Electronics},
5777    journal     = {Technical Digest, International Electron Devices Meeting, IEEE},
5778    year        = 1975,
5779    pages       = {11-13},
5780}
5781
5782@article{promises,
5783    keywords    = {futures, Argus, call streams, rpc},
5784    contributer = {gjditchfield@plg},
5785    author      = {Barbara Liskov and Liuba Shrira},
5786    title       = {Promises: Linguistic Support for Efficient Asynchronous Procedure Calls in Distributed Systems},
5787    journal     = sigplan,
5788    year        = 1988,
5789    month       = jul, volume = 23, number = 7, pages = {260-267},
5790    note        = {Proceedings of the SIGPLAN '88 Conference on Programming Language
5791         Design and Implementation},
5792    abstract    = {
5793        This paper deals with the integration of an efficient asynchronous
5794        remote procedure call mechanism into a programming language.  It
5795        describes a new data type called a {\em promise} that was designed
5796        to support asynchronous calls.  Promises allow a caller to run in
5797        parallel with a call and to pick up the results of the call,
5798        including any exceptions it raises, in a convenient and type-safe
5799        manner.  The paper also discusses efficient composition of
5800        sequences of asynchronous calls to different locations in a
5801        network.
5802    }
5803}
5804
5805@article{Cook89,
5806    keywords    = {},
5807    contributer = {gjditchfield@plg},
5808    author      = {W. R. Cook},
5809    title       = {A Proposal for Making {Eiffel} Type-safe},
5810    journal     = {The Computer Journal},
5811    year        = 1989,
5812    volume      = 32, number = 4, pages = {305-311},
5813    abstract    = {
5814       
5815    }
5816}
5817
5818@inproceedings{Foxall79,
5819    keywords    = {},
5820    contributer = {pabuhr@plg},
5821    author      = {D. G. Foxall and M. L. Joliat and R. F. Kamel and J. J. Miceli},
5822    title       = {{PROTEL}: A High Level Language for Telephony},
5823    booktitle   = {Proceedings 3rd International Computer Software and Applications Conference},
5824    month       = nov,
5825    year        = 1979,
5826    pages       = {193-197},
5827}
5828
5829@techreport{PS-Algol,
5830    keywords    = {algol, persistence},
5831    contributer = {pabuhr@plg},
5832    key         = {PS-Algol},
5833    title       = {The {PS-Algol} Reference Manual, 4th Ed.},
5834    author      = {},
5835    institution = {University of Glasgow and St. Andrews, Scotland},
5836    number      = {PPRR 12},
5837    month       = jun,
5838    year        = 1987,
5839}
5840
5841@manual{Python,
5842    keywords    = {Python},
5843    contributer = {pabuhr@plg},
5844    title       = {Python Reference Manual, Release 2.5},
5845    author      = {Guido van Rossum},
5846    organization= {Python Software Foundation},
5847    month       = sep,
5848    year        = 2006,
5849    note        = {Fred L. Drake, Jr., editor},
5850}
5851
5852% Q
5853
5854@article{Grossman06,
5855    keywords    = {Cyclone, existential types, polymorphism, type variables},
5856    contributer = {a3moss@plg},
5857    author      = {D. Grossman},
5858    title       = {Quantified Types in an Imperative Language},
5859    journal     = toplas,
5860    issue_date  = {May 2006},
5861    volume      = {28},
5862    number      = {3},
5863    month       = may,
5864    year        = 2006,
5865    issn        = {0164-0925},
5866    pages       = {429-475},
5867    url         = {http://doi.acm.org.proxy.lib.uwaterloo.ca/10.1145/1133651.1133653},
5868    doi         = {10.1145/1133651.1133653},
5869    acmid       = {1133653},
5870    publisher   = {ACM},
5871    address     = {New York, NY, USA},
5872}
5873
5874@article{Nakaike15,
5875    keywords    = {hardware transactional memory},
5876    contributer = {pabuhr@plg},
5877    author      = {Nakaike, Takuya and Odaira, Rei and Gaudet, Matthew and Michael, Maged M. and Tomari, Hisanobu},
5878    title       = {Quantitative Comparison of Hardware Transactional Memory for Blue Gene/Q, zEnterprise {EC12}, {I}ntel Core, and {POWER8}},
5879    journal     = {SIGARCH Comput. Archit. News},
5880    volume      = {43},
5881    number      = {3},
5882    month       = jun,
5883    year        = {2015},
5884    pages       = {144--157},
5885    publisher   = {ACM},
5886    address     = {New York, NY, USA},
5887}
5888
5889% R
5890
5891@article{Ada:rationale:preliminary,
5892    keywords    = {Ada},
5893    contributer = {pabuhr@plg},
5894    author      = {J. D. Ichbiah and J. C. Heliard and O. Roubine and
5895                   J. G. P. Barnes and B. Krieg-Brueckner and B. A. Wichmann},
5896    title       = {Rationale for the Design of the {ADA} Programming Language},
5897    journal     = sigplan,
5898    volume      = 14,
5899    number      = 6,
5900    month       = jun,
5901    year        = 1979,
5902    note        = {Part B},
5903}
5904
5905@book{Ada:rationale,
5906    keywords    = {Ada},
5907    contributer = {pabuhr@plg},
5908    author      = {Jean D. Ichbiah and John G. P. Barnes and Robert J. Firth and Mike Woodger},
5909    title       = {Rationale for the Design of the {ADA} Programming Language},
5910    publisher   = {Under Secretary of Defense, Research and Engineering},
5911    year        = 1986,
5912    address     = {Ada Joint Program Office, OUSDRE(R\&AT), The Pentagon, Washington, D. C., 20301, U.S.A.},
5913}
5914
5915@manual{Ada95,
5916    keywords    = {Ada},
5917    contributer = {pabuhr@plg},
5918    title       = {{A}da Reference Manual},
5919    edition     = {International Standard {ISO}/{IEC} {8652:1995(E)} with {COR.1:2000}},
5920    organization= {Intermetrics, Inc.},
5921    month       = dec,
5922    year        = 1995,
5923    note        = {Language and Standards Libraries}
5924}
5925
5926@manual{Ada12,
5927    keywords    = {ISO/IEC Ada},
5928    contributer = {pabuhr@plg},
5929    author      = {Ada12},
5930    title       = {Programming languages -- {Ada} ISO/IEC 8652:2012},
5931    edition     = {3rd},
5932    publisher   = {International Standard Organization},
5933    address     = {\href{https://www.iso.org/standard/61507.html}{https://\-www.iso.org/\-standard/\-61507.html}},
5934    year        = 2012,
5935}
5936
5937@manual{Ada95:annotated,
5938    keywords    = {Ada},
5939    contributer = {pabuhr@plg},
5940    title       = {Annotated {A}da Reference Manual},
5941    edition     = {International Standard {ISO}/{IEC} {8652:1995(E)} with {COR.1:2000}},
5942    organization = {Intermetrics, Inc.},
5943    month       = dec,
5944    year        = 1995,
5945    note        = {Language and Standards Libraries}
5946}
5947
5948@book{JavaRT00,
5949    keywords    = {real time, draft},
5950    contributer = {pabuhr@plg},
5951    author      = {Greg Bollella and Ben Brosgol and Peter Dibble and Steve Furr and James Gosling and David Hardin and Mark Turnbull},
5952    title       = {The Real-Time Specification for {J}ava},
5953    series      = {The Real-Time for Java Expert Group, {\small\textsf{http://\-www.rtj.org}}},
5954    publisher   = {Addison-Wesley},
5955    address     = {Boston},
5956