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

て -form - Making て -form from ます -form -. With て -form, You can say... ~てもいいですか? (= May I do…) ~てください。 (= Please do…) ~ています。 (= am/is/are doing…) Connecting.
第 5 章 2 次元モデル Chapter 5 2-dimensional model. Contents 1.2 次元モデル 2-dimensional model 2. 弱形式 Weak form 3.FEM 近似 FEM approximation 4. まとめ Summary.
Windows Azure ハンズオン トレーニング Windows Azure Web サイト入門.
Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.
SS2-15:A Study on Image Recognition and Understanding
かぞく Chapter 3 Review This presentation demonstrates the new capabilities of PowerPoint and it is best viewed in Slide Show. These slides are designed to.
コンパイラ 2011年11月14日
SHA-1の高速化tips 2007/9/15
4章 制御の流れ-3.
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
Note for How to Write an English Paper (2014 Second Semester)
All Rights Reserved, Copyright (C) Donovan School of English
The authors have no actual or potential declaration to make.
英語勉強会.
稲葉 一浩 (k.inaba) Python と プログラミングコンテスト 稲葉 一浩 (k.inaba)
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Lightweight Language Weekend ls-lRシェル
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
2006/12/7 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
2006/11/02 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
第4回放送授業.
の まとめ 2007/04/02 (Mon) / d;id:hzkr
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
Windows Summit /8/2017 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be.
Tokuda Lab. NISHIMURA Taichi
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
十年生の 日本語 Year 10 Writing Portfolio
Licensing information
Criterionの利用について (2017年度版)
型付きアセンブリ言語を用いた安全なカーネル拡張
Starter: Write the following dates in Mandarin
コンパイラの解析 (4) 例外処理.
プログラミング言語入門 手続き型言語としてのJava
関数の定義.
プログラミング言語入門.
“Separating Regular Languages with First-Order Logic”
Term paper, Report (1st, first)
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
逐次プログラムの正当性(2) 帰納的アサーション法(フロイド法)
受け身の疑問文 Practice ~ed・・・?.
動的データ依存関係解析を用いた Javaプログラムスライス手法
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
C-- Mizukami Tatsuo 2001/07/18.
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向プログラミングと開発環境
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
Term paper, report (2nd, final)
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
JAVAバイトコードにおける データ依存解析手法の提案と実装
1.Do you know what country it is?
静的情報と動的情報を用いた Javaプログラムスライス計算法
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
Created by L. Whittingham
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
第6回放送授業.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
第10回 関数と再帰.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
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!

Caching Function Calls Using Precise Dependencies    k.inaba (稲葉 一浩), reading the following paper: PLDIr #4 :: Dec 2, 2009 paper written by A. Heydon, R. Levin, and Yuan Yu Caching Function Calls Using Precise Dependencies

普通のメモ化は precise でない function f(x, y, z) { return heavy( if x>0 then y else z ) } memo4f = new HashMap function f(x, y, z) { if memo4f.has(x,y,z) then v = memo_f[x,y,z] else v = heavy( if x>0 then y else z ) memo4f[x,y,z] = v return v } f(1, 2, 3) の結果は f(1, 2, 7) の時にも使えるはず! もったいない! 普通のメモ化

この論文の Contribution という定義を見たら のように、自動で細かく結果をキャッシュ! そんな関数型言語を実装したそうです。 function f(x, y, z) { return heavy( if x>0 then y else z ) } という定義を見たら x>0 のときは (x, y) をキーに記憶 x≦0 のときは (x, z) をキーに記憶 のように、自動で細かく結果をキャッシュ! そんな関数型言語を実装したそうです。

あぷりけーしょん ソースコード管理システム “Vesta” Compaq で使われてるらしい Make と CVS を合わせたようなもの http://sf.net/projects/vesta/ http://www.vestasys.org/ Make と CVS を合わせたようなもの ビルドルールをこの言語で書く→Makeっぽく動く function build(opt, env) { obj = compile(“foo.o”, [foo.c=env/foo.c]) return link(“foo”, obj, opt, env) } ※ envはファイルシステム全体を表すツリー (all your filesystem are belong to Vesta!) ※ opt と env/foo.c をキーにbuild関数をメモ化

実験結果 1ファイル変更→rebuild Make より速い コンパイラ等の呼出以外の キャッシュも 効いてる

実装 実行時に動的に依存関係を計算 (§4) 依存性の表現 これを使って適切にキャッシュ(§3, 詳細略) eval(式, 変数束縛)  (値, どの変数にどう依存してたか情報) 依存性の表現 例: { V:x/foo/bar, X:y/buz } 変数xのフィールドfooのフィールドbarの値 と、変数yのフィールドbuzの存在性に依存 V, X の他に D, T, L, E がある これを使って適切にキャッシュ(§3, 詳細略)

実装 例 D(e, c, p) = 式eを、環境cでの 評価結果にパスpで アクセスした値は 何に依存してるか を、割と常識的な規則で再帰的に計算 例: D( if e1 then e2 else e3, c, p ) = D(e1,c,ε) ∪ D(e2,c,p) when e1→true D(e1,c,ε) ∪ D(e3,c,p) when e2→false 例

まとめ 依存関係を細かく見てくれるメモ化 インタプリタが実行時に、 eval のついでに依存関係も計算する実装 Make っぽいものの実現に利用

paper written by N. Ramsey and S. Peyton Jones    k.inaba (稲葉 一浩), reading the following paper: paper written by N. Ramsey and S. Peyton Jones A Single Intermediate Language That Supports Multiple Implementations of Exceptions

[論文の内容] C--での例外サポート機能の解説 C-- は、この目的に特化して作られたC風言語 この論文は「C-- に、例外の実装に便利な 機能をいれたよー」というもの 長距離ジャンプ 機能+ 制御フローの明示 要は ちゃんとした setjmp / longjmp

基本プリミティブは 継続 (continuation) ◆ CPS/Stack Cutting f(bits32 x) { 継続といっても、 単にスタック上の 位置を覚えてるだけ one-shot 関数 f の終了後に kを呼び出すと未定義 ◆ CPS/Stack Cutting 継続を明示的に持ち回る スタックを一気に削ってジャンプ ◆ Stack Unwinding 処理系定義のランタイム関数 を呼び出してハンドラ登録 後はランタイムが好きにする ◆ Multiple return f(bits32 x) { bits32 y; … continuation k(y): } g(x, k) also cuts to k; cut to k(42); g(x) also unwinds to k; g(x) also returns to k; return<0/1> 42; //kに飛ぶ return<1/1> 42; //正常