More Related Content
Similar to TAPL勉強会 第1章 (2012-07-17)
Similar to TAPL勉強会 第1章 (2012-07-17) (20)
TAPL勉強会 第1章 (2012-07-17)
- 2. 目次
● TaPL の紹介
● 第 1 章の解説
2
- 3. 目次
● TaPL の紹介
● 第 1 章の解説
3
- 4. Types and Programming Languages
● 型システム (type system)
● 型システムから見たプログラミング言語
の研究における基本的な定義・技術・成果を
分かりやすく解説 !
Benjamin C. Pierce
4
- 6. 「型システムとは…」 by @none_toka
● 型 : プログラムが取り扱うデータの種類や、
プログラムの挙動自体を表すもの
– データ型の例 : int, float, String, int 配列
– プログラム自体の挙動型 :
int → String ( 整数を受け取って文字列を返す関数 )
● 型システム : プログラムの各要素に付与された型情報を
統合・分析する手法
– プログラムの安全性 ( データ整合性、セキュリティ、
停止性など ) の保証
– 最適化のための有用情報の抽出 詳しくは第 1 章へ !
6
- 8. 本書を勉強することのメリット
● 理論的に安全なプログラムとは何かを
考えたり、議論するための基本的な技術を、
身に付けられる !
● 有用かつ実用的な様々な型を
知ることができる !
● 理論だけではなく型システムの実装の基礎も
習得可能
+ プログラミング言語の壁を越えて考える基本的かつ汎用的な力 !
8
- 9. でも、すいません m(_ _)m
基本、 ML 風の関数型言語です( monad いません)
一応、一部 Java 風オブジェクト指向の型や考え方
も出てきますけど…
…慎しんでお詫び申し上げます
9
- 10. 本書の大雑把な構成
● 準備編 : 導入、事前知識 (Preface, 第 1, 2 章 )
● 基本編 : 型無し、単純型の話 ( 第 3-14 章 )
– ペア型、サム型、参照型、例外型なども登場
● 発展編 : 多少複雑な型 ( 第 14-32 章 )
部分型、再帰型、多相型、高階型システム
ex. 継承関係 ex. Tree や List 型 ex. 型変数、ジェネリックス
10
- 11. 各章の種類
● 理論の章 : ( 通常の ) 理論的な解説
● 実装 (implementation) の章 :
ML での実装の解説
● 超理論 (metatheory) の章 : 本輪講では、
基本スキップ
複雑な理論の深い部分の解説
● Case Study: オブジェクト指向関係
11
- 12. 参考情報
● 著者 HP: http://www.cis.upenn.edu/~bcpierce/tapl/
● 姉妹本 :
Advanced Topics in Types and Programming
Languages,
edited by B. C. Pierce
– 公式 HP:
http://www.cis.upenn.edu/~bcpierce/attapl/
12
- 13. 目次
● TaPL の紹介
● 第 1 章の解説
– 型システムとは
– 型システムの有用性
– 型システムと言語設計
13
- 14. プログラミング言語における型システム
● プログラムが「ある振舞」を行わないことを
文法レベルの分析で保証する手法の一つ
プログラムの構成要素を、
構成要素が計算する値に応じて分類し、分析
型システムは、実行時の振舞を
例 : 「 1 + true 」
静的に(コンパイル時に)
静的に
●
1: int 近似計算しているとみなせる
●
+: int -> int -> int ( 静的型検査 )
●
true: boolean
14
- 15. 型システムの安全性
プログラム全体の集合 ● 実行時型エラー
型システムがはじく
「ある振舞」をしない べき「ある振舞」
プログラム全体の集合
● 型システムの
型安全 安全性(健全性)
赤の部分が、
黄色の部分に
含まれること
型システムが安全性を保証する範囲
型システムが安全性を保証する範囲
(一般的に黄色の部分よりも真に小さい)
(一般的に黄色の部分よりも真に小さい)
15
- 16. 例
if < 複雑な条件文 > then return 5 else < 型エラー >
たとえ、常に真に評価されたとしても…
型検査を通過しない!
16
- 17. ちなみに
● 「型システム」という用語・概念は、
複数の分野で使われている :
– 数学 : 形式論理学 [Whitehead and Russel, 1910]
– 論理学と計算モデルのつながりを研究する分野
● Curry-Howrd 対応 (9.4 に登場 )
複数の分野同士でアイデアの交換が
行われている
17
- 18. 目次
● TaPL の紹介
● 第 1 章の解説
– 型システムとは
– 型システムの有用性
– 型システムと言語設計
18
- 19. 型システムの有用性 (TaPL, pp. 4-9)
● 型エラーを静的に検出( cf. 実行時型検査 )
● 言語の安全性 (language safety) の一部を
静的に保証
● 実行の効率化
● ... etc.
19
- 20. 言語の安全性
● 言語の安全性 : 意味合い色々
– 例:
・配列は明示的な意図した更新操作以外で
更新されない
● 仕様に定義された以外の振る舞いを起こさない
● 言語の安全性と型安全性は同じではない
– 前者は、実行時検査でも可能な場合がある
20
- 21. 実行の効率化
● 型システムにより、コンパイル時の最適化に
有用な情報を収集できる
– int 型 , float 型変数を識別
→ マシン命令を最適化 (Fortran)
– データが参照される範囲を静的に抽出し、
GC のチェックを省く
– etc.
21
- 22. 目次
● TaPL の紹介
● 第 1 章の解説
– 型システムとは
– 型システムの有用性
– 型システムと言語設計
22
- 23. 型システムと言語設計
● 型システムと言語の設計は連携して行うべし !
– 理由 : 互いに文法 / 機能レベルで依存するから
● 型付けが困難な言語機能作成の抑止
● 型システムからの要求で言語の文法が
複雑化することも
cf. 共通型システム (.NET)
23