Enviar búsqueda
Cargar
Msgpack cli-tech-aid-2013
•
Descargar como PPTX, PDF
•
6 recomendaciones
•
3,192 vistas
Yusuke Fujiwara
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 39
Descargar ahora
Recomendados
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
ZeroMQ - Sockets on steroids!
ZeroMQ - Sockets on steroids!
Pedro Januário
Unpack mechanism of the msgpack-c
Unpack mechanism of the msgpack-c
Takatoshi Kondo
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Takaaki Suzuki
Async History in .NET
Async History in .NET
Takaaki Suzuki
Friendly
Friendly
Takaaki Suzuki
WPF Interoperability
WPF Interoperability
Takaaki Suzuki
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
Recomendados
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
ZeroMQ - Sockets on steroids!
ZeroMQ - Sockets on steroids!
Pedro Januário
Unpack mechanism of the msgpack-c
Unpack mechanism of the msgpack-c
Takatoshi Kondo
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Universal Appとは? -デバイスに依存しないアプリケーション開発-
Takaaki Suzuki
Async History in .NET
Async History in .NET
Takaaki Suzuki
Friendly
Friendly
Takaaki Suzuki
WPF Interoperability
WPF Interoperability
Takaaki Suzuki
DeclarativeSql
DeclarativeSql
Takaaki Suzuki
Sevens Algorithm
Sevens Algorithm
Takaaki Suzuki
酒の肴はC# vNext
酒の肴はC# vNext
Takaaki Suzuki
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
Yoshifumi Kawai
Modern .NET
Modern .NET
信之 岩永
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Yoshifumi Kawai
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
それっぽく、適当に
それっぽく、適当に
信之 岩永
Overview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable Collections
Yoshifumi Kawai
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
Yoshifumi Kawai
MessagePack(msgpack): Compact and Fast Serialization Library
MessagePack(msgpack): Compact and Fast Serialization Library
Takatoshi Kondo
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
開発者の方向けの Sql server(db) t sql 振り返り
開発者の方向けの Sql server(db) t sql 振り返り
Oda Shinsuke
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Akira Inoue
Visual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScript
Akira Inoue
Sql world とは
Sql world とは
Oda Shinsuke
TypeScript and Visual Studio Code
TypeScript and Visual Studio Code
Akira Inoue
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Más contenido relacionado
Destacado
Sevens Algorithm
Sevens Algorithm
Takaaki Suzuki
酒の肴はC# vNext
酒の肴はC# vNext
Takaaki Suzuki
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
Yoshifumi Kawai
Modern .NET
Modern .NET
信之 岩永
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Yoshifumi Kawai
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
それっぽく、適当に
それっぽく、適当に
信之 岩永
Overview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable Collections
Yoshifumi Kawai
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
Yoshifumi Kawai
MessagePack(msgpack): Compact and Fast Serialization Library
MessagePack(msgpack): Compact and Fast Serialization Library
Takatoshi Kondo
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
開発者の方向けの Sql server(db) t sql 振り返り
開発者の方向けの Sql server(db) t sql 振り返り
Oda Shinsuke
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Akira Inoue
Visual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScript
Akira Inoue
Sql world とは
Sql world とは
Oda Shinsuke
TypeScript and Visual Studio Code
TypeScript and Visual Studio Code
Akira Inoue
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
Destacado
(20)
Sevens Algorithm
Sevens Algorithm
酒の肴はC# vNext
酒の肴はC# vNext
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
Modern .NET
Modern .NET
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Net fringejp2016
Net fringejp2016
それっぽく、適当に
それっぽく、適当に
Overview of the .Net Collection Framework and Immutable Collections
Overview of the .Net Collection Framework and Immutable Collections
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
MessagePack(msgpack): Compact and Fast Serialization Library
MessagePack(msgpack): Compact and Fast Serialization Library
Deep Dive C# 6.0
Deep Dive C# 6.0
開発者の方向けの Sql server(db) t sql 振り返り
開発者の方向けの Sql server(db) t sql 振り返り
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Engineers can change the world ~ "世界" で活躍するエンジニアになるために
Visual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScript
Sql world とは
Sql world とは
TypeScript and Visual Studio Code
TypeScript and Visual Studio Code
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Similar a Msgpack cli-tech-aid-2013
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
Software Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Sphinx/reST
Sphinx/reST
Ryo Maruyama
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
openrtm
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
Hajime Tazaki
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
Enter the-dolphine
Enter the-dolphine
Mikiya Okuno
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
K Kimura
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
Sotaro Kimura
講習2日目
講習2日目
Yuki Takahashi
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
Mikiya Okuno
20010901
20010901
小野 修司
Jubatusでマルウェア分類
Jubatusでマルウェア分類
Shuzo Kashihara
Similar a Msgpack cli-tech-aid-2013
(20)
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Object-Funcational Analysis and design
Object-Funcational Analysis and design
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
Software Development with Symfony
Software Development with Symfony
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Yesodを支える技術
Yesodを支える技術
Sphinx/reST
Sphinx/reST
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Scala + Finagleの魅力
Scala + Finagleの魅力
Enter the-dolphine
Enter the-dolphine
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
講習2日目
講習2日目
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
20010901
20010901
Jubatusでマルウェア分類
Jubatusでマルウェア分類
Msgpack cli-tech-aid-2013
1.
MessagePack CLI @yfakariya
2.
3.
SIer でスキマを埋める仕事をしてます プログラミング歴≒.NET歴 API 周りとかの仕事が得意です ご縁があり翻訳とかしてます •
『.NET のクラスライブラリ設計』 • 『プログラミング .NET Framework』(第3版~)
4.
MessagePack CLI のご紹介 •
MessagePack とは • MessagePack CLI とは • 0.4.0 について • 今後の予定 • Deep Dive
5.
6.
バイナリ形式の自己型記述型データフォー マット • 数値やフラグを小さなバイトで表現可能 • 文字列中心だとそれほど変わらない •
画像を BASE64 化したりする必要がない • ストリーム自体に型情報を付与
7.
さまざまな言語で実装 • つまり、バイナリ形式で他の言語と通信できる • 言語(https://github.com/msgpack/より) •
C++ • Ruby • Java • CLI(C#,VB,F#,etc…) • JavaScript(Node.js) • Python • Lua • Erlang • Haskell • D • Go • Perl • Smalltalk • OCaml • PHP
8.
だいたい Protobuf と同じ コンパクト •
-31~127 までの整数は型情報付きで1バイト • bool、nil は 1 バイト • 要素数 15 以下の配列、map、バイト数 31 以下の 文字列(UTF-8)ヘッダは型情報込みで 1 バイト • つまり、フラグとか整数にするととてもコンパク ト
9.
都道府県と郵便番号と住所のレコード • MSKK の住所だとこんな感じ •
0x93, 0x0C, 0x97, …, 0xD9, 0x27,… FixArray3 (構造体の フィールド数 が 3なので) PositiveFixNum5 1 (JIS都道府県 コードを数値化、 ここでは13) FixStr7 (郵便番号7ケ タ、文字列とし て) この後7バイトが UTF-8の郵便番号 Str8 + バイト数 (0x27) 住所本体のUTF-8 文字列
10.
11.
Common Language Infrastructure
用の実 装 • C# だけでなく、VB も OK 動くけど、F# や Iron* や PowerShell 向きではない • Mono でも動く • Silverlight/WP7.1 でも動く 自動テストがないのがネック 公式 Msgpack リポジトリの一員 • https://github.com/msgpack/msgpack-cli Apache 2 ライセンス
12.
シンプルな API • 『Framework
Design Guidelines』訳した人として も頑張りました。 かなりはやい • 0.4.0 Beta2 では、protobuf-net ±15% 程度 他の言語のバインディング豊富 • https://github.com/msgpack • それぞれの言語に合わせた API
13.
本家 issue 128
対応 • bin 型の対応:文字列でないバイナリ型をサポー ト • str8 型の対応:ディクショナリのキーなどで多用 される、32~127 バイトの文字列のサイズ削減 • ext 型の対応:AP 固有の型情報をバイナリそのも のに埋め込むフレームワーク 別の言語や実装で読み込んだ時に、そのデータが特定 の「拡張型」を意図していたことがわかるように。
14.
Issue 128とは • MessagePack
の仕様は、C++ や Ruby との互換 性を考慮して、文字列とバイト列を区別していな かったが、それだと JavaScript なんかで結構困 る、と言う話に標準化で商売している人が入って きたりしてえらいことになったスレッド(特徴: 長い) https://github.com/msgpack/msgpack/issues/128
15.
パフォーマンスチューニング • 苦節1年、ようやくパフォーマンスを向上できま した。 • 違ったもの
ストリームの読み取り(によるバイト配列生成)がボ トルネック説 仮想メソッド呼び出しオーバーヘッド説 • 原因 Nullable<T> のオーバーヘッド • Nullable<T> の API を deprecated にして解消。。。
16.
そもそも論 • 最初からパフォーマンスを指向していない実装 で、ベンチマークとか出されて比較されると割と つらい • 先を見越せる経験、熟慮、運が大事 プロファイラをあてにしすぎない •
ボトルネックがなく、なんか遅いときには役に立 たない(Nullable<T> のオーバーヘッドとか出て こない)
17.
プラットフォーム強化 • Xamarin.Android • Xamarin.iOS •
.NET Micro Framework Issue #7 • WinRT(現在は CoreCLR 対応版のみ) • Windows Phone 8 まずは動作確認レポート募集中です!
18.
NuGet から Msgpack
cli をインストールし てみてください! フィードバックお待ちしてます! • 日本語でツイートが手軽です。 Github の issue に英語でやってくれた方が、議論は深 まると思いますが Happy Hacking!
19.
20.
Serialization API • MessagePackSerializer<T> •
SerializationContext MessagePackObject T Primitive API • Packer • Unpacker <<corresponds>> <<uses>> <<corresponds>> System.IO.Stream <<uses>>
21.
MessagePack 型システムの CLI
表現 • 整数 • 浮動小数点(IEEE 823 2進) • バイナリ(0.4 以降は文字列と純粋バイナリを区 別) • 配列 • マップ(ディクショナリ) • 拡張型(0.4 以降) • 真偽値 • nil
22.
軽量な値型 型変換演算子による CLI/FCL プリミティ ブへの変換 特殊な型: •
配列:IList<MessagePackObject> • ディクショナリ: IDictionary<MessagePackObject, MessagePackO bject>
23.
値のバイナリ表現を格納するためのビット 列 • 8bit(UInt64) • Single/Double
は適宜変換して返す オブジェクトを格納するためのフィールド • 参照型(Byte[]、String、IList<MPO>、 IDictionary<MPO,MPO>) • または値型フィールドのセマンティクスを表現す る「型オブジェクト」 default(MPO) == MPO.Nil
24.
MessagePack ストリームと MessagePackObject の相互変換 •
XmlReader/Writer、StAX 相当の役割 • コレクションの Unpack のステート管理 • エンディアンの対処 • パフォーマンス上クリティカルなレイヤ • 通信遅延の待機や複数ストリームの Aggregate、 バッファリングなどの機能は持たない Stream クラスの役割と割り切っている
25.
素直な実装 • エンディアンの切り替え • できる限りコンパクトな表現を選ぶ
値1Lは int64 でなく PositiveFixNum1 PackerCompatibilityOptions • MsgPack issue 128 以前の実装が読めるバイナリ を吐く バイト列を Raw 型(文字列かもしれないバイナリ)で 出力 Str8 を使わない
26.
SubtreeUnpacker • コレクションの入れ子のステート管理を担当 • XmlReader.ReadSubtree()
と同じ考え方 • 処理は ItemUnpacker に委譲 ItemUnpacker • ストリームの読み取りと解釈
27.
パフォーマンスネック • MessagePackObject への
Unpack • 現在 Unpack 中の状態(型は何バイトか、要素数 はいくつか、キーなのか値なのか…)を保持 最適化 • 泥臭い メソッド呼び出しオーバーヘッド削減のため、T4 によ る「マクロ展開」(あまり効果がない気がするので、 リファクタリングするかも) FixNum や Boolean 値の MPO コンストラクタオー バーヘッド削減のためのルックアップ配列
28.
シリアライザ • 任意のオブジェクトと MessagePack
ストリーム の相互変換 • API は少数 MessagePackSerializer クラス:ファクトリ MessagePackSerializer<T> クラス:シリアライザの定 義 SerializationContext クラス:シリアライザのリポジト リ SerializerGenerator クラス:シリアライザを DLL とし て書き出す
29.
シンプル指向 • 循環参照はサポートしない サポートしても他の言語バインディングがサポートし ていない •
したがって、ISerializationFormatter ではないし、 XmlObjectSerializer でもない • 限定されたカスタマイズポイント IPackable/IUnpackable と SerializationContext
30.
ISerializable 相当の低レベルインターフェ イス Packer/Unpacker を受け取り、自分のイン スタンスフィールドの状態を読み書きする Java
版との機能的互換性が主な目的
31.
シリアライザの構成を表現 • 静的な Default
アプリケーション内のシングルトン • インスタンスとして引き回し可能 • DI コンテナフレンドリではないが、Composition Root で構成して、Default に突っ込んでおくのは 可能 • フレームワークなどを実装する場合、フレーム ワーク内で SerializationContext を保持してお き、設定の Isolation が可能
32.
シリアライザのリポジトリを保持 • 型 T
をキーにして、MPS<T> のインスタンスを保 持 • このリポジトリを直接変更することで、任意の MPS<T> 実装でシリアル化をカスタマイズ可能 • FCL の基本型のシリアライザが既定で登録済み (パフォーマンス向上のため)
33.
MPS<T> を動的に生成 • AutoMessagePackSerializer<T>
動的生成 MPS<T> の基本構成 対象の型に依存しないジェネリック処理を実装 • 動的生成 T のフィールド/プロパティに読み書きに特化したコー ド生成 ボックス化の削減 JIT コンパイルによるパフォーマンス向上
34.
Pack と Unpack
で動作が異なる • Pack は SerializationContext の設定によって、オ ブジェクトをフィールド値の配列にするか、マッ プにするのかが異なる 既定では配列(他の言語に合わせている) Map の方がデータ的に堅牢 • Unpack は配列でもMapでも来たものを受け入れ る
35.
コレクションの Unpack • IEnumerable<T>
派生型の読み取り専用フィール ド/プロパティの場合、メンバー宣言型が Add(T) を宣言していれば、それを使用して Unpack 可能 • つまり、 public IList<string> Foo{get{…}} をサポートしている。
36.
コード生成戦略 • 基本は Reflection.Emit
MPS<T> 実装型にフィールドを生成できるため T 型の各フィールド/プロパティ用の MPS<Tn> を フィールドに保持 • Silverlight4 用の DynamicMethod モード T 型の各フィールド/プロパティ用の MPS<Tn> は、実 行時に SerializationContext からルックアップ • WindowsPhone/WinRT 用の ExpressionTree モー ド ルックアップ
37.
カスタム属性なしでも「空気を読んで」対 応 [Serializable] がついている場合、 [NonSerialized] を尊重 [DataContract]
がついている場合、 [DataMember] を尊重 • Id は 0 ベース • 互換性オプションで 1 ベースにもできる (protobuf-net との切り替えを容易に)
38.
ストリームに Nil があった場合に対処方法 を、プロパティ/フィールドに付与するカ スタム属性で指定可能 •
Null にする(非 Nullable の値型だとエラー) • フィールドの値をいじらない • 常に例外
39.
実験中 コード生成とコンパイルのコストを省略す るために、MPS<T> を事前にファイルに 出力する機能 • AssemblyBuilder.Save()
するだけ
Descargar ahora