source: doc/bibliography/pl.bib @ 57b0b1f

ADTaaron-thesisarm-ehcleanup-dtorsdeferred_resnenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since 57b0b1f was 57b0b1f, checked in by Aaron Moss <a3moss@…>, 5 years ago

Described persistent union-find in thesis

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