untitled

Similar documents
e ::= c op(e 1,..., e n ) if e 1 then e 2 else e 3 let x = e 1 in e 2 x let rec x y 1... y n = e 1 in e 2 e e 1... e n (e 1,..., e n ) let (x 1,..., x

ML λ λ 1 λ 1.1 λ λ λ e (λ ) ::= x ( ) λx.e (λ ) e 1 e 2 ( ) ML λx.e Objective Caml fun x -> e x e let 1

Int Int 29 print Int fmt tostring 2 2 [19] ML ML [19] ML Emacs Standard ML M M ::= x c λx.m M M let x = M in M end (M) x c λx.

ex01.dvi

Parametric Polymorphism

ex01.dvi

ML Edinburgh LCF ML Curry-Howard ML ( ) ( ) ( ) ( ) 1

51 Debian

jssst-ocaml.mgp

fmaster.dvi


コンパイラ演習 第 7 回

海生研ニュース

untitled

MIFES Ver.7.0 ユーザーズマニュアル

# let rec sigma (f, n) = # if n = 0 then 0 else f n + sigma (f, n-1);; val sigma : (int -> int) * int -> int = <fun> sigma f n ( : * -> * ) sqsum cbsu

Objective Caml 3.12 Jacques Garrigue ( ) with Alain Frisch (Lexifi), OCaml developper team (INRIA)

スライド タイトルなし

(CC Attribution) Lisp 2.1 (Gauche )

untitled

koba/class/soft-kiso/ 1 λ if λx.λy.y false 0 λ typed λ-calculus λ λ 1.1 λ λ, syntax τ (types) ::= b τ 1 τ 2 τ 1

MF 型

23_33.indd

untitled

untitled


東海道新幹線でDS



JA2008

untitled

第5回東京都廃棄物審議会

西食堂


フィジカルコンディショニング

PowerPoint プレゼンテーション

支援リスト3/30.xls

untitled

Terminal ocaml $ ocaml Objective Caml version # 1+2;;<ret> # 1+2;; - : int = 3 ;; OCaml <ret> - : int = 3 OC

shift/reset [13] 2 shift / reset shift reset k call/cc reset shift k shift (...) k 1 + shift(fun k -> 2 * (k 3)) k 2 * (1 + 3) 8 reset shift reset (..

a n a n ( ) (1) a m a n = a m+n (2) (a m ) n = a mn (3) (ab) n = a n b n (4) a m a n = a m n ( m > n ) m n 4 ( ) 552

(1)2004年度 日本地理

Emacs ML let start ::= exp (1) exp ::= (2) fn id exp (3) ::= (4) (5) ::= id (6) const (7) (exp) (8) let val id = exp in

プログラミング言語 8 字句解析器(lexer)と構文解析器(parser)

Agenda Intro & history LLVM overview Demo Pros & Cons LLVM Intermediate Language LLVM tools

平成 19 年度 ( 第 29 回 ) 数学入門公開講座テキスト ( 京都大学数理解析研究所, 平成 19 ~8 年月 72 月日開催 30 日 ) 1 PCF (Programming language for Computable Functions) PCF adequacy adequacy

プログラミングD - Java

1. A0 A B A0 A : A1,...,A5 B : B1,...,B

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装

2

人芯経営論 ・・・リーダーシップ考②

平成13年度 地域工業活性化支援事業報告書(多摩全域)

はたらく若者ハンドブック


本文/扉1

プログラム


Program


平成20年5月 協会創立50年の歩み 海の安全と環境保全を目指して 友國八郎 海上保安庁 長官 岩崎貞二 日本船主協会 会長 前川弘幸 JF全国漁業協同組合連合会 代表理事会長 服部郁弘 日本船長協会 会長 森本靖之 日本船舶機関士協会 会長 大内博文 航海訓練所 練習船船長 竹本孝弘 第二管区海上保安本部長 梅田宜弘

aphp37-11_プロ1/ky869543540410005590

Œ{Ł¶/1ŒÊ −ªfiª„¾ [ 1…y†[…W ]

日本内科学会雑誌第96巻第11号

untitled

Jacques Garrigue


Copyright c 2008 Zhenjiang Hu, All Right Reserved.

Microsoft PowerPoint - ml1.ppt

(個別のテーマ) 放射線検査に関連した医療事故

(個別のテーマ) 薬剤に関連した医療事故

(個別のテーマ) 医療機器の使用に関連した医療事故

(個別のテーマ) 医療処置に関連した医療事故

# let st1 = {name = "Taro Yamada"; id = };; val st1 : student = {name="taro Yamada"; id=123456} { 1 = 1 ;...; n = n } # let string_of_student {n

org/ghc/ Windows Linux RPM 3.2 GHCi GHC gcc javac ghc GHCi(ghci) GHCi Prelude> GHCi :load file :l file :also file :a file :reload :r :type expr :t exp

-2-

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

芸術研究23号.indb

メタコンピュータ構成方式の研究

: gettoken(1) module P = Printf exception End_of_system (* *) let _ISTREAM = ref stdin let ch = ref ( ) let read () = (let c =!ch in ch := inp

Copyright c 2006 Zhenjiang Hu, All Right Reserved.

ML 演習 第 4 回

3 3.1 algebraic datatype data k = 1 1,1... 1,n1 2 2,1... 2,n2... m m,1... m,nm 1 m m m,1,..., m,nm m 1, 2,..., k 1 data Foo x y = Alice x [y] B

「計算と論理」 Software Foundations その4

新・明解Java入門

ML 演習 第 4 回

n 2 + π2 6 x [10 n x] x = lim n 10 n n 10 k x 1.1. a 1, a 2,, a n, (a n ) n=1 {a n } n=1 1.2 ( ). {a n } n=1 Q ε > 0 N N m, n N a m

プログラミングD - Java

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

: : : TSTank 2

使用説明書

untitled

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

Excel97関数編

2

明解Java入門編

haskell.gby

2 2 ( M2) ( )

( ) ( ) lex LL(1) LL(1)

Appendix A BASIC BASIC Beginner s All-purpose Symbolic Instruction Code FORTRAN COBOL C JAVA PASCAL (NEC N88-BASIC Windows BASIC (1) (2) ( ) BASIC BAS

Transcription:

PPL 2006

MinCaml (myth)

vs. vs. vs.

Haskell (www.haskell.org) ML (www.standardml.org, caml.inria.fr) Standard ML (SML), Objective Caml (OCaml) Scheme (www.schemers.org)

low level GCC C GCJ Java javac Java JVM ocamlc OCaml OCaml VM ocamlopt OCaml MLj SML JVM etc.

(MinCaml) let rec gcd m n = if m = 0 then n else if m <= n then gcd m (n - m) else gcd n (m - n)

(MinCaml SPARC) let rec gcd m n = if m = 0 then n else if m <= n then gcd m (n - m) else gcd n (m - n) gcd.7: cmp %i2, 0 bne be_else.17 nop mov %i3, %i2 retl nop be_else.17: cmp %i2, %i3 bg ble_else.18 nop sub %i3, %i2, %i3 b gcd.7 nop ble_else.18: sub %i2, %i3, %i2 mov %i3, %o4 mov %i2, %i3 mov %o4, %i2 b gcd.7 nop

(* MinCaml main.ml *) Emit.f outchan (RegAlloc.f (Simm13.f (Virtual.f (Closure.f (iter!limit (Alpha.f (KNormal.f (Typing.f (Parser.exp Lexer.token l))))))))) > wc --lines *.ml* 46 alpha.ml 2 alpha.mli 18 assoc.ml 1 assoc.mli 38 beta.ml 1 beta.mli 106 closure.ml 33 closure.mli 50 constfold.ml 2020 total

MinCaml OCaml minimal ML

MinCaml (1/2) M, N ::= c op(m 1,...,M n ) if M then N 1 else N 2 let x = M in N x let rec xy 1... y n = M in N MN 1... N n...

MinCaml (2/2) M, N ::=... (M 1,...,M n ) let (x 1,...,x n ) = M in N Array.create MN M.(N) M 1.(M 2 ) M 3

100 170 163 179 32 50 32 46 106 164 251 255

OCamlLex/OCamlYacc Cf. packrat parsing (http://pdos.csail.mit.edu/~baford/packrat/) tricky x-y x(-y)parse simple_exp exp

OCaml peculiar int

100 170 163 179 32 50 32 46 106 164 251 255

: MinCaml SPARC

K ML Kit (http://www.it-c.dk/research/mlkit/) MinCaml SPARC : (x-y)-(y-z) let tmp1 = x - y in let tmp2 = y - z in tmp1 - tmp2 4, 5

12345-x let tmp1 = 12345 in let tmp2 = x in tmp1 - tmp2 let tmp1 = 12345 in tmp1 - x let insert_let e k = match e with Var(x) -> k x _ -> let x = gensym () in Let(x, e, k x)

100 170 163 179 32 50 32 46 106 164 251 255

α "fresh" : let x = 123-456 in let x = x - 789 in -x let x 1 = 123-456 in let x 2 = x 1-789 in -x 2 6

let rec f x y z = M in... (f a b c)... let rec f x y z = M in... ([a,b,c/x,y,z]m')... Mf... heuristics

let x = 7 in let y = 3 in x y let x = 7 in let y = 3 in 4

let let rec let x = M in N N x N M

100 170 163 179 32 50 32 46 106 164 251 255

Closure KSPARC

1: (OCaml) let quad x = let dbl y = y + y in dbl (dbl x) in quad 3 let dbl y = y + y ;; let quad x = dbl (dbl x) ;; quad 3

2: let make_adder x = let adder y = x + y in adder in (make_adder 3) 7??? let adder y = x + y ;; let make_adder x = adder ;; (make_adder 3) 7 x???

? : adder x () a. C, C++ b.! GCC c. Scheme, ML, Java (inner class)

Closure (closure) : closure let make_adder x = (adder, x) ;; : let (body, fv) = make_adder 3 in body 7 fv : let adder y x = x + y ;;

2 let make_adder x = let adder y = x + y in adder in (make_adder 3) 7 let adder y x = x + y ;; let make_adder x = (adder, x) ;; apply_closure(make_adder 3, 7) apply_closure((body, fv), arg) body arg fv

Closure 13,14 let rec 1. =closure 2. 3. Closure 4. Closure ( )

Closure make_closure apply_closure : let f x = x + 3 in f 7 let L f x () = x + 3 ;; make_closure f = (L f, ()) in apply_closure f 7

1. closure 2. 1.closure closure let x = 1 in let f y = x + y in (* *) let g z = z + 2 in (* *) (if... then f else g) 3 (* *) fg closure

100 170 163 179 32 50 32 46 106 164 251 255

17,18

greedy mov MinCaml

pretty print (register shuffling) call

100 170 163 179 32 50 32 46 106 164 251 255

: Sun Fire V880 Ultra SPARC III 1.2GHz 8 GB Solaris 9 : MinCaml (32 bit, -iter 1000 -inline 100) OCamlOpt 3.08.3 (32 bit, -unsafe -inline 100) GCC 4.0.0 20050319 (32 bit & 64 bit, -O3) GCC 3.4.3 (32 bit "flat", -O3)

7 6 5 4 3 2 min-caml ocamlopt gcc -m32 gcc -m64 gcc -m32 -mflat 1 0 ack fib tak

3.5 3 2.5 2 1.5 1 min-caml ocamlopt gcc -m32 gcc -m64 gcc -m32 -mflat 0.5 0 raytrace harmonic mandelbrot huffman