狠狠撸

狠狠撸Share a Scribd company logo
2011/09/25 ProofSummit2011
                                             #ProofSummit




                   Coqによる
              MsgPackシリアライザの
                   証明と実装
                  mzp / みずぴー




                      1
11   9   25
自己绍介
              @mzp / みずぴー
              名古屋のSE
              Coq / proof-general派


              ProofCafeに参加してます




                             2
11   9   25
ProofCafe
              開催日: 第4土曜日
              開催場所: どえりゃあカフェ@名古屋
              アダムッチさんのCPDTをみんなで読む
              ? そろそろ別のことやるかも
              たまにイベント開催




                       3
11   9   25
2011/09/25 ProofSummit2011




              だいたいこんな感じ
11   9   25
惭蝉驳笔补肠办を証明した动机
              ネットワーク通信がしたい
               楽をしたいので、既存のライブラリを
               活用したい
               要件
              ? ある程度の実績がある
              ? 非同期の呼び出しができる
              ? いろんな言語のライブラリが充実してる




                          5
11   9   25
惭蝉驳笔补肠办がよさそう
              オブジェクトのシリアライザ + RPC
              ? 高速かつ省サイズ(らしい)
              ? 非同期呼び出しもサポート
              ? いろんな言語のライブラリがある




                       6
11   9   25
惭蝉驳笔补肠办ライブラリ一覧




                    7
11   9   25
惭蝉驳笔补肠办ライブラリ一覧

              OCaml版がないじゃん
                   → 作ろう




                         7
11   9   25
バグがこわい
              作るのはいいけどバグがこわい
              省サイズ化のため仕様が複雑
              ? 実装を間違えてないかな?
              ? テストの網羅性が十分かな?
              ? この変更しても大丈夫かな?



                         8
11   9   25
証明すればよくね?
              証明すれば...
              ? 全入力に対して正しさが保証される
              ? 人間が網羅性を考えなくてもOK
              ? 変更しても大丈夫かを考えなくても
               OK
              証明したほうが楽!!



                         9
11   9   25
証明した(シリアライザだけ)
                シリアライザ部分のみ
                多言語間のデータやり取りには使える
                RPCは今后の课题



              MsgPack = シリアライザ + RPC + RPC-IDL
                         ↑ ここだけ

                             10
11   9   25
公式レポジトリに入って
                  ます(???
              msgpack/ocaml/proofというディレクト
              リがあるよ




                               ↑ これ

                          11
11   9   25
証明の流れ



11   9   25
颁辞辩使いました
              証明にはCoqを使いました
              ? 証明したコードをOCamlに変換できる
              ? 日本語の文書も豊富
              ? Twitterでいろんな人に訊ける




                       13
11   9   25
开発の流れ




                14
11   9   25
証明のアウトライン
              1.8/16/32/64bits整数を作る
              2.オブジェクトと変換ルールを定義する
              3.シリアライズ関数、デシリアライズ関
                数を定義する
              4.OCamlに変換する




                             15
11   9   25
証明のアウトライン
              1.8/16/32/64bits整数を作る
              2.オブジェクトと変換ルールを定義する
              3.シリアライズ関数、デシリアライズ関
                数を定義する
              4.OCamlに変換する




                             16
11   9   25
8/16/32/64ビット整数
              MsgPackはビットレベルの操作を多用す
              るのでnatだと不便
              標準ライブラリのasciiを組合せて、マ
              ルチバイトの整数を定義する




                       17
11   9   25
苍补迟との変换
              asciiのままだと証明が面倒
              natとasciiの相互変換関数を作る




                       18
11   9   25
巨大な苍补迟が扱えない
              5000以上のnatを使おうとするとオー
              バーフローする
              16ビットすら扱えない (><)




                        19
11   9   25
オーバーフローする理由
              Coqのnat := ペアノ数
              再帰的に定義されている
              値が大きすぎると、ネストが深くなり
              すぎる




                         20
11   9   25
オーバーフローの回避
              巨大な自然数が登場しないようにする
              simplダメ、ゼッタイ
              累乗に関する補題を使う

                      累乗に関する補題
                  n    m        (n+m)
                 2 ?2 =2
                                n
                 0 ? n ならば 0 ? 2
                                  n     m
                 n ? m ならば 2 ? 2
                           21
11   9   25
証明のアウトライン
              1.8/16/32/64bits整数を作る
              2.オブジェクトと変換ルールを定義する
              3.シリアライズ関数、デシリアライズ関
                数を定義する
              4.OCamlに変換する




                             22
11   9   25
オブジェクトの定义




                  23
11   9   25
変换ルールの定义




                 24
11   9   25
↓これを証明する




                 25
11   9   25
健全性の証明



              これを証明するときに定義の誤りが見
              付かる(ことが多い)
              Serialized obj1 xsに関する帰納法で
              証明する


                         26
11   9   25
証明のアウトライン
              1.8/16/32/64bits整数を作る
              2.オブジェクトと変換ルールを定義する
              3.シリアライズ関数、デシリアライズ関
                数を定義する
              4.OCamlに変換する




                             27
11   9   25
変换ルールは実行不可




              変換前後の関係を定義してるだけ
              実行できるように関数を定義する

                     28
11   9   25
蝉别谤颈补濒颈锄别関数


                        OCamlっぽい!!




                   29
11   9   25
de蝉别谤颈补濒颈锄别関数

                         ↑失敗するかも




                    30
11   9   25
関数が変换ルールを満す
                 ことを示す




              serialize/de蝉别谤颈补濒颈锄别関数が変換ルー
              ルと矛盾しない

                          31
11   9   25
証明のアウトライン
              1.8/16/32/64bits整数を作る
              2.オブジェクトと変換ルールを定義する
              3.シリアライズ関数、デシリアライズ関
                数を定義する
              4.OCamlに変換する




                             32
11   9   25
翱颁补尘濒への変换
              Coq 8.3からCoqの型とOCamlの型が対応
              づくようになった
              ? 例: natとint, optionとoption




                             33
11   9   25
まがまがしいコード




                  34
11   9   25
35
11   9   25
速度を测ってみた
              やっぱり速度が気になる
              比較対象はRuby版MsgPack 0.4.6
              ? 拡張ライブラリを使っているので、ほぼC
                言語版と速度が同じ
              長さnの配列のシリアライズ速度?デシ
              リアライズ速度を比較
              ? n = 100,1000,10000



                               36
11   9   25
シリアライズ
                                            Ruby     OCaml

               100




               1000




              10000


                      0   2.5   5.0   7.5    10.0   12.5     15.0



11   9   25
シリアライズ
                                            Ruby     OCaml

               100




               1000




              10000


                      0   2.5   5.0   7.5    10.0   12.5     15.0



11   9   25
デシリアライズ
                                         Ruby        OCaml

               100




               1000




              10000


                      0    5        10          15           20


                               38
11   9   25
2011/09/25 ProofSummit2011




              結論:ボロ負け
11   9   25
まとめ
              MsgPack for OCamlを作りました
              バグが怖いのでCoqで証明しました
              ? 健全性を証明しました
              ? マルチバイトの扱いで苦労しました
              性能はオリジナルの1/10




                          40
11   9   25
今后の课题
                   性能の向上
              やっぱり性能は大事
              最適化してもエンバグしてないことが
              保証できるし
              AsciiのExtraction方法を変更すれば性
              能を上げれるはず
              ? Erlangっぽくバイナリ列を操作する
                Bitstringライブラリがよさそう



                         41
11   9   25
今后の课题
                 RPCのサポート
              ネットワーク通信の形式化が必要
              π計算/ applpiによって定義できる?
              IDL処理系はMsgPack側で用意されるら
              しいので、プラグインを作ればOK




                        42
11   9   25

More Related Content

What's hot (20)

PDF
JVM-Reading-ConcurrentMarkSweep
Minoru Nakamura
?
PPTX
Effective Java 輪読会 項目71-73
Appresso Engineering Team
?
PDF
new Objctive-C literal syntax
Wataru Kimura
?
PPTX
PRML10.6 変分ロジスティック回帰
Yo Ehara
?
PPT
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
?
PDF
C++ マルチスレッド 入門
京大 マイコンクラブ
?
PPTX
碍辞迟濒颈苍の濒别迟/谤耻苍/补辫辫濒测のよもやま话
Masaya Yashiro
?
PDF
搁耻产测でつくるスレッド
Shugo Maeda
?
PPT
闯补惫补蝉肠谤颈辫迟で无限ループを実现する5つの方法
yhara
?
PPTX
非同期処理の基础
信之 岩永
?
PDF
6.2 reconciling amortization and persistence
Hironobu Kinugawa
?
PDF
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
?
PDF
迟辞办测辞.惫肠濒発表资料(痴补谤苍颈蝉丑颁补肠丑别3.0新机能と痴鲍笔の仕方)
Iwana Chan
?
PDF
痴补谤苍颈蝉丑のログの眺め方
Iwana Chan
?
PPTX
20130215 fluentd esper_2
Ogibayashi
?
PDF
18166746-NeverBlock-RubyKaigi2009
Muhammad Ali
?
PDF
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
洋史 東平
?
PDF
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
?
PDF
厂滨别谤アーキテクト视点でみた碍辞迟濒颈苍の绍介
Shinichi Kozake
?
PPTX
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
?
JVM-Reading-ConcurrentMarkSweep
Minoru Nakamura
?
Effective Java 輪読会 項目71-73
Appresso Engineering Team
?
new Objctive-C literal syntax
Wataru Kimura
?
PRML10.6 変分ロジスティック回帰
Yo Ehara
?
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
?
C++ マルチスレッド 入門
京大 マイコンクラブ
?
碍辞迟濒颈苍の濒别迟/谤耻苍/补辫辫濒测のよもやま话
Masaya Yashiro
?
搁耻产测でつくるスレッド
Shugo Maeda
?
闯补惫补蝉肠谤颈辫迟で无限ループを実现する5つの方法
yhara
?
非同期処理の基础
信之 岩永
?
6.2 reconciling amortization and persistence
Hironobu Kinugawa
?
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
?
迟辞办测辞.惫肠濒発表资料(痴补谤苍颈蝉丑颁补肠丑别3.0新机能と痴鲍笔の仕方)
Iwana Chan
?
痴补谤苍颈蝉丑のログの眺め方
Iwana Chan
?
20130215 fluentd esper_2
Ogibayashi
?
18166746-NeverBlock-RubyKaigi2009
Muhammad Ali
?
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
洋史 東平
?
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
?
厂滨别谤アーキテクト视点でみた碍辞迟濒颈苍の绍介
Shinichi Kozake
?
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
?

Similar to 颁辞辩による惭蝉驳笔补肠办の証明 (20)

PDF
Boost Tour 1.50.0 All
Akira Takahashi
?
PDF
Pfi Seminar 2010 1 7
Preferred Networks
?
PDF
boost tour 1.48.0 all
Akira Takahashi
?
PDF
尝尝痴惭で游ぶ(整数圧缩とか、虫86向けの自动ベクトル化とか)
Takeshi Yamamuro
?
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
PDF
あまぁい搁肠辫辫生活
Masaki Tsuda
?
PDF
PFDS 10.2.1 lists with efficient catenation
昌平 村山
?
PDF
NArray and scientific computing with Ruby - RubyKaigi2010
Masahiro Tanaka
?
PDF
Secure scheme script suite
Tod Morita
?
PDF
Secure Scheme Script Suite
shibuya_lisp
?
PPTX
Coq 20100208a
tmiya
?
PDF
Boost tour 1_40_0
Akira Takahashi
?
PPTX
BuriKaigi2019 「C# ドキドキ?ライブコーディング」 小島の分
Fujio Kojima
?
PDF
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
Kazkuki Oakamoto
?
KEY
Algebraic DP: 動的計画法を書きやすく
Hiromi Ishii
?
PDF
中3女子でもわかる constexpr
Genya Murakami
?
PDF
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka
?
PDF
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
?
PDF
関数プログラミング入门
Hideyuki Tanaka
?
PDF
闯补惫补セキュアコーディングセミナー东京第2回讲义
JPCERT Coordination Center
?
Boost Tour 1.50.0 All
Akira Takahashi
?
Pfi Seminar 2010 1 7
Preferred Networks
?
boost tour 1.48.0 all
Akira Takahashi
?
尝尝痴惭で游ぶ(整数圧缩とか、虫86向けの自动ベクトル化とか)
Takeshi Yamamuro
?
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
Atsushi Tadokoro
?
あまぁい搁肠辫辫生活
Masaki Tsuda
?
PFDS 10.2.1 lists with efficient catenation
昌平 村山
?
NArray and scientific computing with Ruby - RubyKaigi2010
Masahiro Tanaka
?
Secure scheme script suite
Tod Morita
?
Secure Scheme Script Suite
shibuya_lisp
?
Coq 20100208a
tmiya
?
Boost tour 1_40_0
Akira Takahashi
?
BuriKaigi2019 「C# ドキドキ?ライブコーディング」 小島の分
Fujio Kojima
?
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
Kazkuki Oakamoto
?
Algebraic DP: 動的計画法を書きやすく
Hiromi Ishii
?
中3女子でもわかる constexpr
Genya Murakami
?
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka
?
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
?
関数プログラミング入门
Hideyuki Tanaka
?
闯补惫补セキュアコーディングセミナー东京第2回讲义
JPCERT Coordination Center
?
Ad

More from Hiroki Mizuno (20)

PDF
TypeSafe OSの試み
Hiroki Mizuno
?
PDF
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
Hiroki Mizuno
?
PDF
#NGK2012B Excelによる設計書について
Hiroki Mizuno
?
KEY
Scala基礎勉強会: Featherweight Scalaの紹介および型付け規則の決定可能性について
Hiroki Mizuno
?
KEY
闯补惫补基础
Hiroki Mizuno
?
KEY
厂尘濒#探検队
Hiroki Mizuno
?
KEY
どこでも颁辞辩
Hiroki Mizuno
?
KEY
Coq for Moblie Phone @ ML名古屋
Hiroki Mizuno
?
PDF
顿补谤肠蝉绍介蔼20120423-蝉肠尘产肠
Hiroki Mizuno
?
KEY
骋补濒濒颈苍补による証明駆动开発の魅力
Hiroki Mizuno
?
KEY
「Frama-Cによるソースコード検証」 (mzp)
Hiroki Mizuno
?
KEY
20110424 action scriptを使わないflash勉強会
Hiroki Mizuno
?
KEY
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Hiroki Mizuno
?
KEY
証明駆动开発のたのしみ蔼名古屋谤别箩别肠迟会议
Hiroki Mizuno
?
KEY
颁辞辩による証明駆动开発
Hiroki Mizuno
?
KEY
NGK忘年会 2010 / CoqからRubyへ
Hiroki Mizuno
?
PDF
From Coq to Ruby / CoqからRubyへ
Hiroki Mizuno
?
KEY
SacalaZa #1
Hiroki Mizuno
?
KEY
CoqUn2010
Hiroki Mizuno
?
KEY
翱颁补尘濒础笔滨厂别补谤肠丑の绍介
Hiroki Mizuno
?
TypeSafe OSの試み
Hiroki Mizuno
?
翱颁补尘濒で奥别产アプリケーションを作る苍个の方法
Hiroki Mizuno
?
#NGK2012B Excelによる設計書について
Hiroki Mizuno
?
Scala基礎勉強会: Featherweight Scalaの紹介および型付け規則の決定可能性について
Hiroki Mizuno
?
闯补惫补基础
Hiroki Mizuno
?
厂尘濒#探検队
Hiroki Mizuno
?
どこでも颁辞辩
Hiroki Mizuno
?
Coq for Moblie Phone @ ML名古屋
Hiroki Mizuno
?
顿补谤肠蝉绍介蔼20120423-蝉肠尘产肠
Hiroki Mizuno
?
骋补濒濒颈苍补による証明駆动开発の魅力
Hiroki Mizuno
?
「Frama-Cによるソースコード検証」 (mzp)
Hiroki Mizuno
?
20110424 action scriptを使わないflash勉強会
Hiroki Mizuno
?
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Hiroki Mizuno
?
証明駆动开発のたのしみ蔼名古屋谤别箩别肠迟会议
Hiroki Mizuno
?
颁辞辩による証明駆动开発
Hiroki Mizuno
?
NGK忘年会 2010 / CoqからRubyへ
Hiroki Mizuno
?
From Coq to Ruby / CoqからRubyへ
Hiroki Mizuno
?
SacalaZa #1
Hiroki Mizuno
?
CoqUn2010
Hiroki Mizuno
?
翱颁补尘濒础笔滨厂别补谤肠丑の绍介
Hiroki Mizuno
?
Ad

Recently uploaded (9)

PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
PPTX
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
PPTX
色について.pptx .
iPride Co., Ltd.
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PPTX
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
色について.pptx .
iPride Co., Ltd.
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?

颁辞辩による惭蝉驳笔补肠办の証明

  • 1. 2011/09/25 ProofSummit2011 #ProofSummit Coqによる MsgPackシリアライザの 証明と実装 mzp / みずぴー 1 11 9 25
  • 2. 自己绍介 @mzp / みずぴー 名古屋のSE Coq / proof-general派 ProofCafeに参加してます 2 11 9 25
  • 3. ProofCafe 開催日: 第4土曜日 開催場所: どえりゃあカフェ@名古屋 アダムッチさんのCPDTをみんなで読む ? そろそろ別のことやるかも たまにイベント開催 3 11 9 25
  • 4. 2011/09/25 ProofSummit2011 だいたいこんな感じ 11 9 25
  • 5. 惭蝉驳笔补肠办を証明した动机 ネットワーク通信がしたい 楽をしたいので、既存のライブラリを 活用したい 要件 ? ある程度の実績がある ? 非同期の呼び出しができる ? いろんな言語のライブラリが充実してる 5 11 9 25
  • 6. 惭蝉驳笔补肠办がよさそう オブジェクトのシリアライザ + RPC ? 高速かつ省サイズ(らしい) ? 非同期呼び出しもサポート ? いろんな言語のライブラリがある 6 11 9 25
  • 8. 惭蝉驳笔补肠办ライブラリ一覧 OCaml版がないじゃん → 作ろう 7 11 9 25
  • 9. バグがこわい 作るのはいいけどバグがこわい 省サイズ化のため仕様が複雑 ? 実装を間違えてないかな? ? テストの網羅性が十分かな? ? この変更しても大丈夫かな? 8 11 9 25
  • 10. 証明すればよくね? 証明すれば... ? 全入力に対して正しさが保証される ? 人間が網羅性を考えなくてもOK ? 変更しても大丈夫かを考えなくても OK 証明したほうが楽!! 9 11 9 25
  • 11. 証明した(シリアライザだけ) シリアライザ部分のみ 多言語間のデータやり取りには使える RPCは今后の课题 MsgPack = シリアライザ + RPC + RPC-IDL ↑ ここだけ 10 11 9 25
  • 12. 公式レポジトリに入って ます(??? msgpack/ocaml/proofというディレクト リがあるよ ↑ これ 11 11 9 25
  • 14. 颁辞辩使いました 証明にはCoqを使いました ? 証明したコードをOCamlに変換できる ? 日本語の文書も豊富 ? Twitterでいろんな人に訊ける 13 11 9 25
  • 15. 开発の流れ 14 11 9 25
  • 16. 証明のアウトライン 1.8/16/32/64bits整数を作る 2.オブジェクトと変換ルールを定義する 3.シリアライズ関数、デシリアライズ関 数を定義する 4.OCamlに変換する 15 11 9 25
  • 17. 証明のアウトライン 1.8/16/32/64bits整数を作る 2.オブジェクトと変換ルールを定義する 3.シリアライズ関数、デシリアライズ関 数を定義する 4.OCamlに変換する 16 11 9 25
  • 18. 8/16/32/64ビット整数 MsgPackはビットレベルの操作を多用す るのでnatだと不便 標準ライブラリのasciiを組合せて、マ ルチバイトの整数を定義する 17 11 9 25
  • 19. 苍补迟との変换 asciiのままだと証明が面倒 natとasciiの相互変換関数を作る 18 11 9 25
  • 20. 巨大な苍补迟が扱えない 5000以上のnatを使おうとするとオー バーフローする 16ビットすら扱えない (><) 19 11 9 25
  • 21. オーバーフローする理由 Coqのnat := ペアノ数 再帰的に定義されている 値が大きすぎると、ネストが深くなり すぎる 20 11 9 25
  • 22. オーバーフローの回避 巨大な自然数が登場しないようにする simplダメ、ゼッタイ 累乗に関する補題を使う 累乗に関する補題 n m (n+m) 2 ?2 =2 n 0 ? n ならば 0 ? 2 n m n ? m ならば 2 ? 2 21 11 9 25
  • 23. 証明のアウトライン 1.8/16/32/64bits整数を作る 2.オブジェクトと変換ルールを定義する 3.シリアライズ関数、デシリアライズ関 数を定義する 4.OCamlに変換する 22 11 9 25
  • 27. 健全性の証明 これを証明するときに定義の誤りが見 付かる(ことが多い) Serialized obj1 xsに関する帰納法で 証明する 26 11 9 25
  • 28. 証明のアウトライン 1.8/16/32/64bits整数を作る 2.オブジェクトと変換ルールを定義する 3.シリアライズ関数、デシリアライズ関 数を定義する 4.OCamlに変換する 27 11 9 25
  • 29. 変换ルールは実行不可 変換前後の関係を定義してるだけ 実行できるように関数を定義する 28 11 9 25
  • 30. 蝉别谤颈补濒颈锄别関数 OCamlっぽい!! 29 11 9 25
  • 31. de蝉别谤颈补濒颈锄别関数 ↑失敗するかも 30 11 9 25
  • 32. 関数が変换ルールを満す ことを示す serialize/de蝉别谤颈补濒颈锄别関数が変換ルー ルと矛盾しない 31 11 9 25
  • 33. 証明のアウトライン 1.8/16/32/64bits整数を作る 2.オブジェクトと変換ルールを定義する 3.シリアライズ関数、デシリアライズ関 数を定義する 4.OCamlに変換する 32 11 9 25
  • 34. 翱颁补尘濒への変换 Coq 8.3からCoqの型とOCamlの型が対応 づくようになった ? 例: natとint, optionとoption 33 11 9 25
  • 36. 35 11 9 25
  • 37. 速度を测ってみた やっぱり速度が気になる 比較対象はRuby版MsgPack 0.4.6 ? 拡張ライブラリを使っているので、ほぼC 言語版と速度が同じ 長さnの配列のシリアライズ速度?デシ リアライズ速度を比較 ? n = 100,1000,10000 36 11 9 25
  • 38. シリアライズ Ruby OCaml 100 1000 10000 0 2.5 5.0 7.5 10.0 12.5 15.0 11 9 25
  • 39. シリアライズ Ruby OCaml 100 1000 10000 0 2.5 5.0 7.5 10.0 12.5 15.0 11 9 25
  • 40. デシリアライズ Ruby OCaml 100 1000 10000 0 5 10 15 20 38 11 9 25
  • 41. 2011/09/25 ProofSummit2011 結論:ボロ負け 11 9 25
  • 42. まとめ MsgPack for OCamlを作りました バグが怖いのでCoqで証明しました ? 健全性を証明しました ? マルチバイトの扱いで苦労しました 性能はオリジナルの1/10 40 11 9 25
  • 43. 今后の课题 性能の向上 やっぱり性能は大事 最適化してもエンバグしてないことが 保証できるし AsciiのExtraction方法を変更すれば性 能を上げれるはず ? Erlangっぽくバイナリ列を操作する Bitstringライブラリがよさそう 41 11 9 25
  • 44. 今后の课题 RPCのサポート ネットワーク通信の形式化が必要 π計算/ applpiによって定義できる? IDL処理系はMsgPack側で用意されるら しいので、プラグインを作ればOK 42 11 9 25