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
内部ドメイン専用言語支援のため の 型に連動した字句・構文ルールの 変更機構 理学部 情報科学科 千葉研究室 07_02363 市川 和央 指導教員 千葉 滋 教授 1.
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
自社製ミドルウエアをDalvikと連携させることが可能になる
ラベル付き区間グラフを列挙するBDDとその応用
コンパイラ 2011年10月17日
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
Javaのための暗黙的に型定義される構造体
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
アルゴリズムとデータ構造 2011年6月13日
Androidソースコード公開後のJNI
コンパイラ 2012年10月15日
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
Bridge Pattern
十年生の 日本語 Year 10 Writing Portfolio
Licensing information
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
東京工科大学 コンピュータサイエンス学部 亀田弘之
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
50年前のプログラミング言語 50年後のプログラミング言語
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
ソフトウェア制作論 平成30年10月3日.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
Java8について 2014/03/07.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
Javaへの変換による 安全なC言語の実装
コンパイラ 2011年10月20日
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
情報とコンピュータ 静岡大学工学部 安藤和敏
統計ソフトウエアRの基礎.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年6月11日
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日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
This slide was a material for the “Reading PLDI Papers (PLDIr)” study group written by Kazuhiro Inaba ( ), under my own understanding of.
2008/7/16(情報コース)2008/7/22(通信コース) 住井
統合開発環境のための プログラミング言語拡張 フレームワーク
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
第6回放送授業.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 2010年6月17日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
識別子の読解を目的とした名詞辞書の作成方法の一試案
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
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!

Maya: Multi-Dispatch Syntax Extension in Java    k.inaba (稲葉 一浩), reading: PLDIr #13 Jun 30, 2010 paper written by J. Baker and W. C. Hsieh (PLDI 2002) Maya: Multi-Dispatch Syntax Extension in Java

要するにJava用マクロシステム たとえばこんな拡張構文が作れます こう展開される use EForEach; h.keys().foreach( String s ) { System.err.println(s + “->” h.get(s)); } for(Enumeration e$ = h.keys(); e$.hasMoreElements(); ) { String s; s = (String) e$.nextElement(); System.err.println(s + “->” + h.get(s)); }

どんな風に記述するか? h.keys().foreach( String s ) { System.err.println(s + “->” h.get(s)); } 例題: まず宣言 Statement ::= MethodName ‘(‘ Formal ‘)’ BlockStmts という構文を増やします!と宣言 (※ 下線部はMayaの予約語) abstract Statement syntax( MethodName(Formal) lazy(BraceTree, BlockStmts) );

実装の本体 名前をつけて、useで lexical scopeに選択的導入可能 Statement syntax EForEach ( Expression:Enumeration enumExp \. foreach (Formal var) lazy(BraceTree, BlockStmts) body ){ final StrictTypeName castType = StrictTypeName.make(var.getType()); return new Statement { for(Enumeration e = $enumExp; e.hasMoreElements(); ) { $(DeclStmt.make(var)) $(Reference.makeExpr(var.getLocation())) = ($castType) e.nextElement(); $body } }; } 「Enumeration型の式」 など、型に基づく条件 型検査とparseの フェーズを混ぜる lazy-parse機能 コードテンプレート (Lispの準クォート) “衛生的な”変数名 for(Enumeration e$ = h.keys(); e$.hasMoreElements(); ) { String s; s = (String) e$.nextElement(); System.err.println(s + “->” + h.get(s)); }

特徴・評価 Java用マクロシステム MultiJava (Java + マルチメソッド) を2500行 程度で実装できた とのこと http://www.cs.utah.edu/~jbaker/maya/ 識別子や型情報を使った、適用条件の制御 ASTオブジェクトに対する 総称関数(マルチメソッド)として実現 Lazy parsing/typechecking Lexical Scopeで拡張を入れたり出したり可能 準クォートによる、書きやすいAST生成 MultiJava (Java + マルチメソッド) を2500行 程度で実装できた とのこと class D extends C { int m(C c) { return 0; } int m(C@D c) { return 1; } }

Jedd: A BDD-based Relational Extension of Java    k.inaba (稲葉 一浩), reading: PLDIr #13 Jun 30, 2010 paper written by O. Lhoták and L. Hendren (PLDI 2004) Jedd: A BDD-based Relational Extension of Java

BDD (二分決定図) とは Bool n から Bool への関数の効率的な表現 (下図はWikipediaから引用) プログラム解析などで 重要なデータ構造 and, or を始め論理演算が 効率的に実現される

Jedd とは BDD を組み込みの言語機能として持つ Java を拡張した言語 RDB BDD イメージ図 f(0,0,0,0,0,0) = 1 f(0,1,0,0,1,1) = 1 f( それ以外 ) = 0 という関数 1st author title year Baker Maya 2002 Lhoták Jedd 2004 Baker=00, Lhoták = 01 Maya=000, Jedd=001 2002=0, 2004=1 とする (十分なサイズのビット列割り当てはJeddが上手いことやる)

使用例:仮想関数呼出の実体解決 <rectype, signature, tgttype, method> answer = 0B; void resolve( <type, signature> receiverTypes, <subtype, supertype> extend ){ <rectype, signature, tgttype> toResolve = (type=>rectype tgttype) receiverTypes; do { <rectype, signature, tgttype, method> resolved = toResolve{tgttype, signagure} >< declaresMethod{type, signature}; answer |= resolved; toResolve -= (method=>) resolved; toResolve = (supertype=>tgttype) (toResolve{tgttype} <> extend{subtype}); } while( toResolve != 0B ); }

receiverTypes extend declaresMethod <rectype, signature, tgttype, method> answer = 0B; void resolve( <type, signature> receiverTypes, <subtype, supertype> extend ){ <rectype, signature, tgttype> toResolve = (type=>rectype tgttype) receiverTypes; do { <rectype, signature, tgttype, method> resolved = toResolve{tgttype, signagure} >< declaresMethod{type, signature}; answer |= resolved; toResolve -= (method=>) resolved; toResolve = (supertype=>tgttype) (toResolve{tgttype} <> extend{subtype}); } while( toResolve != 0B ); } => は、改名兼 コピー兼射影 ジョイン 射影 して 差演算 合成して改名

特徴・評価 BDDを手軽に使うためのRDB風Java拡張 http://www.sable.mcgill.ca/jedd/ バックエンドのBDDは外部libを用いる 便利な機能いろいろ 意味のあるデータ名から01列へのエンコード ”型”が合ってることの静的検査 join や合成など、高度な演算のサポート 変数ドメインの分割や並び順の最適化 (SATソルバを使用)・プロファイラの提供 手書きC++と比べて points-to-analysis で 0.5~4%のオーバーヘッド