=10100 =minusby273.14662by1000 다to0.03ex다to0.03ex다

é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
›
7
A Polymorphic Modal Type System for Lisp-like
Multi-Staged Languages
1
F
s
g
H
fÖ
"
¦@
/
11/19/2005 SIGPL@†
Ó/
½
N@
B
/
1
e
”
^
í
”
Hõ
B
N
/1
x
l
•\
Œ
+
O
C. Calcagno
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
: “Û
”
^
¼Û
¼–
Д
o

Há
Ԗ
ÐÕ
ªÏ
›`
þ
¦
•$
Œ
í
“
¦z
´
'
Ÿr
v

H
Û
r
¼%
›`
7
¦ë
–[
ß
t“
þ
¦z
·#
Q‫כ‬
¹.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
: “Û
”
^
¼Û
¼–
Д
o

Há
Ԗ
ÐÕ
ªÏ
›`
þ
¦
•$
Œ
í
“
¦z
´
'
Ÿr
v

H
Û
r
¼%
›`
7
¦ë
–[
ß
t“
þ
¦z
·#
Q‫כ‬
¹.”
: “
s
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
ƒ
ç
#
Qr
Û
¼%
›s
7
ê
Í|
ø
X
<.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
: “Û
”
^
¼Û
¼–
Д
o

Há
Ԗ
ÐÕ
ªÏ
›`
þ
¦
•$
Œ
í
“
¦z
´
'
Ÿr
v

H
Û
r
¼%
›`
7
¦ë
–[
ß
t“
þ
¦z
·#
Q‫כ‬
¹.”
: “
s
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
ƒ
ç
#
Qr
Û
¼%
›s
7
ê
Í|
ø
X
<.”
: “Õ
”
^
ª
r
Û
¼%
݆
7
¼–
Ð (s

{
$
9

{
)”
9
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
(/
N
B
ϛ
©
†
Æ)
<
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
: “Û
”
^
¼Û
¼–
Д
o

Há
Ԗ
ÐÕ
ªÏ
›`
þ
¦
•$
Œ
í
“
¦z
´
'
Ÿr
v

H
Û
r
¼%
›`
7
¦ë
–[
ß
t“
þ
¦z
·#
Q‫כ‬
¹.”
: “
s
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
ƒ
ç
#
Qr
Û
¼%
›s
7
ê
Í|
ø
X
<.”
: “Õ
”
^
ª
r
Û
¼%
݆
7
¼–
Ð (s

{
$
9

{
)”
9
(/
N
B
ϛ
©
†
Æ)
<
: “]
s
j@
/–
Н
a
)
{
r
9
Û
¼%
݀
7
º‚
ë
–[
ß
t
þ
.”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
ª1
Õ
xî
l
–
ß
e
”
^
í
”
H~
Ì
Ã
ü
<
3¸
ç
–_
ß
#
QÑ
v“
ü
¦|
'
V
,
: “Û
”
^
¼Û
¼–
Д
o

Há
Ԗ
ÐÕ
ªÏ
›`
þ
¦
•$
Œ
í
“
¦z
´
'
Ÿr
v

H
Û
r
¼%
›`
7
¦ë
–[
ß
t“
þ
¦z
·#
Q‫כ‬
¹.”
: “
s
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
ƒ
ç
#
Qr
Û
¼%
›s
7
ê
Í|
ø
X
<.”
: “Õ
”
^
ª
r
Û
¼%
݆
7
¼–
Ð (s

{
$
9

{
)”
9
(/
N
B
ϛ
©
†
Æ)
<
: “]
s
j@
/–
Н
a
)
{
r
9
Û
¼%
݀
7
º‚
ë
–[
ß
t
þ
.”
ªo
Õ
Œ
H'
4
V
–
,
ÐÀ
Ï
1
9[
t#
þ
Q
.
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç Multi-Staged Programming (1/2)
b
á
Ԗ
ÐÕ
ªÏ
›%
þ
˜Û
7
¼à
Ô Ô
á–
ÐÕ
ªÏ
›_
þ
X
<s
program texts are the first class objects
meta programming
–>
ß
é
0: {
ì
9
Íá
ø
Ԗ
ÐÕ
ªA
b
ç
–>
ß
é
n + 1: é
–>
ß
n á
Ԗ
ÐÕ
ªÏ
›s
þ
ë
–[
ß
t#
þ
Q?
/
Há
Ԗ
ÐÕ
ªÏ
›
þ
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç Multi-Staged Programming (2/2)
b
s
p
“
¦î
–
ß
a#
)
Œ
Qt
[
‫כ‬
t`
þ
¦Ÿ
í[
O

H{
ì
9
Í>
ø
h¥
Æ
Lisp/Scheme_
ï
r“
6
x(quasi-quatation)
Òì
Â
r>
í
–(partial evaluation)
ß
´'
z
×
Ÿ
æ\
z
´'

Ÿ
ï×
¼ë
–[
ß
tl
þ
(runtime code generation)
ß
B
¼–
Ð(macro)
“”
o

H
ï×
¼(evolutionary code)” “·
˜
ú
"
f ú̧
˜

H
ï×

¼(autonomous code)”
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
çƒ
b
#
Q
e ::= c | x | λx.e | e e
|
‘e
code constant
|
,e
code composition
|
run e
execute code
|
lift e
value to code
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(1/5)
–í
ß
é
HB
ß
¼–
ÐÔ
á–
ÐÕ
ªA
b
ç
let NULL = ‘0
let body = ‘(if x= ,NULL then abort() else ...)
in run body
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(2/5)
“
\
¦ ”
B
ß
¼–
ÐÔ
á–
ÐÕ
ªA
b
ç
let or(a,b) = ‘(let v = ,a in if v then v else ,b end)
in if run(or code1 code2) then ... else ...
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(2/5)
“
\
¦ ”
B
ß
¼–
ÐÔ
á–
ÐÕ
ªA
b
ç
let or(a,b) = ‘(let v = ,a in if v then v else ,b end)
in if run(or code1 code2) then ... else ...
¢̧
H
let repeatUntil(s,c) = ‘(,s; while ,c do ,s)
let xloop = repeatUntil(‘(x = x+1), ‘(x<10))
let x = 0
in run xloop
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(3/5)
“
1
x
l
”
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
–(partial evaluation)
ß
power(n,x) = if n=0 then 1 else x * power(n-1,x)
@
/
power(3,x) = x*x*x
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(3/5)
“
1
x
l
”
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
–(partial evaluation)
ß
power(n,x) = if n=0 then 1 else x * power(n-1,x)
@
/
power(3,x) = x*x*x
s
X
>
O
ï
rq
let spower(n) =
if n=0 then ‘1 else ‘(x * ,(spower (n-1)) )
let fastpower100 = ‘(λx. ,(spower 100))
in (run fastpower100)(10); (run fastpower100)(20)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(4/5)
“
1
x
l
”
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
–(partial evaluation)
ß
let map [] f = []
| map (x::r) f = (f x)::(map r f)
/
@
let map [x,y,z] f = [f x, f y, f z]
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(4/5)
“
1
x
l
”
o”/:
¤
£
ol
(specialization)/Â
Òì
r>
í
–(partial evaluation)
ß
let map [] f = []
| map (x::r) f = (f x)::(map r f)
/
@
let map [x,y,z] f = [f x, f y, f z]
s
X
>
O
ï
rq
:
let smap [] = ‘[]
| smap (x::r) = ‘((f ,x) :: ,(smap r))
let fastmap3 = ‘(λ f. ,(smap [1,2,3]))
in (run fastmap3) inc; (run fastmap3) dec
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
ç\
b
V(5/5)

ï×
¼ $

œ÷
©
&“
¦Ì
t’
q
÷
&“
¦
let a = ref ‘1
f = ‘(λ x. ,(a := ‘(x+1); ‘2))
in !a
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
çƒ
b
#
Qƒ
½
¨
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe

”
Hƒ
#
Q
Hÿ
.
?
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
çƒ
b
#
Qƒ
½
¨
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe

”
Hƒ
#
Q
Hÿ
.
?
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
“
ç
r&
É
’
ñ
\
O
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
çƒ
b
#
Qƒ
½
¨
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe

”
Hƒ
#
Q
Hÿ
.
?
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
“
ç
r&
É
’
ñ
\
O
/ ]
?
j&
’
ñ
s
%

3
Ht
S
‰“
X
K
Å
ҍ
H•
¸½
¨ e
%
”
Ü
3
¼€
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
é
–>
ß
Ô
á–
ÐÕ
ªA
çƒ
b
#
Qƒ
½
¨
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
`
ç
¦a
¦
>
½
ÉÃ
+
ºe

”
Hƒ
#
Q
Hÿ
.
?
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
“
ç
r&
É
’
ñ
\
O
/ ]
?
j&
’
ñ
s
%

3
Ht
S
‰“
X
K
Å
ҍ
H•
¸½
¨ e
%
”
Ü
3
¼€
_
²
š: ú
é
–>
ß
ƒ
#
Q_
î
–„
ß
ô
Ç
{
r
9
Û
¼%
›
7
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
Hë
7

H_
ô
Ç{
9
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
`
ç
¦0
Aô
Ç
{
r
9
Û
¼%
›“
7
¦î
–
ß
Å
ô
Å
Ç
{
r
9
Û
¼%
›
7
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
_
ç
z
´]
j\
¦—
¸¿
º)
‡6
x
–„
ß
î
ô
Ç
{
r
9
Û
¼%
›
7
#
”
b
Q•
¸a
~
%
˜“
ú
·
¦o
7
§s
£
a
~É
%
r
“
{
r
9
Û
¼%
›
7
æz
Ø
´ô
ǽ
¨‰
³
&
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
~“
%
a
r
É
{
r
9
Û
¼%
›(1/2)
7
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
_
ç
z
´]
j\
¦—
¸¿
º)
‡6
xK
(pragmatism)
j€
]
•s

\

O
H
ï×
¼X
<s
(code as 1st class object)
ï×

¼î
–\
ß

Ä
»–
Ðî
rs
2
§[
£
t(open code): ‘(x+1)
þ
Ԗ
á
ÐÕ
ªA
Q ‚
×
˜
þ
•
¸2
¤:
Ÿ
“
ü
Ó
s
2
§_
£

1
x\
l

y
™(non alpha-equivalence, unhygienic
Œ
manipulation of code): é
–>
ß
>0
“
ü
Ó
s
2
§_
£

1
x\
l
Ô
¦y
™(alpha-equivalence, hygienic
Œ
manipulation of code): é
–>
ß
0
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
~“
%
a
r
É
{
r
9
Û
¼%
›(2/2)
7
t
F
K
t
_
$
/
í
N`
B
¦
>5
qÄ
Å
»t
K
(conservative extension)
o
,
V
æ
¼s

H, z
´6
x&
“
h
î
–„
ß
ô
Ç
{
r
9
Û
¼%
݀
7
»t
ML_
let-polymorphism1
x
p
é
–>
ß
{
r
9
Û
¼%
›M
7
:ë
H\
\
V„
\
a
~~
%
s
‫כ‬
\
#
O
Qt
”
˜
ú́
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7

r
É
rÛ
¼%
›õ
7
s
1 closed code and eval
2 open code
3 reference
4 type inference
5 variable-capturing substitution
6 capture-avoiding substitution
Our System
+1+2+3+4+5+6
λ2
+1(+3+4)-2-5-6
(1996, 2001)
λ
+2+6-1-3-4-5
(1996)
MetaML, MetaOcaml
+1+2+4+6-3-5
(2000, 2001)
Nanevsky-Pfenning
+1+2(+3)+6-4-5
(2002)
λ+
code
λi
+1+2+3+5-4-6
(2003)
+1+2+4+6-3-5
(2004)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
–í
ß
é
H
{
r
9
Û
¼%
› λsim
7
open (1/3)
ï×

¼_
{
: 
9
ï×
¼_
Ä
»
Ã
º\
@
/ô
Ç
{
9
[
t`
þ
¦ ”
‘(x+1) : 2({x : int}ρ . int)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
–í
ß
é
H
{
r
9
Û
¼%
› λsim
7
open (2/3)
T ypes A, B ::= ι | A → B | 2(Γ . A) | A ref
fin
T ypeEnvironments Γ
∈
TyEnv = Var → Type
StoreT ypings Σ
∈
ST
fin
= Loc → Type
{
ó
9
Íé
ø
–(typing judgment)
ß
Σ; Γ0 ··· Γn ` e : A
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
–í
ß
é
H
{
r
9
Û
¼%
› λsim
7
open (3/3)
(TSVAR)
Γn (x) = A
Σ; Γ0 ··· Γn ` x : A
(TSABS)
Σ; Γ0 ··· Γn + x : A ` e : B
Σ; Γ0 ··· Γn ` λx.e : A → B
(TSAPP)
Σ; Γ0 ··· Γn ` e1 : A → B
Σ; Γ0 ··· Γn ` e2 : A
Σ; Γ0 ··· Γn ` e1 e2 : B
(TSBOX)
Σ; Γ0 ··· Γn Γ ` e : A
Σ; Γ0 ··· Γn ` ‘e : 2(Γ . A)
(TSUNBOX)
(TSEVAL)
Σ; Γ0 ··· Γn−1 ` e : 2(Γn . A)
Σ; Γ0 ··· Γn ` ,e : A
k>0
Σ; Γ0 ··· Γn ` e : 2(∅ . A)
Σ; Γ0 ··· Γn ` run e : A
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
+
A(polymorphic) þ
{
r
9
Û
¼%
› λpoly
7
open (1/3)
ML_
+
A
þ
{
r
9
¼
Û%
›`
7
¦ Rémy_
Y
U
ï×
¼
{
r
9
Û
¼%
݆
7
¼–
ÐS
‰
X
œ
©
if e then ‘(x+1) else ‘1:
2({x : int}ρ . int)
else-branch: 2(ρ0 . int)
then-branch: 2({x : int}ρ . int)
let val x = ‘y in ‘(,x + 1); ‘((,x 1) + z) end:
x: ∀α∀ρ.2({y : α}ρ . α)
first x: 2({y : int} . int)
second x: 2({y : int → int, z : int} . int → int)
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
› λpoly
7
open (2/3)
fin
Store Typings
Σ
∈
StoTy
=
Loc → Type
Type Environments
Γ
∈
TyEnv
=
Var → Field
fin
k
::= {xi : Ai }m
1 | {xi : Ai }1 ρ
Type Env. Vars
Type Schemes
Type Scheme Env
ρ
∈
TyEnvVar
τ, σ
∈
TyScheme
::=
∀ξ.τ | A
∆
∈
TySchemeEnv
=
Var → FieldScheme
fin
k
::= {xi : µi }m
1 | {xi : µi }1 ρ
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
› λpoly
7
open (2/3)
fin
Store Typings
Σ
∈
StoTy
=
Loc → Type
Type Environments
Γ
∈
TyEnv
=
Var → Field
fin
k
::= {xi : Ai }m
1 | {xi : Ai }1 ρ
Type Env. Vars
Type Schemes
Type Scheme Env
ρ
∈
TyEnvVar
τ, σ
∈
TyScheme
::=
∀ξ.τ | A
∆
∈
TySchemeEnv
=
Var → FieldScheme
fin
k
::= {xi : µi }m
1 | {xi : µi }1 ρ
(TVAR)
∆n (x) A
Σ; ∆0 ··· ∆n ` x : A
(TABS)
Σ; ∆0 ··· ∆n + x : A ` e : B
Σ; ∆0 ··· ∆n ` λx.e : A → B
(TAPP)
Σ; ∆0 ··· ∆n ` e1 : A → B
Σ; ∆0 ··· ∆n ` e2 : A
Σ; ∆0 ··· ∆n ` e1 e2 : B
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
+
A
þ
{
r
9
Û
¼%
› λpoly
7
open (3/3)
(TBOX)
Σ; ∆0 ··· ∆n Γ ` e : A
Σ; ∆0 ··· ∆n ` ‘e : 2(Γ . A)
(TUNBOX)
Σ; ∆0 ··· ∆n ` e : 2(Γ . A) ∆n+1 Γ k > 0
Σ; ∆0 ··· ∆n+1 ` ,e : A
(TEVAL)
Σ; ∆0 ··· ∆n ` e : 2(∅ . A)
Σ; ∆0 ··· ∆n ` run e : A
¬ expansiven (e1 )
Σ; ∆0 ··· ∆n ` e1 : A
(TLETAPP)
Σ; ∆0 ··· ∆n + x : GENA (Σ, ∆0 ··· ∆n ) ` e2 : B
Σ; ∆0 ··· ∆n ` let (x e1 ) e2 : B
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
{
9
rÛ
¼%
›_
7
î
–„
ß
$
í
Lemma (Preservation)
Let |= S : Σ, Σ |= E : ∆0 . If
n
Σ; ∆0 ··· ∆n ` e : A, and E, S, V ` e −→ (r, S 0 , V 0 ),
then,
Σ0 ; ∅∆1 ··· ∆n ` r : A
and
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
|= S 0 : Σ0 for some Σ0 ⊇ Σ.
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
{
9
rÛ
¼%
›_
7
·
˜¦
ú
“o
7
§
£
Lemma (Soundness)
If infer(∆0 ··· ∆n , e, A, Q) succeeds with S, then
∅; (S∆0 )··· (S∆n ) ` e : SA.
Lemma (Completeness)
If ∅; (R∆0 )··· (R∆n ) ` e : RA then infer(∆0 ··· ∆n , e, A, Q)
−
succeeds with S such that R|−
Q = T S|Q for some T and
Sn
RV(S) ⊆ Q ∪ FV(A) ∪ i=0 FV(∆i ).
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
S
>
‰
\
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
S
>
‰
\
λpoly
{
r
9
Û
¼%
›`
7
¦ nML\

œ‚
©
Ì: nML 2.0
Ã
open “Staged nML” <
ʓ
r “MetanML” :-)
É
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
S
>
‰
\
λpoly
{
r
9
Û
¼%
›`
7
¦ nML\

œ‚
©
Ì: nML 2.0
Ã
open “Staged nML” <
ʓ
r “MetanML” :-)
É
Ԗ
á
ÐÕ
ªÏ
›_
þ
ì
r$
ë
3
H]
j: F
KF
g
cfa, exception analysis, secure flow analysis, · · ·
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7
S
>
‰
\
λpoly
{
r
9
Û
¼%
›`
7
¦ nML\

œ‚
©
Ì: nML 2.0
Ã
open “Staged nML” <
ʓ
r “MetanML” :-)
É
Ԗ
á
ÐÕ
ªÏ
›_
þ
ì
r$
ë
3
H]
j: F
KF
g
cfa, exception analysis, secure flow analysis, · · ·
™
Œ
y
½
Ëm
+
F
s
g
H"
fÖ
¦@
/ 11/19/2005 SIGPL@†
Ó/
½
N@
B
/
é
–>
ß
á
Ԗ
ÐÕ
ªA
b
K
ç
&
\
¦0
Aô
Ç
{
r
9
Û
¼%
› A Polymorphic Mod
7