source: doc/bibliography/pl.bib @ 2260ab6c

ADTaaron-thesisarm-ehcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since 2260ab6c was b199e54, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

first complete draft

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