-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathREADME
75 lines (60 loc) · 3.36 KB
/
README
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
This directory contains source code for students to use with the
book *Programming Languages: Build, Prove, and Compare*.
This distribution does *not* include solutions to many exercises
(garbage collection, type checking, unification, etc), so the
interpreters are incomplete. Binary code for complete interpreters
should be available from your instructor.
The interpreters, which are written in C and in ML, are available in
two flavors.
* The `bare' flavor is bare, uncommented code extracted from the
book. Code chunks are marked with their name and page numbers
using comments in the code.
* The `commented' flavor is the same code, also extracted from the
book, but with comments taken from the book. These comments are
extracted automatically, so the results aren't always what you
would hope for, but some people may find them useful.
Both flavors of code have been forced to fit into 80 columns using
automated techniques, which sometimes split lines that are not split
in the book. Some lines of code, particularly in the garbage
collector, contain a comment like /* OMIT */. This comment marks code
that would be distracting to include in the book text but which may be
useful for doing some of the problems.
Each of the two flavors appears in a directory of the same name, and
each of these directories contains one subdirectory per interpreter.
impcore Impcore (Chapter 1)
nml nano-ML (Chapter 7)
timpcore Typed Impcore (Chapter 6)
tuscheme Typed uScheme (Chapter 6)
uml uML (Chapter 8)
umlx uML extended with existential types (Appendix C)
uprolog uProlog (Appendix D)
uscheme uScheme implemented in C (Chapter 2)
uscheme-copy uScheme with support for copying collection (Chapter 4)
uscheme-ms uScheme with support for mark/sweep collection (Chapter 4)
uscheme-ml uScheme implemented in ML (Chapter 5)
uschemeplus uScheme+ implemented in C (Chapter 3)
usmalltalk uSmalltalk (Chapter 10)
Each interpreter comes with a Makefile that does something.
Regrettably, there is no Makefile that works with all gcc versions,
but the distributed Makefiles should work with gcc 10 and 11.
If you have gcc 12 or later, or if your C compiler balks for
any reason, you can change the flags passed to the C compiler
by editing the `config.mk` file in this directory.
In some cases the Makefile may be specialized to the environment at
Tufts and so may be less than useful to you. At Tufts we compile the
interpreters using gcc, Moscow ML, and mlton. For uscheme-copy and
uscheme-ms, you may want to compile with the option -DNOVALGRIND, or
with a -I option that gets valgrind. At Tufts you get valgrind by
running
make CPPFLAGS="-I. -I/usr/sup/include"
There are some additional subdirectories:
impcore-with-locals Impcore with a parser modified for local variables
(bare directory only).
tuscheme-with-capture Typed uScheme with substitution implemented wrongly
uhaskell A prototype uHaskell that didn't make it into the book
The top-level directories are organized as follows:
bare Bare interpreters
commented Commented interpreters
examples A few example programs extracted from the text
transcripts Transcripts from some chapters. These may be useful
for cutting and pasting code for some exercises.