tapl勉強会 第1章 (2012-07-17)

24
勉強会 発表者 : @none_toka 1 Introduction

Upload: nonetoka

Post on 30-Jul-2015

936 views

Category:

Documents


1 download

TRANSCRIPT

勉強会

発表者 : @none_toka

第 1 章 Introduction

2

目次目次

● TaPL の紹介● 第 1 章の解説

3

目次目次

● TaPL の紹介● 第 1 章の解説

4

TTypes ypes aand nd PProgramming rogramming LLanguagesanguages

● 型システム (type system)● 型システムから見たプログラミング言語

の研究における基本的な定義・技術・成果を分かりやすく解説 !

Benjamin C. Pierce

5

型システム ?

6

「型システムとは…」 「型システムとは…」 by by @none_toka@none_toka

● 型 : プログラムが取り扱うデータの種類や、プログラムの挙動自体を表すもの– データ型の例 : int, float, String, int 配列– プログラム自体の挙動型 :

int → String ( 整数を受け取って文字列を返す関数 )● 型システム : プログラムの各要素に付与された型情報を

統合・分析する手法– プログラムの安全性 ( データ整合性、セキュリティ、

停止性など ) の保証– 最適化のための有用情報の抽出 詳しくは第 1 章へ !

7

この本、勉強して、どうなるの ?

8

本書を勉強することのメリット本書を勉強することのメリット

● 理論的に安全なプログラムとは何かを考えたり、議論するための基本的な技術を、身に付けられる !

● 有用かつ実用的な様々な型を知ることができる !

● 理論だけではなく型システムの実装の基礎も習得可能

+ プログラミング言語の壁を越えて考える基本的かつ汎用的な力 !

9

でも、すいません m(_ _)m

基本、 ML 風の関数型言語です( monad いません)

一応、一部 Java 風オブジェクト指向の型や考え方も出てきますけど…

…慎しんでお詫び申し上げます

10

本書の大雑把な構成本書の大雑把な構成

● 準備編 : 導入、事前知識 (Preface, 第 1, 2 章 )

● 基本編 : 型無し、単純型の話 ( 第 3-14 章 )

– ペア型、サム型、参照型、例外型なども登場

● 発展編 : 多少複雑な型 ( 第 14-32 章 )部分型、再帰型、多相型、高階型システム

ex. 継承関係 ex. Tree や List 型 ex. 型変数、ジェネリックス

11

各章の種類各章の種類

● 理論の章 : ( 通常の ) 理論的な解説● 実装 (implementation) の章 :

ML での実装の解説 ● 超理論 (metatheory) の章 :

複雑な理論の深い部分の解説● Case Study: オブジェクト指向関係

本輪講では、基本スキップ

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/

13

目次目次

● TaPL の紹介● 第 1 章の解説

– 型システムとは– 型システムの有用性– 型システムと言語設計

14

プログラミング言語における型システムプログラミング言語における型システム

● プログラムが「ある振舞」を行わないことを文法レベルの分析で保証する手法の一つ

プログラムの構成要素を、構成要素が計算する値に応じて分類し、分析

例 : 「 1 + true 」●1: int●+: int -> int -> int●true: boolean

型システムは、実行時の振舞を静的に静的に(コンパイル時に)近似計算しているとみなせる(( 静的型検査静的型検査 ))

15

型システムの安全性型システムの安全性

プログラム全体の集合

「ある振舞」をしないプログラム全体の集合

型安全型安全

型システムが安全性を保証する範囲(一般的に黄色の部分よりも真に小さい)型システムが安全性を保証する範囲(一般的に黄色の部分よりも真に小さい)

● 実行時型エラー型システムがはじくべき「ある振舞」● 型システムの安全性(健全性)赤の部分が、黄色の部分に含まれること

16

例例

if < 複雑な条件文 > then return 5 else < 型エラー >

たとえ、常に真に評価されたとしても…

型検査を通過しない!

17

ちなみにちなみに

● 「型システム」という用語・概念は、複数の分野で使われている :– 数学 : 形式論理学 [Whitehead and Russel, 1910]

– 論理学と計算モデルのつながりを研究する分野● Curry-Howrd 対応 (9.4 に登場 )

複数の分野同士でアイデアの交換が行われている

18

目次目次

● TaPL の紹介● 第 1 章の解説

– 型システムとは– 型システムの有用性– 型システムと言語設計

19

型システムの有用性 型システムの有用性 (TaPL, pp. 4-9)(TaPL, pp. 4-9)

● 型エラーを静的に検出( cf. 実行時型検査 )● 言語の安全性 (language safety) の一部を静的に保証

● 実行の効率化● ... etc.

20

言語の安全性言語の安全性

● 言語の安全性 : 意味合い色々– 例 :

・配列は明示的な意図した更新操作以外で 更新されない

● 仕様に定義された以外の振る舞いを起こさない● 言語の安全性と型安全性は同じではない

– 前者は、実行時検査でも可能な場合がある

21

実行の効率化実行の効率化

● 型システムにより、コンパイル時の最適化に有用な情報を収集できる– int 型 , float 型変数を識別

→ マシン命令を最適化 (Fortran)– データが参照される範囲を静的に抽出し、GC のチェックを省く

– etc.

22

目次目次

● TaPL の紹介● 第 1 章の解説

– 型システムとは– 型システムの有用性– 型システムと言語設計

23

型システムと言語設計型システムと言語設計

● 型システムと言語の設計は連携して行うべし !– 理由 : 互いに文法 /機能レベルで依存するから

● 型付けが困難な言語機能作成の抑止● 型システムからの要求で言語の文法が

複雑化することも

cf. 共通型システム (.NET)

24

ご清澄ありがとうございました