-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathHISTORY
78 lines (65 loc) · 1.91 KB
/
HISTORY
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
v0.0.1: 2017-02-26
Compiles from Pukeko source code to a native OSX binary!
Language features:
* lazy evaluation
* garbage collection
* parametric polymorphism & type inference
* simple monad for output
* lambdas/closures
* integer arithmetic
* built-in algebraic data types (incl. booleans, pairs and lists)
* simple pattern matching on algebraic data types
* small prelude containing some useful functions
Compiler components:
* lexer & parser (using parsec)
* type checker (using Hindley-Milner type inference)
* lambda lifter
* compiler from Pukeko to G-code (code for the G-machine)
* reachability analyzer for G-code (eliminates dead code)
* compiler from G-code to NASM
* runtime system (written in NASM)
* stop-and-copy garbage collector (written in C)
* no optimizers at all
Examples:
* quick sort
* insertion sort
* 8-queens puzzle
* Fibonacci numbers
* Catalan numbers
* regression tests
Missing features:
* user defined algebraic data types
* proper pattern matching
* nice monad syntax & more monads/effect system
* I/O functionality beyond printing numbers
* ...
Possible optimizations:
* strictness analysis
* inlining of "small" functions
* static stack analysis
* peephole optimization of G-code
* batching of allocation checks
* ...
v0.0.2: 2018-01-13
New language features:
* user defined algbebraic data types
* nested pattern matching for algebraic data types
* simple input function for integers
* higher kinded polymorphism
* polymorphic recursion for top level functions
Changes to compiler components:
* type inferencer outputs System F
* every stage after type inference is type checked in System F
* use of type safe de Bruijn indices almost everywhere
New examples:
* tree sort
* range minimum query
* fixed point of functors
* several expextation tests
New optimizations:
* E and R compilation schemes from SPJ's book
* peephole optimizer
Next steps:
* bounded polymorphism
* row polymorphism
* an effect system