Language UpdateStandard MLer から見た ML 概要
上野雄大(北陸先端科学技術大学院大学)
katsuu@jaist.ac.jp

検閲済What is ML?

Language Update – p.1/31

What is ML?

=

ML
Mailing List
Language Update – p.2/31

What is ML?

=

ML
Markup Language
Language Update – p.3/31

What is ML?

=

ML
Meta Language
Language Update – p.4/31

What is ML?

ややこしい…
なまえ
じゅーよー
Language Update – p.5/31

What is ML?
関数型言語

pure じゃない正格
強い型付け
型推論 : 多相型型推論は ML が元祖型理論をベースとした強力なモジュール機構
structure, signature, functor

Language Update – p.6/31What is ML?
2 つの方言Standard ML
Caml

Language Update – p.7/31

Standard ML
本家
厳密な言語定義“Specification” ではなく “Definition”
式・型の定義と 89 の型付け規則、97 の評
価規則
いろんな人のいろんな実装
SML/NJ が最も完成度が高い

Language Update – p.8/31

Objective Caml
フランス方言仕様 = 実装

INRIA が公開する実装のみ

Language Update – p.9/31

違いStandard ML
洗練された言語仕様
覚えることや驚きが少ない
でも機能も少ない
Objective Caml
研究→実装のサイクルが速い
機能いっぱい「使える」実装が揃っている
互換性なし
Language Update – p.10/31

ML の特徴

世の中は汚れている
Haskell は monad とかで言語の purity を守った
ML は言語の purity を守ることを諦めた

Language Update – p.11/31

ML の特徴
俺ぁ汚れちまったよ…
いいこと
例外機構
直感的な I/O 処理
ユーザーに難しい概念を無理強いしない
わるいこと
Value Polymorphism: 副作用のある言語の型付けの理論的限界

Language Update – p.12/31

ML の特徴
読みやすい構文
意味不明な記号の羅列にならない
括弧だらけにならない
parser が簡単に書ける
高速な実行
gcc に迫る性能 (OCaml)
停止性では遅延評価な言語に負ける

Language Update – p.13/31

ML の特徴
関数型プログラミング「どうするか (how)」より「何をするか(what)」を素朴に書く
大きな処理は小さな処理の組み合わせ
強い型付けによるテストの軽減型 OK = core を吐かないことの証明

Language Update – p.14/31

ML の特徴

コンパイル一発で動く快感

Language Update – p.15/31

ML の特徴
正格 … 書いた通りに実行
きっと直感的コードから処理を追える = デバッグが楽Language Update – p.16/31

ML の特徴

関数型言語のくせにprintf デバッグができる※ ML に printf はありません
Language Update – p.17/31

ML の特徴型チェックが通るようになるまでは茨の道(ぼそLanguage Update – p.18/31

コード例 (quick sort)


local
fun less x l = List.filter (fn i => i <= x) l
fun greater x l = List.filter (fn i => i > x) lin
fun qsort [] = []| qsort (x::xs) =qsort (less x xs)@ [x]@ qsort (greater x xs)
end

Language Update – p.19/31

コード例 (素数列挙 1)


local
fun nextprime n primes =if List.exists (fn x => n mod x = 0) primes
then nextprime (n + 1) primes
else n :: primes
infun prime [] = [2]| prime (x::xs) =nextprime (x + 1) (x::xs)
end




Language Update – p.20/31

コード例 (素数列挙 2)
val prime = (2, fn x => x mod 2 = 0)
fun nextprime (n, f) =if f n then prime (n + 1, f)
else (n, fn x => x mod n = 0 orelse f x)

正格な言語は無限個の列挙は苦手

Language Update – p.21/31

Language Update

Language Update – p.22/31

歴史1970 年代 : ML 誕生
1980 年代 : 理論的な整備が進む
1985 年 : Caml 誕生
1990 年 : SML ’90
1997 年 : SML ’97
言語の定義は 97 年から変化していない (SML)
研究は活発に行われている

Language Update – p.23/31

Implementation Update
SML/NJ
stable: 110.0.7 (2000-09-28)
unstable: 110.55 (2005-07-20)
言語自体は 97 年から変化無し
周辺環境は激変
Objective Caml
3.08.4 (2005-08-16)
新機能がホイホイ入る

Language Update – p.24/31

Language Update
最近 : F#最近 : 美しい日本の ML コンパイラ
未来 : next generation of ML

Language Update – p.25/31F#MSR に移った ML 研究者が関与
OCaml ベース
.NET Platform
他言語 (C#とか) との interoperability が高いらしい.NET のサポートによる実用的な機能の充実

Language Update – p.26/31

美しい日本の ML コンパイラ
2004 年度第 1 回 IPA 未踏に採択
MinCaml
教育用トイコンパイラ

ML のエッセンスだけを取り出せば、たった2000 行程度で効率の良いコンパイラが作れてしまうことの実証

Language Update – p.27/31

Next generation of ML
Polymorphic record & variant
Rank-n polymorphism
Interoperable calculus
Register allocation by proof transformation
Bitmap calculus
Unboxed float
理論的には完成。実装待ち

Language Update – p.28/31

おわりにML は古くて新しくて汚くて美しい
関数型言語です。

ML makes you a cool hacker!

Language Update – p.29/31

教科書とかプログラミング言語 StandardML 入門
ISBN:4320120248

プログラミング言語 ML
ISBN:4756116418

The Definition of Standard ML (Revised)
ISBN:0262531814
Language Update – p.30/31

参考 URL
Standard ML of New Jersey
http://www.smlnj.org/

Objective Caml
http://www.ocaml.jp/
http://caml.inria.fr/

MinCaml
http://min-caml.sourceforge.net/

F#http://research.microsoft.com/
projects/ilx/fsharp.aspx
Language Update – p.31/31