This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( www.kmonos.net ), under my own understanding of.

Slides:



Advertisements
Similar presentations
知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
ループで実行する文が一つならこれでもOK
稲葉 一浩 (k.inaba) Python と プログラミングコンテスト 稲葉 一浩 (k.inaba)
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
2006/12/7 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
の まとめ 2007/04/02 (Mon) / d;id:hzkr
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
TAL : Typed Assembly Language について
補足説明.
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
B演習(言語処理系演習)第8回 評価器 田浦.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
A Provably Sound TAL for Back-end Optimization について
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
Cの実行モデル.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング基礎B 文字列の扱い.
フロントエンドとバックエンドのインターフェース
型の compatibility とポインタ演算
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
 型推論3(MLの多相型).
プログラミング 3 2 次元配列.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
コンパイラ 2012年10月29日
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
アルゴリズムとデータ構造1 2009年6月15日
ネットワーク・プログラミング Cプログラミングの基礎.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
情報処理Ⅱ 第7回 2004年11月16日(火).
統合開発環境のための プログラミング言語拡張 フレームワーク
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
SMP/マルチコアに対応した 型付きアセンブリ言語
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
プログラミング 4 文字列.
アルゴリズムとデータ構造 2010年6月17日
プログラミング演習I 2003年6月11日(第9回) 木村巌.
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( www.kmonos.net ), under my own understanding of the papers published at PLDI So, it may include many mistakes etc For your correct understanding, please consult the original paper and/or the authors’ presentation slide!

とある型の修飾理論 A Theory of Type Qualifiers    k.inaba (稲葉 一浩), reading the following paper: PLDIr #3 :: Nov 3, 2009 とある型の修飾理論 A Theory of Type Qualifiers

メタ情報 Citation Count (ACM) : 59 Authors J. S. Foster M. Fähndrich “Static Type Inference for Ruby”, 2009 Type Qualifier の研究もずっと継続しているぽい M. Fähndrich MS Research で Spec#, Singularity OS など A. Aiken 型を使ったりSAT Solver使ったりでプログラム検証

論文の概要 Type Qualifier = 要は C言語 の const Qualifier という概念を型理論的に整理 例) const int : 読み取り専用の整数 Qualifier という概念を型理論的に整理 const に限らず汎用に C に限らず他の型システムにPlug-inしやすく Qualifier Polymorphism, Qualifier Inference

Type Qualifier の例 const nonnull static const char* s = “abc”; 書き換えできない nonnull null にならない static コンパイル時定数 const char* s = “abc”; *s = “A”; // エラー! void f( nonnull void* p); f( null ); // エラー! void g(static int N); g( 42 ); // 大丈夫 g( getchar() ); // エラー!

Qualifierによるサブタイプ関係 const void paramConst( const char* p ); 書き換えできない void paramConst( const char* p ); void paramNonConst( char* p ); char* ms = …; paramConst( ms ); // OK const char* cs = …; paramNonConst ( cs ); // エラー const T T

Qualifierによるサブタイプ関係 nonnull void paramNN( nonnull char* p ); void paramNullKamo( char* p ); char* nullpo = …; paramNN( nullpo ); // エラー nonnull char* nnp = …; paramNullKamo( nnp ); // OK T nonnull T

本論文での Type Qualifier とは 「型を修飾して、 どっちか向きのサブタイプ関係を作る物」 const T T T T nonnull T static T

複数Qualifierの組み合わせも可

Qualifierを入れるための 型システムと言語の拡張 型規則(必要ならもっと増やしてOK) 言語 たとえば  Q = constなし  Q’ = constあり ならば “e の修飾子は l 以下” Q c は Q’ c のサブタイプ (c(…)は元の言語の型) “e の修飾子は l 以上”

言語の拡張の使い道 x = expr; という文を型チェッカに渡す前に x|¬const = expr; null 例: と変換しておき、 という式を型チェッカに渡す前に ¬nonnull null と変換しておく const T “≦ constなし” T T “≧ nonnullなし” nonnull T

この論文のやったこと このような Qualifier の入った言語の 型チェック規則を作った(詳細略) Qualifier に関する Polymorphism も扱える

Qualifier Polymorphism とは Windows API にこんな関数があります。 現在の文字コードで1文字、ポインタを進める 明らかに型がおかしい 本当はこうしたかったに違いない char* CharNext( const char* p ); char* CharNext( char* p ); const char* CharNext( const char* p );

Qualifier Polymorphism とは 本当はこうしたかったに違いない でも、こうするには、全く同じ実装を 2カ所に書かないといけない  → そこで Qualifier Polymorphism! char* CharNext( char* p ); const char* CharNext( const char* p ); Q char* CharNext<Q>( Q char* p ) { return p+1; } ※構文と実装はイメージです

まとめ Type Qualifier 型システム作った 型推論もできる サブタイプ関係をどっちか向きに作る物 Qualifier Polymorphism もある 型推論もできる 実際に C で書かれたベンチマークを推論してconstにできる箇所を探す実験もした

A Semantics for Imprecise Exceptions   Quickly Reading: Simon Peyton Jones Alastair Raid Fergus Henderson Tony Hoare Simon Marlow A Semantics for Imprecise Exceptions

Haskell に綺麗に例外を入れたい 遅延評価のことをちゃんと考える プログラム変換に対し頑強・参照透明性 “制御フロー”ではなく“値”が例外を運ぶ c.f. 浮動小数点数の NaN プログラム変換に対し頑強・参照透明性 (1/0)+(raise “foo”) vs (raise “foo”)+(1/0) “起こりえた例外すべての集合” を運ぶ “例外全てを求める計算”をIOモナドにして運ぶとベター 例外を使わない時はゼロオーバーヘッド あたかも↑の意味論で動くように見せつつ、 実際の実装は例外ハンドラへのジャンプで可能

A New Framework for Debugging Globally Optimized Code   Quickly Reading: Le-Chun Wu Rajiv Mirani Harish Patil Bruce Olsen Wen-mei W. Hwu A New Framework for Debugging Globally Optimized Code

命令再配置に対応できるデバッガ 基本アイデア 実現方法 BPより後ろ由来の命令の先頭 (I3) でストップ ソース→命令の対応を Anchor, Interception, Finish, Escape の4種のマッピングで管理して頑張る ※ 基本ブロック越え再配置 も扱える ×:ループ最適化