source: doc/bibliography/pl.bib @ e255e69

aaron-thesisarm-ehcleanup-dtorsdeferred_resnenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexer
Last change on this file since e255e69 was e255e69, checked in by Peter A. Buhr <pabuhr@…>, 4 years ago

updates

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