-
Notifications
You must be signed in to change notification settings - Fork 5
/
poof.bib
1247 lines (1110 loc) · 55.7 KB
/
poof.bib
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
%%% Bibliography, roughly sorted by year of publication
% (See TODO at the end for more)
% Calls objects and attributes the things being modeled, classes their types
% Records and fields the things doing the modeling, record classes their types.
% Introduces null for partial relationships (is that the first null???)
% No inheritance, sharing of attributes, etc. Classes are mutually exclusive.
@article{hoare1965record,
title={Record handling},
author={Hoare, C.A.R.},
journal={Algol Bulletin},
volume={21},
pages={39--69},
year={1965},
url={http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-9-pdf/k-9-u2293-Record-Handling-Hoare.pdf}
}
% Simula I back in 1966 has processes and more, but DOES NOT have OO
@article{Simula1966,
author = {Dahl, Ole-Johan and Nygaard, Kristen},
title = {SIMULA: An ALGOL-Based Simulation Language},
year = {1966},
issue_date = {Sept. 1966},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {9},
number = {9},
issn = {0001-0782},
url = {https://doi.org/10.1145/365813.365819},
doi = {10.1145/365813.365819},
abstract = {This paper is an introduction to SIMULA, a programming language designed to provide a systems analyst with unified concepts which facilitate the concise description of discrete event systems. A system description also serves as a source language simulation program. SIMULA is an extension of ALGOL 60 in which the most important new concept is that of quasi-parallel processing.},
journal = {Commun. ACM},
month = {sep},
pages = {671--678},
numpages = {8}
}
% Introduces the notion of "Ad hoc polymorphism"
@Misc{Strachey67,
Author = {Christopher Strachey},
Title = {Fundamental Concepts in Programming Languages},
Year = {1967},
url = {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.332.3161},
}
% This is the one that introduces objects and prefix classes
@Misc{Simula1968,
Author = {Ole-Johan Dahl and Bjørn Myhrhaug and Kristen Nygaard},
Title = {SIMULA 67 Common Base Language},
Year = {1968},
url = {https://web.archive.org/web/20131225084408/http://www.edelweb.fr/Simula/scb-1.pdf}
}
% Identifies class with procedure that computes an algorithm and constructs a record
% and yields current values multiple times to other activities with "detach" (call again for next)
% section 6 has "concatenation" for single inheritance
@InCollection{dahl1972chapter,
title={Chapter III: Hierarchical program structures},
author={Dahl, Ole-Johan and Hoare, Charles Antony Richard},
booktitle={Structured programming},
pages={175--220},
year={1972}
}
@Article{Parnas1972,
author = {Parnas, D. L.},
title = {On the Criteria to Be Used in Decomposing Systems into Modules},
year = {1972},
issue_date = {Dec. 1972},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {15},
number = {12},
issn = {0001-0782},
url = {https://doi.org/10.1145/361598.361623},
doi = {10.1145/361598.361623},
abstract = {This paper discusses modularization as a mechanism for improving the flexibility and comprehensibility of a system while allowing the shortening of its development time. The effectiveness of a “modularization” is dependent upon the criteria used in dividing the system into modules. A system design problem is presented and both a conventional and unconventional decomposition are described. It is shown that the unconventional decompositions have distinct advantages for the goals outlined. The criteria used in arriving at the decompositions are discussed. The unconventional decomposition, if implemented with the conventional assumption that a module consists of one or more subroutines, will be less efficient in most cases. An alternative approach to implementation which does not have this effect is sketched.},
journal = {Commun. ACM},
month = {dec},
pages = {1053--1058},
numpages = {6},
keywords = {modules, software, KWIC index, modularity, software engineering, software design}
}
% https://link.springer.com/chapter/10.1007/3-540-07168-7_77
% We take the following statements to be the objectives of modular programming:
% 1. One must be able to convince himself of the correctness of a program module,
% independently of the context of its use in building larger units of software.
% 2. One must be able to conveniently put together program modules written under
% different authorities without knowledge of their inner workings.
% InBook
@Misc{Dennis1975,
author="Dennis, Jack B.",
editor="Bauer, F. L.
and Dennis, J. B.
and Waite, W. M.
and Gotlieb, C. C.
and Graham, R. M.
and Griffiths, M.
and Helms, H. J.
and Morton, B.
and Poole, P. C.
and Tsichritzis, D.",
title="Modularity",
bookTitle="Software Engineering: An Advanced Course",
year="1975",
publisher="Springer Berlin Heidelberg",
address="Berlin, Heidelberg",
pages="128--182",
isbn="978-3-540-37502-9",
doi="10.1007/3-540-07168-7_77",
url="https://doi.org/10.1007/3-540-07168-7_77"
}
% AITR-346.ps
% Uses the word prototypes and objects in a suggestive but informal way.
% The knowledge representation is a decision tree in a 3kloc LISP program
% with over a thousand COND.
% There is some notion of hierarchy and overriding/extending descriptive features,
% but not obviously one of fixed-point or self-reference; at least not discussed.
@article{hollerbach1975hierarchical,
title={Hierarchical shape description of objects by selection and modification of prototypes},
author={Hollerbach, John M},
year={1975},
url={https://dspace.mit.edu/handle/1721.1/6897}
}
@InProceedings{DeRemerKron1975,
author = {DeRemer, Frank and Kron, Hans},
title = {Programming-in-the Large versus Programming-in-the-Small},
year = {1975},
isbn = {9781450373852},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/800027.808431},
doi = {10.1145/800027.808431},
abstract = {We distinguish the activity of writing large programs from that of writing small ones. By large programs we mean systems consisting of many small programs (modules), possibly written by different people.We need languages for programming-in-the-small, i.e. languages not unlike the common programming languages of today, for writing modules. We also need a “module interconnection language” for knitting those modules together into an integrated whole and for providing an overview that formally records the intent of the programmer(s) and that can be checked for consistency by a compiler.We explore the software reliability aspects of such an interconnection language. Emphasis is placed on facilities for information hiding and for defining layers of virtual machines.},
booktitle = {Proceedings of the International Conference on Reliable Software},
pages = {114–121},
numpages = {8},
keywords = {Module interconnection language, Accessibility, Visibility, Protection, Linking, Scope of definition, Virtual machine, Project management tool., Information hiding, External name, System hierarchy},
location = {Los Angeles, California}
}
@InProceedings{Kahn1976,
author = {Kahn, Kenneth Michael},
title = {An Actor-Based Computer Animation Language},
year = {1976},
isbn = {9781450377898},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/1024273.1024278},
abstract = {This paper describes a computer language based upon actor semantics designed especially for computer graphics and animation. The thesis that animation is best facilitated by considering each entity on the display screen as an independent process is discussed and demonstrated by examples. The system is built upon MacLisp and is compatible with Lisp-Logo. The language is designed to be used by both very sophisticated programmers and by school children.},
booktitle = {Proceedings of the ACM/SIGGRAPH Workshop on User-Oriented Design of Interactive Graphics Systems},
pages = {37–43},
numpages = {7},
location = {Pittsburgh, PA},
series = {UODIGS '76},
url = {https://dspace.mit.edu/handle/1721.1/41950}
}
% Uses the word "prototypes", and has no classes. And multiple inheritance.
@InProceedings{Borning1977,
author = {Alan Hamilton Borning},
title = {{ThingLab} --- an Object-Oriented System for Building Simulations using Constraints},
booktitle={5th International Conference on Artificial Intelligence},
pages={497--498},
month = {August},
year = {1977},
url = {https://www.ijcai.org/Proceedings/77-1/Papers/085.pdf}
}
@PhDThesis{Borning1979,
author = {Borning, Alan Hamilton},
title = {{ThingLab} --- A Constraint-Oriented Simulation Laboratory},
biburl = {https://www.bibsonomy.org/bibtex/263cae088243a5fd341d7d634d8176bb3/n770},
publisher = {Palo Alto Research Center XEROX},
url = {https://constraints.cs.washington.edu/ui/thinglab-tr.pdf},
school = {Stanford University},
year = 1979
}
% This paper is about the higher-level system Ani, that generates plans for Director.
% Director is the actor-based system with turtle graphics
% (see Director Guide, AIM-482b, 1978 revised 1979),
% while Ani is a constraint solver based on a knowledge representation of the film being directed:
% very crude 2d film with polygons as "performers" that move toward, away from,
% around or between each other, at various speeds appropriate for the action,
% as would humans on a stage.
@PhDThesis{Kahn1979,
title = {Creation of computer animation from story descriptions},
author = {Kahn, Kenneth Michael},
school = {MIT},
year = {1979},
url = {https://dspace.mit.edu/handle/1721.1/16012}
}
% http://worrydream.com/refs/Borning%20-%20The%20Programming%20Language%20Aspects%20of%20ThingLab.pdf
% https://dl.acm.org/doi/abs/10.1145/357146.357147
@Article{Borning1981,
author = {Borning, Alan Hamilton},
title = {The Programming Language Aspects of ThingLab, a Constraint-Oriented Simulation Laboratory},
year = {1981},
issue_date = {Oct. 1981},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {3},
number = {4},
issn = {0164-0925},
url = {https://doi.org/10.1145/357146.357147},
doi = {10.1145/357146.357147},
journal = {ACM Trans. Program. Lang. Syst.},
month = oct,
pages = {353--387},
numpages = {35}
}
% Norman I. Adams, IV -- but the IV doesn't get processed correctly
% Can't find it on http://mumble.net/~jar/tproject/
@InProceedings{Rees82t:a,
author = {Jonathan A. Rees and Norman I. Adams},
title = {T: a dialect of LISP or, Lambda: the ultimate software tool},
booktitle = {Symposium on Lisp and Functional Programming, ACM},
pages = {114--122},
year = {1982},
url = {https://www.researchgate.net/publication/221252249_T_a_dialect_of_Lisp_or_LAMBDA_The_ultimate_software_tool}
}
% Borning1982 cites a 1980 version of the Flavors report, from MIT
% Also a 1982 version of LOOPS
@Misc{Cannon82,
title={Flavors: A non-hierarchical approach to object-oriented programming},
author={Howard Cannon},
publisher={Symbolics Inc.},
year=1982,
url={https://www.softwarepreservation.org/projects/LISP/MIT/nnnfla1-20040122.pdf}
}
% After discussing multiple inheritance informally, omits it completely from the formal treatment,
% but does introduce a framework for subtyping of a lambda-calculus with records and fixed-points.
@InProceedings{Cardelli1984ASO,
title={A Semantics of Multiple Inheritance},
author={Luca Cardelli},
booktitle={Information and Computation},
year={1984},
url={https://api.semanticscholar.org/CorpusID:13032155}
}
@InProceedings{Lieberman1986,
title={Using Prototypical Objects to Implement Shared Behavior in Object-Oriented Systems},
author={Henry Lieberman},
booktitle={OOPLSA},
pages={214--223},
year={1986},
url={https://homepages.cwi.nl/~storm/teaching/reader/Lieberman86.pdf}
}
@InProceedings{Borning1986,
title={Classes Versus Prototypes in Object-Oriented Languages},
author={Alan Hamilton Borning},
booktitle={1986 Fall Joint Computer Conference},
pages={36--40},
year={1986},
doi={10.5555/324493.324538},
}
% Also a 1985 report
@InProceedings{bobrow86commonloops,
title={CommonLoops: Merging Lisp and Object-Oriented Programming},
author={Daniel G. Bobrow and Kenneth Kahn and Gregor Kiczales and Larry Masinter and Mark Stefyk and Frank Zdybel},
booktitle={OOPSLA},
year={1986},
doi={10.1145/28697.28700}
}
% https://beta.cs.au.dk/ ?
@article{kristensen1987beta,
title={The BETA programming language},
author={Kristensen, Bent Bruun and Madsen, Ole Lehrmann and Møller-Pedersen, Birger and Nygaard, Kristen},
journal={DAIMI Report Series},
number={229},
year={1987},
url={https://www.semanticscholar.org/paper/The-BETA-Programming-Language-Kristensen-Madsen/3971897f708518e13809d3c0772105bd86526e50}
}
@Article{bobrow88clos,
title={Common Lisp Object Specification X3J13},
author={D. G. Bobrow and L. D. DeMichiel and R. P. Gabriel and S. E. Kleene and G. Kiczales and D. A. Moon},
journal={SIGPLAN Notices 23 (Special Issue)},
year={1988},
doi={10.1007/bf01806962},
url={https://link.springer.com/content/pdf/10.1007/bf01806962.pdf}
}
@InProceedings{Kamin1988,
title={Inheritance in Smalltalk-80: A Denotational Definition},
author={Samuel N. Kamin},
%booktitle={POPL '88},
booktitle={POPL},
year={1988},
doi={10.1145/73560.73567},
%url={https://dl.acm.org/doi/10.1145/73560.73567}
}
% https://core.ac.uk/download/pdf/42828491.pdf
@InProceedings{ObjectsAsClosures,
author = {Reddy, Uday},
title = {Objects as Closures - Abstract Semantics of Object Oriented Languages},
%booktitle = {ACM Symposium on LISP and Functional Programming},
booktitle = {LFP},
%month = {02},
pages = {289–-297},
doi = {10.1145/62678.62721},
year = {1988},
}
@InProceedings{adams88oopscheme,
Author = {Norman Adams and Jonathan Rees},
Title = {Object-Oriented Programming in Scheme},
url = "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.954",
%booktitle = {ACM Conference on Lisp and Functional Programming},
booktitle = {LFP},
pages = {277--288},
Year = {1988}
}
% POPL, short reprise of what's in his thesis
% Also single-inheritance, records only
@article{cook1989denotational,
title={A denotational semantics of inheritance and its correctness},
author={Cook, William and Palsberg, Jens},
journal={ACM Sigplan Notices},
volume={24},
number={10},
pages={433--443},
year={1989},
publisher={ACM New York, NY, USA}
}
@InProceedings{cook1989inheritance,
title={Inheritance is not subtyping},
author={Cook, William R and Hill, Walter and Canning, Peter S},
%booktitle={Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
booktitle={POPL},
pages={125--135},
year={1989}
}
@InProceedings{chambers1989efficient,
author = {Chambers, C. and Ungar, D. and Lee, E.},
title = {An Efficient Implementation of SELF a Dynamically-Typed Object-Oriented Language Based on Prototypes},
year = {1989},
isbn = {0897913337},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/74877.74884},
doi = {10.1145/74877.74884},
abstract = {We have developed and implemented techniques that double the performance of dynamically-typed object-oriented languages. Our SELF implementation runs twice as fast as the fastest Smalltalk implementation, despite SELF's lack of classes and explicit variables.To compensate for the absence of classes, our system uses implementation-level maps to transparently group objects cloned from the same prototype, providing data type information and eliminating the apparent space overhead for prototype-based systems. To compensate for dynamic typing, user-defined control structures, and the lack of explicit variables, our system dynamically compiles multiple versions of a source method, each customized according to its receiver's map. Within each version the type of the receiver is fixed, and thus the compiler can statically bind and inline all messages sent to self. Message splitting and type prediction extract and preserve even more static type information, allowing the compiler to inline many other messages. Inlining dramatically improves performance and eliminates the need to hard-wire low-level methods such as +,==, and ifTrue:.Despite inlining and other optimizations, our system still supports interactive programming environments. The system traverses internal dependency lists to invalidate all compiled methods affected by a programming change. The debugger reconstructs inlined stack frames from compiler-generated debugging information, making inlining invisible to the SELF programmer.},
booktitle = {OOPSLA},
pages = {49–70},
numpages = {22},
location = {New Orleans, Louisiana, USA}
}
@PhDThesis{Cook1989,
author = {William R. Cook},
title = {A Denotational Semantics of Inheritance},
school = {Brown University},
year = {1989},
url = {https://www.cs.utexas.edu/~wcook/papers/thesis/cook89.pdf}
}
% Not obviously worth citing in this context?
% @TechReport ?
@Misc{Lawall89SelfInScheme,
Author = {Julia L. Lawall and Daniel P. Friedman},
Title = {Embedding the Self Language in Scheme},
url = "https://legacy.cs.indiana.edu/ftp/techreports/TR276.pdf",
Year = {1989}
}
% Introduction of Typeclasses
% https://www.research.ed.ac.uk/en/publications/how-to-make-ad-hoc-polymorphism-less-ad-hoc
@InProceedings{typeclasses,
title = "How to make ad-hoc polymorphism less ad hoc",
abstract = "This paper presents type classes, a new approach to ad-hoc polymorphism. Type classes permit overloading of arithmetic operators such as multiplication, and generalise the {"}eqtype variables{"} of Standard ML. Type classes extend the Hindley/Milner polymorphic type system, and provide a new approach to issues that arise in object-oriented programming, bounded type quantification, and abstract data types. This paper provides an informal introduction to type classes, and defines them formally by means of type inference rules. ",
author = "P. Wadler and S. Blott",
year = "1989",
doi = "10.1145/75277.75283",
language = "English",
isbn = "0-89791-294-2",
pages = "60--76",
%booktitle = "POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages",
booktitle = "POPL",
publisher = "ACM"
}
% https://www.semanticscholar.org/paper/Mixin-based-inheritance-Bracha-Cook/cbc4f2d93bb62d1c287f4fe458de6ac416379282
% url = {https://doi.org/10.1145/97945.97982},
@InProceedings{bracha1990mixin,
author = {Bracha, Gilad and Cook, William},
title = {Mixin-Based Inheritance},
year = {1990},
issue_date = {Oct. 1990},
isbn = {0897914112},
volume = {25},
number = {10},
issn = {0362-1340},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://bracha.org/oopsla90.pdf},
doi = {10.1145/97945.97982},
abstract = {The diverse inheritance mechanisms provided by Smalltalk, Beta, and CLOS are interpreted as different uses of a single underlying construct. Smalltalk and Beta differ primarily in the direction of class hierarchy growth. These inheritance mechanisms are subsumed in a new inheritance model based on composition of mixins, or abstract subclasses. This form of inheritance can also encode a CLOS multiple-inheritance hierarchy, although changes to the encoded hierarchy that would violate encapsulation are difficult. Practical application of mixin-based inheritance is illustrated in a sketch of an extension to Modula-3.},
booktitle = {OOPLSA/ECOOP},
pages = {303–311},
numpages = {9},
location = {Ottawa, Canada},
journal = {SIGPLAN Not.},
month = sep
}
% Original DEFSYSTEM is a 1990 paper, but hard to find independently from the others.
@TechReport{kantrowitz1991,
author = {Mark Kantrowitz},
title = {Portable Utilities for {C}ommon {L}isp},
institution = {School of Computer Science, Carnegie-Mellon University},
number = {CMU-CS-91-143},
year = 1991,
month = May,
url = {https://cl-pdx.com/static/CMU-CS-91-143.pdf}
}
@Article{gabriel1991clos,
title={CLOS: Integrating object-oriented and functional programming},
author={Gabriel, Richard P and White, Jon L and Bobrow, Daniel G},
journal={Communications of the ACM},
volume={34},
number={9},
pages={29--38},
year={1991},
publisher={ACM New York, NY, USA}
}
@Book{amop,
Title={The {A}rt of the {M}eta-{O}bject {P}rotocol},
Author={Kiczales, Gregor and Des Rivières, Jim and Bobrow, Daniel Gureasko},
Year={1991},
Publisher={MIT press},
url={https://direct.mit.edu/books/book/2607/The-Art-of-the-Metaobject-Protocol}
}
@InProceedings{Ungar91organizingprograms,
Title = {Organizing Programs Without Classes},
author = {David Ungar and Craig Chambers and Bay-Wei Chang and Urs Hölzle},
journal = {Lisp and Symbolic Computation},
year = {1991},
pages = {223--242},
publisher = {Kluwer Academic Publishers}
}
@TechReport{eppl91,
Author={Matthias Felleisen},
Title={On the Expressive Power of Programming Languages},
Institution={Rice University},
Year={1991},
url={https://www.cs.rice.edu/CS/PLT/Publications/Scheme/}
}
@InProceedings{CecilMultimethods,
author="Chambers, Craig",
editor="Madsen, Ole Lehrmann",
title="Object-oriented multi-methods in Cecil",
booktitle="ECOOP",
year="1992",
publisher="Springer Berlin Heidelberg",
address="Berlin, Heidelberg",
pages="33--56",
abstract="Multiple dispatching provides increased expressive power over single dispatching by guiding method lookup using the values of all arguments instead of only the receiver. However, existing languages with multiple dispatching do not encourage the data-abstraction-oriented programming style that is encouraged by traditional single-dispatching languages; instead existing multiple-dispatching languages tend to foster a function-oriented programming style organized around generic functions. We propose an alternative view of multiple dispatching that is intended to promote a data-abstraction-oriented programming style. Instead of viewing a multi-method as ``outside'' of all objects, we view a multi-method as ``inside'' the objects for which the multi-method applies (on which it dispatches). Because objects are closely connected to the multi-methods implementing their operations, the internals of an object can be encapsulated by being accessible only to the closely-connected multi-methods. We are exploring this object-oriented view of multi-methods in the context of a new programming language named Cecil.",
isbn="978-3-540-47268-1",
url="http://www.laputan.org/pub/papers/cecil-ecoop-92.pdf"
}
@PhDThesis{bracha1992jigsaw,
author = {Gilad Bracha},
title = {The Programming Language Jigsaw: Mixins, Modularity and Multiple Inheritance},
school = {University of Utah},
year = {1992},
url = {http://www.bracha.org/jigsaw.pdf}
}
@Article{dickey1992scheming,
title={Scheming with objects},
author={Dickey, Ken},
url={http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/scheme/oop/yasos/swob.txt},
journal={AI Expert},
volume={7},
number={10},
pages={24--33},
year={1992}
}
@InProceedings{chambers92objectoriented,
author = {Craig Chambers},
title = {Object-oriented multi-methods in Cecil},
booktitle = {ECOOP},
volume = "615",
publisher = "Springer-Verlag",
address = "Berlin, Heidelberg, New York, Tokyo",
editor = "Ole Lehrmann Madsen",
isbn = "3-540-55668-0",
pages = "33--56",
year = "1992",
url = "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.121.134"
}
% http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.3952
@InProceedings{ImplementingTypeClasses,
title = "Implementing Type Classes",
author = "John Peterson and Mark Jones",
booktitle = "Proceedings of ACM SIGPLAN Symposium on Programming Language Design and Implementation",
year = "1993",
url = "http://web.cecs.pdx.edu/~mpj/pubs/pldi93.html",
publisher = {Elsevier Science},
}
% Traces (A cut at the “make isn't generic” problem)
% Gregor Kiczales
% 1993
% https://link.springer.com/chapter/10.1007/3-540-57342-9_64
@InProceedings{10.1007/3-540-57342-9_64,
author="Kiczales, Gregor",
editor="Nishio, Shojiro
and Yonezawa, Akinori",
title="Traces (A cut at the ``make isn't generic'' problem)",
booktitle="Object Technologies for Advanced Software",
year="1993",
publisher="Springer Berlin Heidelberg",
address="Berlin, Heidelberg",
pages="27--42",
abstract="Object-oriented techniques are a powerful tool for making a system end-programmer specializable. But, in cases where the system not only accepts objects as input, but also creates objects internally, specialization has been more difficult. This has been referred to as the ``make isn't generic problem.'' We present a new object-oriented language concept, called traces, that we have used successfully to support specialization in cases that were previously cumbersome.",
isbn="978-3-540-48075-4"
}
% https://api.semanticscholar.org/CorpusID:16832709
% University of Illinois at Urbana-Champaign
% October 4, 1993
@InProceedings{Kamin1994TwoSM,
title={Two semantic models of object-oriented languages},
author={Samuel N. Kamin and Uday S. Reddy},
year={1994},
url={https://www.cs.bham.ac.uk/~udr/papers/oosem.pdf}
}
@Article{Cook1994,
title={A Denotational Semantics of Inheritance and Its Correctness},
author={W. Cook and J. Palsberg},
journal={Information and Computation},
year={1994},
volume={114},
pages={329--350},
url = {https://www.cs.utexas.edu/~wcook/papers/ic94/ic94.pdf}
}
% W7
% and Sussman, Gerald Jay ???
@PhDThesis{rees1995,
author = {Rees, Jonathan Allen},
title = {A Security Kernel Based on the Lambda Calculus},
year = {1995},
publisher = {Massachusetts Institute of Technology},
school = {Massachusetts Institute of Technology},
address = {USA},
url = {http://mumble.net/~jar/pubs/secureos/},
abstract = {Cooperation between independent agents depends upon establishing a degree of security. Each of the cooperating agents needs assurance that the cooperation will not endanger resources of value to that agent. In a computer system, a computational mechanism can assure safe cooperation among the system's users by mediating resource access according to desired security policy. Such a mechanism, which is called a security kernel, lies at the heart of many operating systems and programming environments. The dissertation describes Scheme 48, a programming environment whose design is guided by established principles of operating system security. Scheme 48's security kernel is small, consisting of the call-by-value $lambda$-calculus with a few simple extensions to support abstract data types, object mutation, and access to hardware resources. Each agent (user or subsystem) has a separate evaluation environment that holds objects representing privileges granted to that agent. Because environments ultimately determine availability of object references, protection and sharing can be controlled largely by the way in which environments are constructed.I will describe experience with Scheme 48 that shows how it serves as a robust and flexible experimental platform. Two successful applications of Scheme 48 are the programming environment for the Cornell mobile robots, where Scheme 48 runs with no (other) operating system support; and a secure multi-user environment that runs on workstations. (Copies available exclusively from MIT Libraries, Rm. 14-0551, Cambridge, MA 02139-4307. Ph. 617-253-5668; Fax 617-253-1690.)},
note = {AAI0576129}
}
% The C3 superclass linearization algorithm
@InProceedings{Barrett96amonotonic,
author = {Kim Barrett and Bob Cassels and Paul Haahr and David A. Moon and Keith Playford and P. Tucker Withington},
title = {A Monotonic Superclass Linearization for Dylan},
journal={OOPSLA},
month = {oct},
pages = {69–82},
numpages = {14},
year = {1996},
booktitle = {OOPSLA},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/236337.236343},
%url = {https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.3910},
}
@article{inheritance1996,
author = {Taivalsaari, Antero},
title = {On the Notion of Inheritance},
year = {1996},
issue_date = {Sept. 1996},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {28},
number = {3},
issn = {0360-0300},
url = {https://doi.org/10.1145/243439.243441},
doi = {10.1145/243439.243441},
abstract = {One of the most intriguing—and at the same time most problematic—notions in object-oriented programing is inheritance. Inheritance is commonly regarded as the feature that distinguishes object-oriented programming from other modern programming paradigms, but researchers rarely agree on its meaning and usage. Yet inheritance of often hailed as a solution to many problems hampering software development, and many of the alleged benefits of object-oriented programming, such as improved conceptual modeling and reusability, are largely credited to it. This article aims at a comprehensive understanding of inheritance, examining its usage, surveying its varieties, and presenting a simple taxonomy of mechanisms that can be seen as underlying different inheritance models.},
journal = {ACM Comput. Surv.},
month = {sep},
pages = {438--479},
numpages = {42},
keywords = {object-oriented programming, language constructs, delegation, inheritance, incremental modification, programming languages}
}
@Book{Abadi97atheory,
author = {Martín Abadi and Luca Cardelli},
title = {A theory of objects},
year = {1997},
doi = {10.1007/978-1-4419-8598-9}
}
@InProceedings{aop97,
author = {Kiczales, G. and Lamping, J. and Mendhekar, A. and Maeda, C. and Lopes, C. and Loingtier, J. M. and Irwin, J.},
title = {Aspect-oriented programming},
booktitle = {ECOOP},
pages = {220--242},
year = {1997}
}
% CBPV
@InProceedings{conf/tlca/Levy99,
title = {Call-by-Push-Value: A Subsuming Paradigm},
year = {1999},
author = {Blain Levy, Paul},
publisher = {Springer},
booktitle = {Typed Lambda Calculi and Applications, 4th International Conference, TLCA'99, L'Aquila, Italy, April 7-9, 1999, Proceedings},
doi = {10.5555/645894.671755},
}
@Misc{ecmascript,
title={ECMAScript Language Specification},
author={ECMA, Final Draft},
year={1999}
}
@InProceedings{SullivanGriswoldCaiHallen2001,
author = {Sullivan, Kevin J. and Griswold, William G. and Cai, Yuanfang and Hallen, Ben},
title = {The Structure and Value of Modularity in Software Design},
year = {2001},
isbn = {1581133901},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/503209.503224},
doi = {10.1145/503209.503224},
abstract = {The concept of information hiding modularity is a cornerstone of modern software design thought, but its formulation remains casual and its emphasis on changeability is imperfectly related to the goal of creating added value in a given context. We need better explanatory and prescriptive models of the nature and value of information hiding. We evaluate the potential of a new theory---developed to account for the influence of modularity on the evolution of the computer industry---to inform software design. The theory uses design structure matrices to model designs and real options techniques to value them. To test the potential utility of the theory for software we apply it to Parnas's KWIC designs. We contribute an extension to design structure matrices, and we show that the options results are consistent with Parnas's conclusions. Our results suggest that such a theory does have potential to help inform software design.},
booktitle = {Proceedings of the 8th European Software Engineering Conference Held Jointly with 9th ACM SIGSOFT International Symposium on Foundations of Software Engineering},
pages = {99–108},
numpages = {10},
keywords = {real options, design structure matrix, modularity, software},
location = {Vienna, Austria},
series = {ESEC/FSE-9}
}
% See notably chapter 32.
% downloaded from https://www.cs.sjtu.edu.cn/~kzhu/cs383/Pierce_Types_Programming_Languages.pdf
% This post claims that TAPL introduces the term "Open Recursion" https://journal.stuffwithstuff.com/2013/08/26/what-is-open-recursion/
@Book{tapl,
Author = {Pierce, Benjamin C.},
Title = {Types and Programming Languages},
Year = {2002},
ISBN = {0262162091},
Publisher = {MIT Press},
Edition = {1st},
url = {https://www.cis.upenn.edu/~bcpierce/tapl/}
}
% https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=693f61d2515ac9b032801dd7a603c34f1b725071
% Wrongly claims that multidispatch forgoes modular typechecking
% Has no definition of modularity, except maybe for typechecking
@phdthesis{millstein2003reconciling,
title={Reconciling software extensibility with modular program reasoning},
author={Millstein, Todd David},
year={2003},
school={University of Washington},
doi={10.5555/997550},
url={https://web.cs.ucla.edu/~todd/research/dissertation.pdf}
}
@InProceedings{Salzman05prototypeswith,
author = {Lee Salzman and Jonathan Aldrich},
title = {Prototypes with multiple dispatch: An expressive and dynamic object model},
booktitle = {ECOOP},
year = {2005}
}
@article{scalableComponentAbstractions,
author = {Odersky, Martin and Zenger, Matthias},
title = {Scalable component abstractions},
year = {2005},
issue_date = {October 2005},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {40},
number = {10},
issn = {0362-1340},
%url = {https://doi.org/10.1145/1103845.1094815},
url = {http://lampwww.epfl.ch/~odersky/papers/ScalableComponent.pdf},
doi = {10.1145/1103845.1094815},
abstract = {We identify three programming language abstractions for the construction of reusable components: abstract type members, explicit selftypes, and modular mixin composition. Together, these abstractions enable us to transform an arbitrary assembly of static program parts with hard references between them into a system of reusable components. The transformation maintains the structure of the original system. We demonstrate this approach in two case studies, a subject/observer framework and a compiler front-end.},
journal = {SIGPLAN Not.},
month = {oct},
pages = {41--57},
numpages = {17},
keywords = {Scala, abstract types, classes, components, mixins},
isbn = {1595930310},
%booktitle = {Proceedings of the 20th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications},
%%booktitle = {OOPSLA '05},
booktitle = {OOPSLA},
location = {San Diego, CA, USA},
series = {OOPSLA '05}
}
% https://www.semanticscholar.org/paper/Classes-and-mixins-Flatt-Krishnamurthi/c20e5f2a424b96209e6b400b23d319558932afa3
@InProceedings{Flatt06schemewith,
author = {Matthew Flatt and Robert Bruce Findler and Matthias Felleisen},
title = {Scheme with classes, mixins, and traits},
booktitle = {In Asian Symposium on Programming Languages and Systems (APLAS) 2006},
year = {2006},
pages = {270--289},
url = {https://www2.ccs.neu.edu/racket/pubs/asplas06-fff.pdf}
}
@InProceedings{BruceCardelliPierce2006,
author = {Kim B. Bruce and Luca Cardelli and Benjamin C. Pierce},
title = {Comparing Object Encodings},
booktitle = {Journal of Functional Programming},
volume = {16},
pages = {375-–414},
year = {2006},
}
% http://citeseerx.ist.psu.edu/viewdoc/similar?doi=10.1.1.211.6777&type=cc
% NB: Extended version of the seminal 2005 TOPLAS paper.
% For a history of lenses, see Jules Hedges' https://julesh.com/2018/08/16/lenses-for-philosophers/
@Article{Foster2007CombinatorsFB,
title={Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem},
author={Nate Foster and M. Greenwald and J. T. Moore and B. Pierce and A. Schmitt},
journal={ACM Trans. Program. Lang. Syst.},
year={2007},
volume={29},
url={https://www.cis.upenn.edu/~bcpierce/papers/lenses-full.pdf}
}
% Master Thesis
@TechReport{gclviewer2008,
Author = "Ibrahim Bokharouss",
Title = "GCL Viewer: a study in improving the understanding of GCL programs",
Institution = {Eindhoven University of Technology},
year = 2008,
url = {https://research.tue.nl/en/studentTheses/gcl-viewer}
}
% https://pure.tue.nl/ws/portalfiles/portal/46927079/638953-1.pdf
@InProceedings{dolstra2008nixos,
title={NixOS: A purely functional Linux distribution},
author={Dolstra, Eelco and L{\"o}h, Andres},
booktitle={Proceedings of the 13th ACM SIGPLAN international conference on Functional programming},
pages={367--378},
year={2008},
url={https://edolstra.github.io/pubs/nixos-jfp-final.pdf}
}
% April 2
@Misc{minsky08,
author = {Yaron Minsky},
title = {The {ML} sweet spot},
year = 2008,
url = {https://blog.janestreet.com/the-ml-sweet-spot/},
urldate = {2021-03-14}
}
@InProceedings{allen2011type,
title={Type checking modular multiple dispatch with parametric polymorphism and multiple inheritance},
author={Allen, Eric and Hilburn, Justin and Kilpatrick, Scott and Luchangco, Victor and Ryu, Sukyoung and Chase, David and Steele, Guy},
booktitle={OOPSLA},
pages={973--992},
year={2011},
url={https://people.mpi-sws.org/~skilpat/papers/multipoly.pdf}
}
% EOPL only has classes with single inheritance.
% barely touches multiple inheritance, "powerful, but … problematic", in exercise 9.26,
% and prototypes in exercise 9.27-9.29
@book{eopl3,
author = {Friedman, Daniel P. and Haynes, Christopher T. and Wand, Mitchell},
title = {Essentials of Programming Languages (3rd Ed.)},
year = {2008},
publisher = {Massachusetts Institute of Technology},
address = {USA},
url = {https://www.eopl3.com/}
}
% PLAI 1st ed has objects as closures and even prototypes in ch 10.
% 10.3.3 shits on multiple inheritance.
% 10.3.5 introduces mixins as a mechanism on top of first-class single-inheritance classes.
@book{plai,
author = {Shriram Khrisnamurthi},
title = {Programming Languages: Application and Interpretation (1st Ed.)},
year = {2008},
publisher = {Massachusetts Institute of Technology},
address = {USA},
url = {https://plai.org/},
}
@InProceedings{Brown_functioninheritance:,
author = {Daniel Brown and William R. Cook},
title = {Function Inheritance: Monadic Memoization Mixins},
booktitle = {Brazilian Symposium on Programming Languages},
year = {2009},
}
% Unpublished
@Misc{MonadsMixins,
title = "The Different Aspects of Monads and Mixins",
author = "Oliveira, Bruno C. d. S.",
year = {2009},
url = {http://ropas.snu.ac.kr/%7Ebruno/papers/MixinAspects.pdf},
}
@InProceedings{Oliveira10effectiveadvice,
author = {Oliveira, Bruno C. d. S. and Schrijvers, Tom and Cook, William R.},
title = {EffectiveAdvice: disciplined advice with explicit effects},
booktitle = {AOSD’10: 9th International Conference on Aspect-Oriented Software Development},
pages = {109--120},
year = {2010}
}
% Why won't InProceedings work in eoo* ?
@InProceedings{ASDF2,
author = {François-René Rideau and Robert Goldman},
title = {Evolving ASDF: More Cooperation, Less Coordination},
year = {2010},
booktitle = {International Lisp Conference},
url = {http://common-lisp.net/project/asdf/doc/ilc2010draft.pdf}
}
@Misc{OOP2010,
title={Ralph Johnson, Joe Armstrong on the State of OOP (Interview at QCon)},
author={Ralph Johnson and Joe Armstrong},
year={2010},
url={https://www.infoq.com/interviews/johnson-armstrong-oop/}
}
@InProceedings{LIL2012,
author = {François-René Rideau},
title = {{LIL}: {CLOS} ~ Reaches Higher-Order, Sheds Identity and has a Transformative Experience},
url = "http://github.com/fare/lil-ilc2012/",
booktitle = {International Lisp Conference},
year = 2012
}
@Misc{jsonnet,
author = {Dave Cunningham},
title = {Jsonnet},
year = 2014,
url = {https://jsonnet.org},
urldate = {2021-03-11}
}
@Book{EcmaScript:15,
added-at = {2015-08-28T15:36:26.000+0200},
address = {Geneva},
author = {{Ecma International}},
biburl = {https://www.bibsonomy.org/bibtex/28d67e2ebf933f3b6f684fcfb1f53b020/gron},
edition = {6th},
interhash = {8212a5bb4b7ac3137534f10d599cb526},
intrahash = {8d67e2ebf933f3b6f684fcfb1f53b020},
keywords = {JavaScript spec specification},
month = {June},
timestamp = {2015-08-28T15:37:30.000+0200},
title = {{ECMAScript 2015 Language Specification}},
url = {http://www.ecma-international.org/ecma-262/6.0/ECMA-262.pdf},
year = 2015
}
@Misc{nix2015,
title={Nixpkgs fixed-points library},
author={Peter Simons},
url={https://github.com/NixOS/nixpkgs/blob/master/lib/fixed-points.nix},
year={2015},
urldate={2023-11-29}
}
% This article is great in desugaring the prototype sublanguage of JS,
% but doesn't cover classes.
@Article{DBLP:journals/corr/GuhaSK15,
author = {Arjun Guha and
Claudiu Saftoiu and
Shriram Krishnamurthi},
title = {The Essence of JavaScript},
journal = {CoRR},
volume = {abs/1510.00925},
year = {2015},
url = {http://arxiv.org/abs/1510.00925},
archivePrefix = {arXiv},
eprint = {1510.00925},
timestamp = {Mon, 13 Aug 2018 16:46:22 +0200},
biburl = {https://dblp.org/rec/journals/corr/GuhaSK15.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@Misc{ngnghm9,
author = {François-René Rideau},
title = {Build Systems and Modularity},
year = 2016,
url = {https://ngnghm.github.io/blog/2016/04/26/chapter-9-build-systems-and-modularity/},
urldate = {2023-11-29}
}
@Article{Pickering_2017,
title={Profunctor Optics: Modular Data Accessors},
volume={1},
ISSN={2473-7321},
url={http://dx.doi.org/10.22152/programming-journal.org/2017/1/7},
DOI={10.22152/programming-journal.org/2017/1/7},
number={2},
journal={The Art, Science, and Engineering of Programming},
publisher={Aspect-Oriented Software Association (AOSA)},
author={Pickering, Matthew and Gibbons, Jeremy and Wu, Nicolas},
year={2017},
month={Apr}
}
% Withhold citation until after deanomization
@Misc{GerbilPOOwithheld,
author = {Author withheld},
title = {Title withheld},
url = {https://github.com/repository/withheld},
year = 2020
}
@Misc{GerbilPOO,
author = {François-René Rideau},
title = {Gerbil-POO},
year = 2020,
url = {https://github.com/fare/gerbil-poo},
urldate = {2021-04-06}
}
@Misc{Kay2020,
title={What thought process would lead one to invent Object-Oriented Programming?},
author={Alan Kay},
year={2020},
url={https://www.quora.com/What-thought-process-would-lead-one-to-invent-object-oriented-programming/answer/Alan-Kay-11}
}
% Maybe cite the last episode of this story instead, that explains the concept?
% https://en.wikipedia.org/wiki/Earthshock
% On citing TV series:
% https://www.easybib.com/guides/citation-guides/how-do-i-cite-a/how-to-cite-movie-tv-netflix/
@Misc{DrWhoFPIT,
author = {Unknown},
title = {Fixed Point in Time},
year = 2021,
url = {https://tardis.fandom.com/wiki/Fixed_point_in_time},
urldate = {2021-03-14}
}
@Misc{WikiC3,
title = "C3 linearization",
author = "Wikipedia",
year = 2021,
url = {https://en.wikipedia.org/wiki/C3_linearization},
}
@InProceedings{poof2021,
title = {Prototypes: Object-Orientation, Functionally},
author = {François-René Rideau and Alex Knauth and Nada Amin},
year = {2021},
booktitle = {Scheme and Functional Programming Workshop},
url = {https://github.com/metareflection/poof},
}
@Misc{POP2021,
author = {François-René Rideau},
title = {Pure Object Prototypes},
url = {https://github.com/divnix/POP},
year = {2021}
}
@Misc{TopPL2022,
author = {GitHub},
title = {The top programming languages},
url = {https://octoverse.github.com/2022/top-programming-languages},
year = 2022,
note = "[accessed 2024-01-04]"
}
%%% TODO: Add the following...