提案を追加statemachine支援のC++言語
-
13-09-2019 - |
質問
最近の一環として、一日の仕事って学習IBM Rhapsodyを使用することでコードをC++から成。
昨日はまさしくされることが涼を考える追加国家機なっC++コンパイラでjotted a few notesはこちら http://ellcc.org/wiki/index.php/State_machines_and_Active_Classes
私の動機これを実行します:
- そのような涼しいアイデアです。
- のコンパイラがなければならない意味を確認(より良いエラーチェック)現在のRhapsody/通常のC++コンパイラです。
- 多くの最適化可能性がコンパイラのそのものを理解してマシン構造です。
いがあるのでしょうかを延長する文法のを除くもののような提案がどことができる。
いてはどのように考えているの案ですよ?いという印象をもち読みや?ん掴んだりとか。
編集:
の答えを推薦特定の図書館のない状態機械ではな私の質問です。私は実に多くの状態機械の両方を用い図書館とコードのよう書かれています。
私はアンスオパンビーチなどの見所に対する批判など。のデザインのマシンへの拡張C++言語なのかこの変更により適した、標準C++.それを考えとして、ドメイン固有の拡張であるが、私のドメインのリアルタイム制御アプリケーション
きっかけでの実施の延長は私のコンパイラとしてここで記載している: http://ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses
これまでの概念がなかったので変更からの提案を実施、そして少しだけ変更の詳細私は精製のものに意味の問題です。
時間になっているかどうかを通知コンセプト全体においては、任意の値にしています。;-)
解決
いくつかの例外を除いて、C ++は、伝統的にクラスライブラリではなく、新しいキーワードを使用して拡張されました。ステートマシンは、簡単に私はあなたの提案がチャンスの多くを持っているとは思わない、このようなライブラリーを使用して実装することができます。
私はあなたの提案に見る一つの問題は別の状態に行くための「後藤」の使用です。私は、状態遷移の中に自分のコードにはgotoを使用したい場合はどうなりますか?
他のヒント
優秀な作品は、あなたが何をやったかの開発します。あなたはおそらくやったようなものが可能であるが、私はそれが今までC ++になるだろう疑わしいです。言語自体にそれを作るほとんどの変更は、人々がより便利で強力なライブラリを記述できるようにするためにのみ含まれています。
ステートマシンのサポートを提供し、ここでライブラリがあります。私はそれを試していないが、それはあなたが興味かもしれない、とあなたは他の人がそれを利用することを許可するには、このようなライブラリとあなたのアイデアを組み合わせることができる可能性があります。
http://www.boost.org /doc/libs/1_34_1/libs/statechart/doc/index.htmlする
それとも、あなたが提案として、あなたはあなた自身の拡張機能を開発することができ、そしてそれは、少なくともあなたのために有用であろう。あなたがC ++の独自の拡張版を作成できない理由がないように、Microsoftは、いくつかの拡張のキーワードを実装します。
来る新しいアイデアをしてくださいます。
あなたは他のスマート開発者はCに似た言語にステートマシンのサポートを追加する方法を見てみる必要がありますUnrealScriptの言語リファレンス
に。 「国」という名前のセクションを参照してください。のUnrealScriptは時の状態をサポートしています 言語レベル。 UnrealScriptので、各 世界で俳優が一つに常にあります 一つだけの状態。その状態が反映され アクションは、それが実行しよう。ために たとえば、移動ブラシはいくつか持っています 「StandOpenTimed」などの状態 "BumpOpenTimed"。ポーンはいくつか持っています そのような「攻撃」、「死ぬ」などの状態、 そして「さまよいます」。 UnrealScriptのでは、あなた 機能やコードを書くことができました 特定の状態で存在します。これら 機能だけ呼び出されたとき 俳優がその状態になっている。
これは面白いアイデアだが、私はあなたが実際に正式にC ++を拡張するよりもステートマシンのための独自のドメイン固有言語を作成し、より良い運を持っていると思います。 C ++は、非常に汎用プログラミング言語として設計されています。私はブーストがC ++は、ほとんどの機能がライブラリを使用してきれいに実現できることは十分に柔軟であることを証明していると思います。また、標準C ++はまださえ組み込まれていません。2009年のような支持体をスレッド、(それは0Xで計画されている)程度に、非常にゆっくりと進化します。だから、委員会はいくつかの時間のために、この追加を検討する可能性は低いです。
あなたの解決策は見えません。
私はまた、あなたがより良い意味検査を提供することができ、どのように確認していません。そして、私はあなたが多くの有用なコードの最適化を適用できることを疑うます。
しかし、より良い最適化と意味検査を可能にするために、あなたはまた、新しいキーワード(例えば__change__ newState
)で「後藤」を交換し、状態変化のために後藤を禁止すべきです!いつものように地元のジャンプのためのgotoを許可します。
次に、コンパイラは可能な遷移のリストを抽出することができます。
読みのご提案は、以下のコメント:
あんなキーワードを宣言すると定義し、実態をふんだんにつかったリビング。いに関する単一のグローバルなマシン(およびその単一のグローバル状態)?どのような関
__active__
?最も近い比較の建C++言語による実際のenum.なぜないの延長です。
があると考えられるとの接続を定義イベントや国か失敗していませんのでご注意くださのを実装します。
なぜスレッドおよびパートの必要は全くないのでしょうか。一部使用の場合の状態機械のメリットを享受であって、良い提案はこれらのエクスペディア.最も重要なのはこの使用を標準C++0xす。
個人的には、私の列挙型の構文:
enum Foo {
red, blue, green; /* Standard C++ so far - defines states. State list ends with a ; not a , */
Foo() { *this = red; } // Reuse ctor syntax, instead of __initial__
~Foo() { } // reuse dtor syntax, instead of __onexit__
void Bar() {/**/} // Defines an event, no return value. Doesn't need keyword __event__
};
で自然に使用できることとを宣言するイベントをヘッダとして定義しました。cppファイルです。私は全く身に覚えがないのですが必要とすることを示す書式]ここで、C++のプログラマでいます。タイアップムービーの遺構文を合わせた状態:
enum DrawingObject : public Shape, public Color { /** } // allows (red && circle)
とんかの点がご提案ではなく、新しいキーワードに、すべて再利用することにより、親しんでいる構文です。