入力モードを整理する(3)

前回の続きです、と言いたいのですが、あれから随分と日が経ってしまったこともあり、いろいろぐちゃぐちゃこねくりまわして考えが変わった部分もあり、その経緯をまたおさらいしていくのはちょっとつらいなということもあり(そうです言い訳ですごめんなさい)、最終的にはこんな形になりました、ということでハレルのステートチャートっぽいやつを紹介します。


http://aquaskk.sourceforge.jp/images/statechart.png


こういったものをコードに落とす場合には、状態遷移やパラメータなどを記述した XML などから C/C++ のコードを自動生成するのが旬なやり方です。自動生成することで単純なコーディング作業から解放され、パターンも網羅され、間違いもなくなります。もし新たな遷移が必要に(あるいは不要に)なったら、データを修正して生成し直せばいいのです。とても合理的です。


ただ、これはややもすると人間とコードの距離感が広まり、コードに手を入れるのが怖くなります。自動生成で構築した美しい秩序(あるいは、難解で醜いコードの塊)を壊すことにならないか。あるいは、再度自動生成をする必要が出てきた時に、カスタマイズした部分が上書きされてしまう問題にどう対処すればいいのか。このあたりが葛藤になります。


そこでいろいろ思うところがあり、今は「マトリョーシカ本」を購入して勉強中です。

Practical Statecharts in C/C++: Quantum Programming for Embedded Systems

Practical Statecharts in C/C++: Quantum Programming for Embedded Systems

この本では、人間が理解可能かつメンテナンス可能な形で状態遷移を実装するためにはどうしたら良いかという視点で考察し、いくつかの現実的な解を提供しています。蓋を開けてしまえば構文糖マクロと関数ポインタなのですが、思わず「なるほど」と頷いてしまう箇所が多いです。ステートチャートがそのままストレートにコードとして表現されているのが良くわかります。つまり、シンプルで理解しやすい。これが最大の利点でしょう。


一方で、boost のテンプレートベースのアプローチによる洗練されたライブラリも魅力的に映ります。
http://boost-sandbox.sourceforge.net/libs/statechart/doc/index.html


具体的にどうするというのはまだ決まってませんが、AquaSKK の新エンジンも、シンプルで理解しやすいものを目指します。