source: doc/bibliography/pl.bib @ ec92b48

aaron-thesisarm-ehcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-expr
Last change on this file since ec92b48 was ec92b48, checked in by Aaron Moss <a3moss@…>, 3 years ago

thesis: add comments on CFA formalization

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