cppcon2016 report and boost.sml

24
CppCon2016 参参参参 参参参参参参参 Boost.SML Takatoshi Kondo 03/03/2022 1

Upload: takatoshi-kondo

Post on 14-Apr-2017

473 views

Category:

Software


1 download

TRANSCRIPT

Page 1: CppCon2016 report and Boost.SML

CppCon2016 参加報告急速に進化する Boost.SML

Takatoshi Kondo

05/03/2023 1

Page 2: CppCon2016 report and Boost.SML

発表内容

05/03/2023 2

• CppCon2016 参加報告• Boost.SML ( msm-lite )

Page 3: CppCon2016 report and Boost.SML

自己紹介

05/03/2023 3

• 近藤 貴俊• ハンドルネーム redboltz• msgpack-c コミッタ– https://github.com/msgpack/msgpack-c

• MQTT の C++ クライアント mqtt_client_cpp 開発– https://github.com/redboltz/mqtt_client_cpp

• MQTT を拡張したスケーラブルなbroker を仕事で開発中

• C++Now(BoostCon) 、 CppCon 2016 など海外カンファレンスに参加、発表

Page 4: CppCon2016 report and Boost.SML

CppCon2016 参加報告

05/03/2023 4

Page 5: CppCon2016 report and Boost.SML

2 大 C++ カンファレンス

05/03/2023 5

• C++Now (旧名 BoostCon )

• CppCon

Page 6: CppCon2016 report and Boost.SML

2 大 C++ カンファレンス

05/03/2023 6

C++Now CppCon

開始年 多分 2007 2014

場所 コロラド州アスペン ワシントン州ベルビュー

キャパシティ

約 200 約 900

開催時期 5 月中旬 9 月下旬開催期間 約 1 週間 約 1 週間参加費用 約 $700 (早期登録 early bi r d 価

格)約 $880 (早期登録 early bird 価格)

日本からの所要時間

約 15 時間( 2 回乗り換え) 約 9 時間(直行)

Page 7: CppCon2016 report and Boost.SML

2 大 C++ カンファレンス

05/03/2023 7

• CppCon2016 に初めて参加– プロによる運営( C++Now はコミュニティ的)– 並行して 5 つくらいのセッション• Keynote は単独開催• 今回はあまり迷わなかった• C++Now では 2 ~ 3 セッション

– 動画の公開が早い!– カメラワークがプロ!– 行くのが楽!– 飯がうまい!

Page 8: CppCon2016 report and Boost.SML

CppCon2016 セッション

05/03/2023 8

• https://www.youtube.com/user/CppCon– Jason Turner

• コモドール 64 と最新 C++ のコンボ– https://www.youtube.com/watch?v=zBkNBP00wJE

• パフォーマンス向上のための practice– https://www.youtube.com/watch?v=uzF4u9KgUWI

– Herb Sutter• pointer like オブジェクトの選択指針

– https://www.youtube.com/watch?v=JfmTagWcqoE

– Nicholas Ormrod• facebook の string

– https://www.youtube.com/watch?v=kPR8h4-qZdk

– David Watson• facebook の folly の経験

– https://www.youtube.com/watch?v=GDxb21kEthM

– 日本人 2 人の LT• https://www.youtube.com/watch?v=rXVg07rtSiI• https://www.youtube.com/watch?v=N1cWgqmWSio

Page 9: CppCon2016 report and Boost.SML

急速に進化する Boost.SML

05/03/2023 9

Page 10: CppCon2016 report and Boost.SML

msm と sml の違い

05/03/2023 10

Boost.MSM ( Meta State Machine )は、コンパイルタイムにステートマシンを構築するライブラリ。https://www.amazon.co.jp/dp/4798120391/

書籍 C++ テンプレートメタプログラミングで紹介された Dave Abrahams のアプローチに基づく。C++03 で使える。

Page 11: CppCon2016 report and Boost.SML

msm と sml の違い

05/03/2023 11

https://boost-experimental.github.io/msm-lite/cppnow-2016/#/

Boost.Experimental.SML (State Machine Lite?) は元々、msm-lite と呼ばれていた。C++Now 2016 で作者の Kris Jusiak により紹介された。C++14 が必要

https://www.youtube.com/watch?v=j0J33BnIjnUhttps://boost-experimental.github.io/msm-lite/cppnow-2016/#/2/40

Page 12: CppCon2016 report and Boost.SML

Simple State Machine

05/03/2023 12

http://melpon.org/wandbox/permlink/rUGxwncK43oxh1lH

Simple

State1entry / on_entryexit / on_exit

Event1

" 状態名 "_s + event< イベントクラス名 > / アクション = 遷移先状態

X は predefined

トリガとなったイベント任意のイベントで

状態に entry / exit

初期状態マーク

Page 13: CppCon2016 report and Boost.SML

InitAction

05/03/2023 13

http://melpon.org/wandbox/permlink/dLABZnhwYYSF40Jk

InitAction

State1entry / on_entryexit / on_exit

Event1

/InitAction

初期遷移によるentry のみに反応

その他の entry に反応

Page 14: CppCon2016 report and Boost.SML

internal / self transition

05/03/2023 14

http://melpon.org/wandbox/permlink/Qg8ClxJeqtzcjvop

Internal and self

State1entry / on_entryexit / on_exitEvent2 / Action2

Event1/Action1

遷移先に自身を記述

遷移先を書かない

Page 15: CppCon2016 report and Boost.SML

junction pseudo state

05/03/2023 15

http://melpon.org/wandbox/permlink/QVSVShg20bB9gWjT

Junction pseudo state

State1

[val == 1]/Action1

Event1(val)

[val == 2]/Action2

Junction pseudo state

State1

Event1(val)[val == 2]/Action2 Event1(val)[val == 1]/Action1

このように分割して記述

ガードは [] で記述。ラムダ式は [[](){}] と書きたいが、[[ が使えないため、 [([ と括弧を追加

Page 16: CppCon2016 report and Boost.SML

if else branch

05/03/2023 16

http://melpon.org/wandbox/permlink/aNHaQ95nE8PAwAZ8

Junction pseudo state

State1

[val == 1]/Action1

Event1(val)

[else]/Action2

評価順序は上から下へ

ガードは [] で記述。ラムダ式は [[](){}] と書きたいが、[[ が使えないため、 [([ と括弧を追加

Page 17: CppCon2016 report and Boost.SML

choice pseudo state

05/03/2023 17

Choice pseudo state

State1

[val == 2]/Val1Branch

Event1/++val

[else]/ElseBranch

val=0

http://melpon.org/wandbox/permlink/djTylkI5aOItxCUX

イベント発生時にアクションも処理され、その結果を次のガードに反映できる

かならず、どれかのガードにマッチするように書かねばならない( UML 的には)

任意のオブジェクトを参照としてぶら下げられる任意のオブジェクトを参照としてぶら下げられる

Page 18: CppCon2016 report and Boost.SML

defer event

05/03/2023 18

http://melpon.org/wandbox/permlink/NxKOXEq65uWT5tVR

Defer event

State1

Event2

Event1/defer

State2

Event1/defer

State3 State4

Event2

Event1

State5

Event1

State6

Event1

遅延

キューイングされる

状態確認

Page 19: CppCon2016 report and Boost.SML

SubMachineState

05/03/2023 19

Sm

State1:Sub State2Event1

Sub

State1 Event2 State2

Event3

http://melpon.org/wandbox/permlink/NfeN0TUiAvdvn33j

サブマシン指定サブマシン指定サブマシン指定サブマシン指定

サブマシンの状態確認

Page 20: CppCon2016 report and Boost.SML

まだサポートされていない要素

05/03/2023 20

Sm

State1:Sub State2:SubEvent1

Sub

State1 Event2 State2

Event3

同じ Sub を複数の state で使う同じ Sub を複数の state で使う

現状では、 notation が無い

ここに state 名をつけられない 。"State1"_s とか。 こっちを state<Sub> にすると区別がつかない

Page 21: CppCon2016 report and Boost.SML

まだサポートされていない要素

05/03/2023 21

Sm

State1:Sub State2

Sub

State1 Event2

現状では、すぐに親の transition が発動してしまう

Sub の終了まで、親の anonymous transition を行わないSub の終了まで、親の anonymous transition を行わない

Page 22: CppCon2016 report and Boost.SML

まだサポートされていない要素

05/03/2023 22

Register finger print

RightScanning:ScanFinger

ScanOnly

Waiting

Start Button Pressed / “Right hand please”

Exit1

LeftScanning:ScanFinger

entry / “Press Start Button”

Completed(result)[result == OK]/ “Register Completed”

Exit1completed(result)[result == NG]/ “Register Failed”

completed(result)[result == NG]/ “Register Failed”

ScanOnlyCompleted(result)[result == OK]/ “Left hand please”

ScanFinger

AliveChecking

Exit1

ScanninngScanSucceeded / ConvertEvent:Completed(OK)

ScanFailed / ConvertEvent:Completed(NG)

ScanOnly

CheckSucceeded

CheckFailed / ConvertEvent:Completed(NG)

entry point pseudo stateexit point pseudo state

Page 23: CppCon2016 report and Boost.SML

その他情報

05/03/2023 23

• ロギングサポート– http://melpon.org/wandbox/permlink/8SKlNUGGt

Kru2r72• マルチスレッドサポート– http://

melpon.org/wandbox/permlink/XmhmVdFOmbNP0xRM

Page 24: CppCon2016 report and Boost.SML

まとめ

05/03/2023 24

• Boost.SML は軽量で、可読性の高いステートマシン表現が可能• sub machine 周辺がまだ実装中• デバッグが比較的容易• マルチスレッド対応