source: doc/bibliography/pl.bib @ 9805dd0

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resnenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprno_listpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since 9805dd0 was 9805dd0, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

update bibliography for NSERC

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