2019年4月20日土曜日

Pythonで言語制約構想

PhaseとTaskの実装が大分進んだので、言語化にも手をつけようと思ったのですが、この際、こちらも大変更し、一気にPythonでの言語制約にしようという話です。 現在言語制約は、自作のインタープリタで制約していますが、Pythonで制約を記述できればそれがベストです。また、結果もPythonで処理すれば、制約の検証というステージでも一貫した処理系になります。自作インタープリタへの実装が面倒になった、というのが実態ではありますが、こういう機会を捉えて機能拡張してメンテナンスを容易にしていくというは、良い開発の方向性であると、長年の経験から言えます。

今までLARKを使ったDSL in Pythonをイメージしていたのですが、DSL構想は止めます。
上記は、現在のスタイルですが、言語記述は、自作インタープリタが行っています。これを
Pythonによるものに置き換えます。
Pythonで言語制約するには、Person、Day,Shift、Phase, Taskといった集合情報を入力する必要があります。これらは、一度RUNすれば、Pythonソースファイルとしてソルバが出力することは出来ます。GUIに吐かせることも設計可能です。とりあえずは、ソースファイルを利用して記述するものとします。

Pythonでは、任意の制約オブジェクトを外部関数(C/C++で記述、ソルバーの制約関数を呼び出す)を呼び出せれば、Pythonで言語制約が出来ることになります。

さらなる構想としては、ソルバ自身もDLL化すれば、ソルバのSolveをループでき、パラメータの最適化チューニング、データを積み重ねての機械学習も可能になります。
最近のVisualStudioは、Python処理系も装備しているようです。これを用いれば、Print文が不要でスマートにデバッグできるようになります。これは、将来的な構想です。

言語制約を使ったSC2プロジェクトでは、SC3プロジェクトと互換がなくなってしまいます。(言語制約を書き換える必要が生じます。)

今日サーベイして言語化方針を定めました。


0 件のコメント:

コメントを投稿