問題タブ [state-machine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
programming-languages - ステート マシン構造が組み込まれたプログラミング言語はありますか?
プライマリ言語構造としてステート マシン (boost::statechart に類似) を持つプログラミング言語があるかどうか、私はただ興味があります。
類推 - c# にはデリゲートがあり、java にはオブザーバー パターンが使用され、C にはコールバックがあります。Perl と Python には組み込みのハッシュがありますが、C++ と Java にはライブラリが必要です。
アップデート:
これは、C++、C#、Java、Lisp などの一般的なプログラミング言語である必要があります。
私は、Harel 形式や UML 状態図、boost::statechart のレベルですべての機能を備えた「成熟した」状態マシンを意味します。
recursion - Statefinalization/initialization アクティビティはリーフ ステートでのみ実行されます
Windows ステート マシンのワークフローでエンド ユーザーと通信できるようにしようとしています。StateActivity 内で実装しようとしている一般的なパターンは次のとおりです。
StateInitializationActivity: 質問に対する回答を要求するメッセージをユーザーに送信します (例: 「このドキュメントを承認しますか?」)。...
...EventDrivenActivity: ユーザーが送信した回答を処理する
StateFinalizationActivity: キャンセル メッセージ (例: 「このドキュメントを承認しますか?」)文書は撤回され、承認は必要ありません)
StateActivity が「リーフ状態」(つまり、子状態がない) の場合、これはすべて正常に機能します。ただし、状態の再帰合成を使用したい場合は機能しません。非リーフ ステートの場合、StateInitialization と StateFinalization は実行されません (この動作は、Reflector を使用して StateActivity ソース コードを調べて確認しました)。EventDrivenActivity はまだリッスンしていますが、エンド ユーザーは何が起こっているのかわかりません。
StateInitialization については、これを回避する 1 つの方法は、EventDrivenActivity とゼロ遅延タイマーに置き換えることだと思いました。StateFinalization をどうするか悩んでいます。
だから - リーフ以外の状態であっても、状態のファイナライズアクティビティを常に実行する方法について誰か考えがありますか?
qt - QStateの所有権。すべてのQStateを削除する必要がありますか?
自分の状態をmに追加しました。このコードはmystateを削除しますか?
state-machine - 有限状態マシンは前の状態に遷移できますか?
FSM が次の状態、さらには現在の状態、つまりそれ自体に遷移する状態に遷移できることはわかっていますが、状態を前の状態に遷移させること (状態 C から状態 B への遷移) は合法ですか?
c++ - C++ ライクな言語にステートマシン サポートを追加する提案
最近、本業の一環として、IBM Rhapsody を学習し、それを使用して UML から C++ でコードを生成しています。
昨日、自分の C++ コンパイラにステート マシンのサポートを追加することを考えるのはクールかもしれないと思い、ここにいくつかメモを書き留めました。
これを行う私の動機は次のとおりです。
- クールなアイデアのようです。
- コンパイラーは、現在の Rhapsody/通常の C++ コンパイラーよりもはるかに優れたセマンティック チェック (より優れたエラー チェックを含む) を実行できます。
- コンパイラ自体がステート マシンの構造を理解している場合、多くの最適化の可能性があります。
提案のようなものを除いて、それがどれほどうまく機能するかを確認するために、文法を拡張しようとするかもしれません.
その提案についてどう思いますか。読みやすそうですか?価値があるように見えますか?
編集:
ステート マシンを実行するために特定のライブラリを推奨する回答に感謝しますが、それは私の質問ではありませんでした。私は、ライブラリと私が書いたコードの両方を使用して、多くのステート マシンを実装してきました。
この変更が標準 C++ への追加に適しているかどうかではなく、C++ ライクな言語へのステート マシン拡張の設計に関するアイデアや批判などを本当に探していました。私のドメインがリアルタイム制御アプリケーションであるドメイン固有の拡張機能と考えてください。
ここで説明されているように、コンパイラで拡張機能の実装を開始しました: http://ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses
これまでのところ、提案から実装に至るまでコンセプトを大きく変更する必要はありませんでしたが、詳細にいくつかの変更があり、問題のセマンティクスの理解を深めています。
ただし、コンセプト全体に価値があるかどうかは、時が経てばわかります。;-)
c++ - ステートマシンの最適化とコード生成に関する参考資料はありますか?
C++ に似た言語拡張に関する質問としての私のステート マシンのフォローアップとして、さらにヘルプが必要です。
私のコンパイラは、ステート マシンの拡張機能を解析するように拡張されており、現在、セマンティック分析とコード生成を開始しています。このページに説明があります。
ステート マシンの最適化とコード生成に関する参考文献を教えてもらえますか?
編集:
私はまだ特定の参考文献を見つけていませんが、これは私が知らなかった興味深いプロジェクトです: http://echarts.org/
彼らは、Java 構文で、私がやろうとしていることと非常によく似たことを行っています。どうやらこのプロジェクトは AT&T で始まったようです: http://www.research.att.com/software_tools
c - 任意の桁カウンター
カウントの目的で任意の数字を使用するカウンターアルゴリズムが必要です。
私のコードはこれに似ています:
私の期待する出力:
ご覧のとおり、関数を実装するためのアルゴリズムが必要なget_next()
ので、C言語を使用することは重要ではありません。
明確にするためにIを編集します。
私のget_next()関数はこれに似ているかもしれません:
get_next(void)
次の番号を生成する関数にまたはnext(previous_number)
またはnext(digits, previous_number)
プロトタイプを使用することは、私にとって重要ではないことに注意してください。
明確にするためにIIを編集します。
私の実際のシナリオは、上記の単純な例からより複雑です。任意の数の任意の桁で機能する一般的なソリューションが必要です。
数字入力の例:
testing - 状態ベースのテスト (状態図) と遷移シーケンス
私はいくつかの状態ベースのテストの概念に本当にこだわっています...
各状態からのすべての遷移をカバーするいくつかのチェック シーケンスを計算しようとしています。答えはありますが、理解できません。
代替テキスト http://www.gam3r.co.uk/1m.jpg
今私が持っている答えは次のとおりです。
代替テキスト http://www.gam3r.co.uk/2m.jpg
私はそれをまったく理解していません。たとえば、s1 からの遷移 a/x をチェックしたい場合、ab のみを実行しますか? すでに s1 にいるので、a/x を実行して s2 への移行をテストし、次に b を実行して前の正しい状態 (s1) にあるかどうかを確認します。なぜs1がabaなのかbbなのか理解できない...
誰か私に話してもらえますか?
ありがとう
structuremap - 構造マップを使用してステートマシン/ファクトリを適切に実装するには?
のように実装された従来のステートマシン/ファクトリーがあるとしましょう
しかし、今はベスト プラクティス (TDD、SOLID...) と構造マップを使用してこれを実装したいと考えています。
単一責任の原則に従うために、各状態の処理コードを別々のクラスに入れたいと思います。また、各クラスには固有の依存関係の独自のセットがあり、それら自体がかなり複雑になる可能性があります。したがって、それらを別々のクラスに入れるのは良い考えだと思います。
では、Structuremapでこれを適切に行うにはどうすればよいですか?
これは基本的に、Objectfactory に変換したい Factory クラスであることを知っています。
私は最新の Structuremap バージョン 2.54 を使用しています。このバージョンでは、ForRequestedType の使用など、多くのことが非推奨 (または推奨されなくなった) ようです。そのため、新しい表記法を使用してこれを行う正しい方法を探しています。
ruby-on-rails - AASM ステート マシンによる Rails エラー処理
Event オブジェクトのさまざまな状態 (イベントの初期化、イベントの議論、イベントの公開など) を処理するためにrubyist-aasmステート マシンを使用しています。特定の条件が満たされない場合に状態が変化しないように、ガードを追加しました。
これはすべて正常に機能しますが、状態の変更がガードによって拒否された場合、エラーは表示されません。状態が変化していないことを確認する方法はありますか? 状態を手動で確認することはできましたが、それは醜い解決策のように思えます。