SlideShare a Scribd company logo
1 of 24
Download to read offline
勉強会
第 1 章 Introduction
          発表者 : @none_toka
目次

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




               2
目次

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




               3
Types and Programming Languages

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

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




                   Benjamin C. Pierce


                                        4
型システム ?

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

●   型 : プログラムが取り扱うデータの種類や、
    プログラムの挙動自体を表すもの
    –   データ型の例 : int, float, String, int 配列
    –   プログラム自体の挙動型 :
        int → String ( 整数を受け取って文字列を返す関数 )
●   型システム : プログラムの各要素に付与された型情報を
    統合・分析する手法
    –   プログラムの安全性 ( データ整合性、セキュリティ、
        停止性など ) の保証
    –   最適化のための有用情報の抽出                   詳しくは第 1 章へ !

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

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

●   理論的に安全なプログラムとは何かを
    考えたり、議論するための基本的な技術を、
    身に付けられる !
●   有用かつ実用的な様々な型を
    知ることができる !
●   理論だけではなく型システムの実装の基礎も
    習得可能
+ プログラミング言語の壁を越えて考える基本的かつ汎用的な力 !

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

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

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

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




                                9
本書の大雑把な構成

●   準備編 : 導入、事前知識 (Preface, 第 1, 2 章 )
●   基本編 : 型無し、単純型の話 ( 第 3-14 章 )
    –   ペア型、サム型、参照型、例外型なども登場
●   発展編 : 多少複雑な型 ( 第 14-32 章 )
    部分型、再帰型、多相型、高階型システム

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




                                                 10
各章の種類

●   理論の章 : ( 通常の ) 理論的な解説
●   実装 (implementation) の章 :
    ML での実装の解説
●   超理論 (metatheory) の章 :      本輪講では、
                               基本スキップ
    複雑な理論の深い部分の解説
●   Case Study: オブジェクト指向関係


                                   11
参考情報

●   著者 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
目次

●   TaPL の紹介
●   第 1 章の解説
    –   型システムとは
    –   型システムの有用性
    –   型システムと言語設計




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

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

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


                            型システムは、実行時の振舞を
    例 : 「 1 + true 」
                            静的に(コンパイル時に)
                            静的に
    ●
     1: int                 近似計算しているとみなせる
    ●
     +: int -> int -> int   ( 静的型検査 )
    ●
     true: boolean
                                             14
型システムの安全性

プログラム全体の集合             ● 実行時型エラー
                       型システムがはじく
      「ある振舞」をしない       べき「ある振舞」
      プログラム全体の集合
                       ● 型システムの



             型安全       安全性(健全性)
                       赤の部分が、
                       黄色の部分に
                       含まれること

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


                                   15
例

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



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



         型検査を通過しない!




                                            16
ちなみに

●   「型システム」という用語・概念は、
    複数の分野で使われている :
    –   数学 : 形式論理学 [Whitehead and Russel, 1910]
    –   論理学と計算モデルのつながりを研究する分野
        ●   Curry-Howrd 対応 (9.4 に登場 )


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

●   TaPL の紹介
●   第 1 章の解説
    –   型システムとは
    –   型システムの有用性
    –   型システムと言語設計




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

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




                                    19
言語の安全性

●   言語の安全性 : 意味合い色々
    –   例:
        ・配列は明示的な意図した更新操作以外で
         更新されない
        ●   仕様に定義された以外の振る舞いを起こさない
●   言語の安全性と型安全性は同じではない
    –   前者は、実行時検査でも可能な場合がある



                                    20
実行の効率化

●   型システムにより、コンパイル時の最適化に
    有用な情報を収集できる
    –   int 型 , float 型変数を識別
        → マシン命令を最適化 (Fortran)
    –   データが参照される範囲を静的に抽出し、
        GC のチェックを省く
    –   etc.


                                21
目次

●   TaPL の紹介
●   第 1 章の解説
    –   型システムとは
    –   型システムの有用性
    –   型システムと言語設計




                     22
型システムと言語設計

●   型システムと言語の設計は連携して行うべし !
    –   理由 : 互いに文法 / 機能レベルで依存するから
        ●   型付けが困難な言語機能作成の抑止
        ●   型システムからの要求で言語の文法が
            複雑化することも

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



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




                 24

More Related Content

Viewers also liked

TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2Keita Saitou
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)Lintaro Ina
 
WooCommerce & Apple TV
WooCommerce & Apple TVWooCommerce & Apple TV
WooCommerce & Apple TVMarko Heijnen
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523dnoguchi
 
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグアジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグDai FUJIHARA
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章aomori ringo
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回都元ダイスケ Miyamoto
 
Tapl 5
Tapl 5Tapl 5
Tapl 5rf0444
 
第4章 自動比較
第4章 自動比較第4章 自動比較
第4章 自動比較toku toku
 
システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章nihon buson
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料Masatoshi Itoh
 
[デブサミ2015] スクラムならうまくいく? 〜グリーのネイティブゲーム作りの歴史をひもとく、 そして未来へ〜
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
[デブサミ2015] スクラムならうまくいく? 〜グリーのネイティブゲーム作りの歴史をひもとく、 そして未来へ〜gree_tech
 
文芸的プログラミング
文芸的プログラミング文芸的プログラミング
文芸的プログラミングShoko Sasaki
 
LeanCustomerDevelopment
LeanCustomerDevelopmentLeanCustomerDevelopment
LeanCustomerDevelopmentKouki Kawagoi
 
20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章atsushi ishiji
 
NaITE#15オープニング資料
NaITE#15オープニング資料NaITE#15オープニング資料
NaITE#15オープニング資料Akira Ikeda
 
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~健 渡会
 
システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章mirer
 
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)Kashima Megumi
 

Viewers also liked (20)

TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
 
WooCommerce & Apple TV
WooCommerce & Apple TVWooCommerce & Apple TV
WooCommerce & Apple TV
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
 
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグアジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
 
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
 
Tapl 5
Tapl 5Tapl 5
Tapl 5
 
第4章 自動比較
第4章 自動比較第4章 自動比較
第4章 自動比較
 
システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
[デブサミ2015] スクラムならうまくいく? 〜グリーのネイティブゲーム作りの歴史をひもとく、 そして未来へ〜
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
[デブサミ2015] スクラムならうまくいく? 〜グリーのネイティブゲーム作りの歴史をひもとく、 そして未来へ〜
 
文芸的プログラミング
文芸的プログラミング文芸的プログラミング
文芸的プログラミング
 
LeanCustomerDevelopment
LeanCustomerDevelopmentLeanCustomerDevelopment
LeanCustomerDevelopment
 
20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章
 
NaITE#15オープニング資料
NaITE#15オープニング資料NaITE#15オープニング資料
NaITE#15オープニング資料
 
 
  
 
 
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~
Stg2015 1c-1プレゼン資料 いまココにある請負アジャイル開発現場の実態 ~4年で4億弱売上20案件以上の実践経験から語る~
 
システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章システムテスト自動化標準ガイド 読書会 第8章
システムテスト自動化標準ガイド 読書会 第8章
 
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)
名前付けのすすめ / GMOペパボ株式会社 鹿島恵実(かしめぐ)
 

Similar to TAPL勉強会 第1章 (2012-07-17)

2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...n-yuki
 
03 var array_flow_func
03 var array_flow_func03 var array_flow_func
03 var array_flow_func文樹 高橋
 
ソフトウェアテストの再検討
ソフトウェアテストの再検討 ソフトウェアテストの再検討
ソフトウェアテストの再検討 ikedkana
 
20171015 mosa machine learning
20171015 mosa machine learning20171015 mosa machine learning
20171015 mosa machine learningMuneyoshi Benzaki
 
Semantic analysis and helpfulness prediction of text for online product reviews
Semantic analysis and helpfulness prediction of text  for online product reviewsSemantic analysis and helpfulness prediction of text  for online product reviews
Semantic analysis and helpfulness prediction of text for online product reviews浩気 西山
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfRyo Higashigawa
 
統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016wada, kazumi
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要Toshihiro Kamishima
 
確率統計-機械学習その前に
確率統計-機械学習その前に確率統計-機械学習その前に
確率統計-機械学習その前にHidekatsu Izuno
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleKoji Matsuda
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」Takahiko Sato
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理についてYasutomo Kawanishi
 
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立Ichiro Hasuo
 

Similar to TAPL勉強会 第1章 (2012-07-17) (20)

2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...
 
03 var array_flow_func
03 var array_flow_func03 var array_flow_func
03 var array_flow_func
 
ソフトウェアテストの再検討
ソフトウェアテストの再検討 ソフトウェアテストの再検討
ソフトウェアテストの再検討
 
20171015 mosa machine learning
20171015 mosa machine learning20171015 mosa machine learning
20171015 mosa machine learning
 
Semantic analysis and helpfulness prediction of text for online product reviews
Semantic analysis and helpfulness prediction of text  for online product reviewsSemantic analysis and helpfulness prediction of text  for online product reviews
Semantic analysis and helpfulness prediction of text for online product reviews
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
 
統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016統計環境R_はじめの一歩2016
統計環境R_はじめの一歩2016
 
Extract and edit
Extract and editExtract and edit
Extract and edit
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
確率統計-機械学習その前に
確率統計-機械学習その前に確率統計-機械学習その前に
確率統計-機械学習その前に
 
A Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by ExampleA Machine Learning Framework for Programming by Example
A Machine Learning Framework for Programming by Example
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
Enshu2012 1
Enshu2012 1Enshu2012 1
Enshu2012 1
 
本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」本の紹介「絵で見てわかるITインフラの仕組み」
本の紹介「絵で見てわかるITインフラの仕組み」
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
Presen 190517
Presen 190517Presen 190517
Presen 190517
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立
自動車システムの安全性保証へのソフトウェア科学的アプローチ――論理的アカウンタビリティと適用コスト軽減の両立
 

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

  • 1. 勉強会 第 1 章 Introduction 発表者 : @none_toka
  • 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