Typed Scheme
From Scripts to Programs
Sam Tobin-Hochstadt Northeastern University
1
Typed Scheme From Scripts to Programs Sam Tobin-Hochstadt - - PowerPoint PPT Presentation
Typed Scheme From Scripts to Programs Sam Tobin-Hochstadt Northeastern University 1 The PL Renaissance 2 The PL Renaissance 3 The PL Renaissance 4 Whats good These languages are interactive designed for rapid development supported
Sam Tobin-Hochstadt Northeastern University
1
2
3
4
5
(let-values ([(this-id) #'this-id] [(the-obj) (datum->syntax (quote-syntax here) (gensym 'self))] [(the-finder) (datum->syntax (quote-syntax here) (gensym 'find-self))]) (let* ([def-ctx (syntax-local-make-definition-context)] [localized-map (make-bound-identifier-mapping)] [any-localized? #f] [localize/set-flag (lambda (id) (let ([id2 (localize id)]) (unless (eq? id id2) (set! any-localized? #t)) id2))] [bind-local-id (lambda (id) (let ([l (localize/set-flag id)]) (syntax-local-bind-syntaxes (list id) #f def-ctx) (bound-identifier-mapping-put! localized-map id l)))] [lookup-localize (lambda (id) (bound-identifier-mapping-get localized-map id (lambda () ; If internal & external names are distinguished, ; we need to fall back to localize: (localize id))))]) ; ----- Expand definitions ----- (let ([defn-and-exprs (expand-all-forms stx defn-and-exprs def-ctx bind-local-id)] [bad (lambda (msg expr) (raise-syntax-error #f msg stx expr))] [class-name (if name-id (syntax-e name-id) (let ([s (syntax-local-infer-name stx)]) (if (syntax? s) (syntax-e s) s)))]) ; ------ Basic syntax checks ----- (for-each (lambda (stx) (syntax-case stx (-init init-rest -field -init-field inherit-field private public override augride public-final override-final augment-final pubment overment augment rename-super inherit inherit/super inherit/inner rename-inner inspect) [(form orig idp ...) (and (identifier? #'form) (or (free-identifier=? #'form (quote-syntax -init)) (free-identifier=? #'form (quote-syntax -init-field))))])))))))
6
(let-values ([(this-id) #'this-id] [(the-obj) (datum->syntax (quote-syntax here) (gensym 'self))] [(the-finder) (datum->syntax (quote-syntax here) (gensym 'find-self))]) (let* ([def-ctx (syntax-local-make-definition-context)] [localized-map (make-bound-identifier-mapping)] [any-localized? #f] [localize/set-flag (lambda (id) (let ([id2 (localize id)]) (unless (eq? id id2) (set! any-localized? #t)) id2))] [bind-local-id (lambda (id) (let ([l (localize/set-flag id)]) (syntax-local-bind-syntaxes (list id) #f def-ctx) (bound-identifier-mapping-put! localized-map id l)))] [lookup-localize (lambda (id) (bound-identifier-mapping-get localized-map id (lambda () ; If internal & external names are distinguished, ; we need to fall back to localize: (localize id))))]) ; ----- Expand definitions ----- (let ([defn-and-exprs (expand-all-forms stx defn-and-exprs def-ctx bind-local-id)] [bad (lambda (msg expr) (raise-syntax-error #f msg stx expr))] [class-name (if name-id (syntax-e name-id) (let ([s (syntax-local-infer-name stx)]) (if (syntax? s) (syntax-e s) s)))]) ; ------ Basic syntax checks ----- (for-each (lambda (stx) (syntax-case stx (-init init-rest -field -init-field inherit-field private public override augride public-final override-final augment-final pubment overment augment rename-super inherit inherit/super inherit/inner rename-inner inspect) [(form orig idp ...) (and (identifier? #'form) (or (free-identifier=? #'form (quote-syntax -init)) (free-identifier=? #'form (quote-syntax -init-field))))])))))))
7
(let-values ([(this-id) #'this-id] [(the-obj) (datum->syntax (quote-syntax here) (gensym 'self))] [(the-finder) (datum->syntax (quote-syntax here) (gensym 'find-self))]) (let* ([def-ctx (syntax-local-make-definition-context)] [localized-map (make-bound-identifier-mapping)] [any-localized? #f] [localize/set-flag (lambda (id) (let ([id2 (localize id)]) (unless (eq? id id2) (set! any-localized? #t)) id2))] [bind-local-id (lambda (id) (let ([l (localize/set-flag id)]) (syntax-local-bind-syntaxes (list id) #f def-ctx) (bound-identifier-mapping-put! localized-map id l)))] [lookup-localize (lambda (id) (bound-identifier-mapping-get localized-map id (lambda () ; If internal & external names are distinguished, ; we need to fall back to localize: (localize id))))]) ; ----- Expand definitions ----- (let ([defn-and-exprs (expand-all-forms stx defn-and-exprs def-ctx bind-local-id)] [bad (lambda (msg expr) (raise-syntax-error #f msg stx expr))] [class-name (if name-id (syntax-e name-id) (let ([s (syntax-local-infer-name stx)]) (if (syntax? s) (syntax-e s) s)))]) ; ------ Basic syntax checks ----- (for-each (lambda (stx) (syntax-case stx (-init init-rest -field -init-field inherit-field private public override augride public-final override-final augment-final pubment overment augment rename-super inherit inherit/super inherit/inner rename-inner inspect) [(form orig idp ...) (and (identifier? #'form) (or (free-identifier=? #'form (quote-syntax -init)) (free-identifier=? #'form (quote-syntax -init-field))))])))))))
8
(let-values ([(this-id) #'this-id] [(the-obj) (datum->syntax (quote-syntax here) (gensym 'self))] [(the-finder) (datum->syntax (quote-syntax here) (gensym 'find-self))]) (let* ([def-ctx (syntax-local-make-definition-context)] [localized-map (make-bound-identifier-mapping)] [any-localized? #f] [localize/set-flag (lambda (id) (let ([id2 (localize id)]) (unless (eq? id id2) (set! any-localized? #t)) id2))] [bind-local-id (lambda (id) (let ([l (localize/set-flag id)]) (syntax-local-bind-syntaxes (list id) #f def-ctx) (bound-identifier-mapping-put! localized-map id l)))] [lookup-localize (lambda (id) (bound-identifier-mapping-get localized-map id (lambda () ; If internal & external names are distinguished, ; we need to fall back to localize: (localize id))))]) ; ----- Expand definitions ----- (let ([defn-and-exprs (expand-all-forms stx defn-and-exprs def-ctx bind-local-id)] [bad (lambda (msg expr) (raise-syntax-error #f msg stx expr))] [class-name (if name-id (syntax-e name-id) (let ([s (syntax-local-infer-name stx)]) (if (syntax? s) (syntax-e s) s)))]) ; ------ Basic syntax checks ----- (for-each (lambda (stx) (syntax-case stx (-init init-rest -field -init-field inherit-field private public override augride public-final override-final augment-final pubment overment augment rename-super inherit inherit/super inherit/inner rename-inner inspect) [(form orig idp ...) (and (identifier? #'form) (or (free-identifier=? #'form (quote-syntax -init)) (free-identifier=? #'form (quote-syntax -init-field))))])))))))
9
(let-values ([(this-id) #'this-id] [(the-obj) (datum->syntax (quote-syntax here) (gensym 'self))] [(the-finder) (datum->syntax (quote-syntax here) (gensym 'find-self))]) (let* ([def-ctx (syntax-local-make-definition-context)] [localized-map (make-bound-identifier-mapping)] [any-localized? #f] [localize/set-flag (lambda (id) (let ([id2 (localize id)]) (unless (eq? id id2) (set! any-localized? #t)) id2))] [bind-local-id (lambda (id) (let ([l (localize/set-flag id)]) (syntax-local-bind-syntaxes (list id) #f def-ctx) (bound-identifier-mapping-put! localized-map id l)))] [lookup-localize (lambda (id) (bound-identifier-mapping-get localized-map id (lambda () ; If internal & external names are distinguished, ; we need to fall back to localize: (localize id))))]) ; ----- Expand definitions ----- (let ([defn-and-exprs (expand-all-forms stx defn-and-exprs def-ctx bind-local-id)] [bad (lambda (msg expr) (raise-syntax-error #f msg stx expr))] [class-name (if name-id (syntax-e name-id) (let ([s (syntax-local-infer-name stx)]) (if (syntax? s) (syntax-e s) s)))]) ; ------ Basic syntax checks ----- (for-each (lambda (stx) (syntax-case stx (-init init-rest -field -init-field inherit-field private public override augride public-final override-final augment-final pubment overment augment rename-super inherit inherit/super inherit/inner rename-inner inspect) [(form orig idp ...) (and (identifier? #'form) (or (free-identifier=? #'form (quote-syntax -init)) (free-identifier=? #'form (quote-syntax -init-field))))])))))))
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
Thanks to Olin Shivers
104
Thanks to Aaron Turon
105
Thanks to Felix Klock
106
Thanks to James Hamblin
107
Thanks to James Jungbauer
108
Thanks to Dan Brown
109
Thanks to Lazlo Babai
110
Thanks to Matthew Flatt
111
Thanks to Stevie Strickland
112
Thanks to Guy Steele
113
Thanks to Robby Findler
114
Thanks to Sukyoung Ryu
115
Thanks to Carl Eastlund
116
Thanks to Eric Allen
117
Thanks to Ivan Gazeau
118
Thanks to Katie Edmonds
119
Thanks to Mitch Wand
120
Thanks to Dave Herman
121
Thanks to Jan-Willem Maessen
122
Thanks to Matthias Felleisen
123
Thanks to Ryan Culpepper
124
Thanks to Vincent St-Amour
125
Thanks to Jesse Tov
126
Thanks to Christine Flood
127
Thanks to Steve Hochstadt
128
Thanks to David Chase
129
Thanks to Elizabeth Tobin
130
Thanks to Victor Luchangco
131
Thanks to Ryan Culpepper
132
133