source: doc/bibliography/pl.bib @ 1dc58fd

aaron-thesisarm-ehcleanup-dtorsdeferred_resndemanglerjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerwith_gc
Last change on this file since 1dc58fd was 1dc58fd, checked in by Peter A. Buhr <pabuhr@…>, 4 years ago

more writing

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