Boost.Statechart(旧boost::fsm)とBoost.FSM次のBoostライブラリのリリースではboost::fsmはBoost.Statechartというプログラム名になります。それとは別にBoost.FSMと いう名称で新しいFSMが提案されました。レビュー用のソースとドキュメントがここに有ります。Boost.FSMは単純で実行時のパフォーマンスを目指した実装とのことのようです。以下に有限状態マシンの実装にBoost.Statechartと Boost.FSMのどちらを選択したら良いかを記述したBoost.FSMの文章を載せておきます。 Boost.FSMを利用すべき場合
Boost.Statechartを利用すべき場合
※単純な有限状態機械の実装を素早く行いたい場合はBoost.FSMを、より実践的な有限状態機械の実装には Boost.Statechart(旧boost::fsm)を使いましょうといったところですか。 |
|
boost-1.31の利用を始めたので、簡単なインストールの方法を記載しておきます。 より詳しくは、正式なドキュメントや手引きがBoostライブラリドキュメント翻訳プロジェクトかLet's boostでいずれ公開されるでしょう。 それまでのツナギです。
先ず次のファイルをダウンロードしてください。
○ActivePythonのダウンロードとインストール
○環境変数 PYTHON_ROOT へActivePythonのインストール先を設定
○DOS窓を開き、VSVARS32.BATを実行
○bjamによるライブラリファイルの作成
カレントディレクトリを、展開したboost-1.31.0の先頭ディレクトリへ移し、以下のコマンドを入力します。
stage下には同じ様な名前のLIB関数が幾つか作成されますが、コンパイルパラメータ (静的/動的、デバック/ノーデバッグ、マルチスレッド/シングルスレッドなど)が 異なる毎に異なるDLL/LIBが作成されるためです。詳しくは、boostのドキュメントを見てください。
boost-*-*.lib は静的ライブラリ ※コンパイル時にマクロ宣言が必要なライブラリもありますので注意して下さい。少し鬱陶しいですがデバックレベルを上げてやるとコンパイル時のコマンドを出力させることが出来ます。 例えば、「bjam "-sTOOLS=vc7.1" -d2」などとします。 ※Python2.3を利用する場合は、bjamを実行する前に「tools/build/v1/python.jam」で定義されている「PYTHON_VERSION」を「2.2」から「2.3」へ変更してください。 「PYTHON_ROOT」と同じように環境変数として宣言しておくのも良いかと思います。
|
|
boost::fsm は有限状態モデルをサポートするGENERICクラスライブラリです。 標準のBoostライブラリではなく、たたき台のためのディレクトリ(sandbox)にあります。 最終的に、標準ライブラリに組み込まれないかもしれないし、もし組み込まれるとしても 少し先になると思います。しかしながら、技術・理論的な基本はしっかりと押さえていますので、 状態遷移モデルに興味ある方は評価ならびに実装にトライしてみることをお勧めします。 boost::fsmの入手先はhttp://boost-sandbox.sf.net/fsm.zipです。
boost::fsmのドキュメントの日本語化今のところチュートリアルだけですが、日本語化しました。ダウンロードはこちら(fsm-tutorial-jp.pdf)からお願いします。 英語は苦手な上に始めて翻訳らしきことをしたので、訳自体が非常に怪しいです。間違い等のご指摘を期待しています。 意味不明な箇所は原文を当たってください。念のため、原文に日本語訳をマージした文書も公開しておきます。 |
|
一応、SEMIスタンダードで定義されている主な遷移図に関しては、動作の確認が出来 ましたのでJYUGEMへ組み込みを始めます。GEM300に関連する状態遷移モデルのサンプルは、 ControlJobとProcessJob、Carrier、LoadPort、CIDRWを最新のboost::fsmに対応しました。 入手先はhttp://sourceforge.jp/projects/jyugemのboost-semi-*.zipです。 キャリアのように2値状態まで状態遷移クラスとして宣言することは、 やりすぎのような気もしましたが、状態変化に伴うイベント発行があるため、 処理を個々に力ずくで記述するよりは、コードの見透しと拡張性の点で優れている と考えてクラスとしました。なにより、boost::fsmの直交状態(orthogonal state)処理の 負荷が軽いことが、クラスとして実装してた最も大きな要因であります。 |
|
プログラムのフロントにPython-2.3を使っていきます。とりあえず、ControlJobとProcessJobを
ラップしてみました。リフレクション機能にPythonが利用できるかの調査も兼ねています。 |
boost::spiritによるVFEI構文解析boost::spiritの評価のためにVFEI(Virtual Factory Equipment Interface)コマンド解析プログラム(sourceforge.jpのboost-semi-*.zip)を作成してみました。 K.INABA 氏いわく、「変態的(褒め言葉)・・・」と表現されていますが、
「変態」という言葉に惑わされないようにしましょう。boost::spiritを利用すると簡単にオーソドックスな字句解析プログラムが構築できます。 ※データ型の解析部分をboost::spirit::symbolsから継承する方法へ変更すると共にboost-1.31.0(開発版)でコンパイルしました。
|
|
boostには含まれていませんが、pqsを評価してみましたのでサンプルプログラムを掲載しておきます。 ※boostライブラリに組み込まれるレビュー対象となりましたが残念ながら却下(取り下げ?)されてしまいました。 違うユニットプログラムが提案されるようです。
○pqsのダウンロード
○サンプルプログラム
ソースファイルは、これ(boost-semi-*.zip)です。 |