Weitere ähnliche Inhalte Ähnlich wie PFIセミナー 2013/02/28 「プログラミング言語の今」 (20) Mehr von Preferred Networks (20) Kürzlich hochgeladen (10) PFIセミナー 2013/02/28 「プログラミング言語の今」2. 自己紹介
田中英行 (@ tanakh, http://tanakh.jp/ )
(株)Preferred Infrastructure 研究開発部門
Haskell愛好家
拙訳「すごいHaskell楽しく学ぼう!」好評発売中!
7. :::::::: ┌─────────────── ┐
:::::::: | OOPSLAがやられたようだな… │
::::: ┌───└───────────v───┬┘
::::: |フフフ…奴はSIGPLAN四天王の中でも最弱 … │
┌──└────────v─┬────────┘
| たった24回でリニューアルとは│
| OOPの面汚しよ… │
└────v────────┘
|ミ, / `ヽ /! ,.──、
|彡/二Oニニ|ノ /三三三!, |!
`,‘ \、、_,|/-ャ ト `=j r=レ /ミ !彡
T 爪| / / ̄|/´__,ャ |`三三‐/ |`=、|,=’|
/人 ヽ ミ=‘/|`:::::::/イ__ ト`ー く__,-, 、 _!_ /
/ `ー─’“ |_,.イ、 | |/、 Y /| | | j / ミ`┴‘彡\
POPL PLDI ICFP
8. POPL
ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
今年で40周年を迎える、
プログラミング言語のトップカンファレンス
プログラミング言語全般に関する話題
Parallel, Concurrent
Semantics
Type Systems
Formal Verifications, Proof, etc…
近年はテーマが発散気味
10. どんなことやってるの?
プログラミング言語全般の研究
「Principles」 of Programming Languages…
特に人気のあるジャンルは、細分化されてワークショップに
Verification Model-Checking Abstract-Interpretation
Practical Aspects of Declarative Languages
Partial Evaluation and Program Manipulation
Data-Driven Functional Programming
etc…
33. 濫用の背景
定理に出てくる専門用語が、日常で使われている言葉
「矛盾」「無矛盾」
「完全」「不完全」
「体系(システム)」
インフォーマルな意味で解釈すると
とても破天荒なことを言っている
面白いし、いろいろなアイデアと結び付けられてしまう(けど大抵は意味を成さない)
ゲーデルの定理の応用は、多くの人が期待するようなものではなく、
正しく数学的な定義に従ったものに限られる
36. “
語りえぬものについては、
沈黙しなければならない
ルートヴィヒ・ウィトゲンシュタイン「論理哲学論考」命題 7
”
※誤用です
43. Verification関連の研究
“Cache and I/O efficient functional algorithms.”
メモリヒエラルキを考慮した、アルゴリズムのI/Oコストの静的解析
“On the linear ranking problem for integer linear-constraint loops. ”
ある種のプログラムに対する、停止性判定
“The power of parameterization in coinductive proof.”
Coqにおける、coinductionを用いた証明の改善
Microsoft Research Verified Software Milestone Award
CompCert(証明付きコンパイラ)プロジェクトが受賞
45. バグのない世界を想像してみる
( ˘⊖˘)。o(待てよ、プログラムにバグがないのなら…)
デバッグする必要がない
テスト書く必要がない
テストする必要がない
デグレードの心配がないので、プログラムのリファクタリングが自由自在
バグ修正のためのメンテが必要ない
プログラミングのコスト大幅減!
|POPL|┗(☋` )┓
三 ( ◠‿◠ )☛そんなうまい話があるか
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわああああああああ
46. 現実:バグのないプログラムを書くのは、
それなりに大変
型ベースの証明を書く
Coq, Agda, etc …
ソフトウェアの基礎
プログラミング Coq 〜 絶対にバグのないプログラムの書き方 〜
Symbolic Execution + SAT/SMT Solver
sbv(Haskell), vcc(C言語), …
モデル検査
いろいろ
(´・_・`)「コスト的に見合わんかもだぽよ……」
47. デバッグしづらいものに向いてる
ハードウェア
昔からモデル検査がよく行われてきた
(ハードウェアに対するモデル検査は決定不能じゃないケースもある)
並行・並列プログラム
大体のバグが、忘れた頃にやってくる
再現が難しい
静的に安全だと判明した部分の、同期処理を省いてパフォーマンス向上目指すなども
51. 2012 Verified Software Milestone
Award: ConpCert project
検証されたコンパイラを作ろうというプロジェクト
Coqにより(大部分を)証明されたコード
現在、ISO-C-90と ANSI-C といくつかのGCC拡張をサポート
2005年スタート、2012年に浮動小数点演算の完全な形式化と検証が完了
55. 不完全な停止性判定アルゴリズム
特定の性質を満たすプログラムに対するもの
integer linear-constraint loops など
Abstract Interpretation + SMTソルバ
∀input. ∃time. cycles(f, input) < time なる充足可能性問題
もちろん決定不能(だけど、解けるときは解ける)
Idrisとかの部分的停止性判定
再帰の引数が短調減少になってるかだけ調べる
57. 検証にまつわる現在の状況
証明方面
今現在のCoqでは、証明書くのが大変すぎるので、どげんかせんといかん
たくさんの手法が提案されてきている
将来的には息をするように証明が書ける世界を目指している(のかな?)
モデル検査方面
バックエンドのSAT/SMTソルバがここ10年ほどで驚きの爆速に
やれることが増えてきているもよう
63. JavaScriptのFormal Definition
JavaScript and Web Tools
executable semantics for JavaScript
executable model of event dispatch in Web browsers
(Coqで証明済み)
Rhino, SpiderMonkey, V8などの違いが浮き彫りに
そもそもどれが正しいのか
Rhinoをリファレンス動作として採用した