全体ミーティング(6/3) 修士2年 飯塚 大輔.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

Region-based Memory Management in Cyclone について 発表者 : 前田俊行.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
密な演算子呼び出しで実現した 内部DSLの前処理による 実行速度改善の試み
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
Javaのための暗黙的に型定義される構造体
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Lightweight Language Weekend ls-lRシェル
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
情報工学概論 (アルゴリズムとデータ構造)
全体ミーティング (6/13) 村田雅之.
情報処理Ⅱ 2005年12月9日(金).
コンパイラ演習 第12回 2006/1/26 大山 恵弘 佐藤 秀明.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
F11: Analysis III (このセッションは論文2本です)
第4回放送授業.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
Solving Shape-Analysis Problems in Languages with Destructive Updating
POPLミーティング 5/11 型付きアセンブリ言語の 一般化実装に関する展望
TAL : Typed Assembly Language について
ATTAPL Seminar 10/25 Types for Low-Level Languages (2)
型付きアセンブリ言語を用いた安全なカーネル拡張
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
“Purely Functional Data Structures” セミナー
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
プログラミング言語入門.
データベース工学 生研 戦略情報融合研究センタ 喜連川 優.
Online Decoding of Markov Models under Latency Constraints
コンパイラ 2012年11月15日
情報源:MARA/ARMA 加 工:成田空港検疫所 菊池
Javaプログラムの変更を支援する 影響波及解析システム
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
A Provably Sound TAL for Back-end Optimization について
プログラミング言語論 第13回 オブジェクト指向 情報工学科 篠埜 功.
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
Koichi Kodama (Tokyo Institute of Technology)
C-- Mizukami Tatsuo 2001/07/18.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
フロントエンドとバックエンドのインターフェース
ASIAN 2003 報告 前田俊行.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
オブジェクト指向プログラミングと開発環境
 型推論3(MLの多相型).
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
全体ミーティング (5/23) 村田雅之.
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
Type Systems and Programming Languages ; chapter 13 “Reference”
アルゴリズムとデータ構造1 2009年6月15日
コンピュータアーキテクチャ 第 5 回.
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
SMP/マルチコアに対応した 型付きアセンブリ言語
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
アルゴリズムとデータ構造 2010年6月17日
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
全体ミーティング(9/15) 村田雅之.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
 型理論の初歩 2007 fall.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
Static Enforcement of Security with Types
Safety Checking of Machine Code
Presentation transcript:

全体ミーティング(6/3) 修士2年 飯塚 大輔

本日の論文 F. Perry, C. Hawblitzel, and J. Chen. Simple and flexible stack types. In International Workshop on Aliasing, Confinement, and Ownership (IWACO), July 2007.

概要と関連研究 概要 背景&関連研究 (STAL) スタックの型付け Greg Morrisett, Karl Crary, Neal Glew, and David Walker. Stack- based typed assembly language. In Work-shop on Types in Compilation, pages 95{118, Kyoto, Japan, March 1998.

STALの型付け int :: int :: ρ int :: ρ1 ◦ int :: ρ2 1 何か1 1 何か 何か2 スタックの底 1 何か1 1 何か 何か2 スタックの底 スタックの底

STALでは上手くいかないこと C# コンパイラが by-reference arguments を実装するのに 用いる aliased pointers を表現できない 次項の例では呼び出し側が x と y を instantiate できない

STALで上手く型付けできないコード例

Simple Stack Types (SST) のコンセプト Alias Types と Linear logic を用いてスタックの型付け Alias Types data のある location と data の型の2つの部分 { l ↦ τ } data へのポインタは単一型で表現 Ptr(l) Linear logic multiplicative conjunction : ⊗ additive donjunction : & → では、{ l2 ↦ int } ⊗ { l1 ↦ int } ⊗ ρ のように表現するのか?

SST のスタック型 l2 : int :: l1 : int :: ρ のように表現する Sysntax ある int 値が location l2 と l1 の間にある :: は ⊗ を non-commutative, non-associative にしたもの STALで用いているのと同じ表現 Sysntax

aliasing を示す ∧ オペレータ σ ∧ { l : τ } の意味 スタック型 σ がある location l はヒープにあるか、σ の中にある l は現在、型 τ の値を持っている

Stack Implication Rules

swap 関数を SST で型付け 一般的に考えると lx と ly が同じ場所にあるとすると reordering してもよい

エイリアスのスコープ エイリアスのスコープは拡大できても縮小できない σ ∧ { l : τ } において、 σ が変更されたら { l : τ } は捨てられなけ ればならない dangling pointer を残してしまう可能性 h はOK、illegalMethod() はダメ

location と表記法 η: location variable base : stack の底 next(l) : スタックの頂点に向って、l の次の場所 p : heap location STAL : int :: int :: ρ → SST : next^2(η) :: next(η) :: η:ρ next^2(η) = next(next(η)) 略記

syntax (抜粋)

型付け規則(レジスタ型の変更) レジスタの型が変更されるとき スタックポインタ(SP)の場合はスタック操作が必要

Stack Rules (Resize) スタックの伸縮 location l がスタックトップになる l がスタックトップより上ならば伸びる (s-grow) l がスタック内部の場所なら縮む (s-shrink) l より上のエイリアスは drop される

Stack Rules (Location Lookup) スタック  において、l から i 番目の場所は l’ である l がスタック内の場所であることを保証する

Stack Rules (Type Lookup) スタック  の中の location l が型 τ を持つ

Stack Rules (Stack Update) スタック  の中の location l の型を τ に更新する l の型が以前と変わらない場合と変わる場合

型付け規則(Block and Programs)

Instruction Typing Rules (1/4)

Instruction Typing Rules (2/4)

Instruction Typing Rules (3/4)

Instruction Typing Rules (4/4)

Micro-CLI から SST へ Micro-CLI heap and stack allocation をサポートしている 関連研究(JSWG)で用いられていた source language JSWG:  ・ linear logic を用いて stack と heap の型付け  ・ undecidable

Micro-CLI の syntax

Micro-CLI で記述した swap 関数

Micro-CLI の swap 関数を→ SST へ変換

Micro-CLI の swap 関数を→ SST へ変換

まとめ SSTはシンプルなスタック型を用いることで、安全に stack pointer, frame pointer, by-value arguments, by- reference arguments をサポートした linear logic に変更を加えることで、より高い表現力を獲 得した