「Pythonでscriptableになるようにプログラムを開発してはどうだろうか」を改題しました。
C++で開発しているが開発速度があがらなくて苦労している。しかし、その苦労は、Pythonとの連携を前提とした枠組みを使えば、開発速度を上げることができることを知っている。その方策を示します。
今までに、pythonの使える市販アプリケーションを利用したことがある。そのとき感じたことを元に、Pythonでscriptableになるようにプログラムを開発することを提案します。
GUI操作の限界
アプリケーションの機能を利用するために、GUIでメニューから選択して実行を繰り返すのでは、まとまった量の処理をするのが大変になります。
固有のスクリプトの限界
だからといって、そのアプリケーション固有のスクリプト言語を作るのは得策ではない。単なるジョブの投入だけの単純なものであっても、いつの間にか変数がほしくなったり、制御構文がほしくなったりするのはよくあることだ。そのような単純なはずの固有のスクリプト言語をメンテナンスするのは面倒な作業になっていく。
scriptableなアプローチ
このような状況を打破するアプローチのひとつが、アプリケーションをpythonでscriptableに作ることです。Pythonは商用製品に用いてもよいライセンスであり、C/C++言語で書かれたモジュールをpythonから利用することができます。
私が利用したそのアプリケーションでは、そのアプリケーションにリンクされたpythonが最初から用意されていて、そのpythonから、そのアプリケーションのライブラリをpythonのライブラリとして利用できるようになっていました。そのことは次のような利点を持っています。
利用者にとっての利点
・スクリプト言語としては、使い慣れたpython言語を使える。
・アプリケーションの機能は、pythonのクラスや関数として利用できる。
・python言語の豊富なライブラリを使える。
・site-packagesにライブラリを追加してinstallできるので、機能を追加できる。
アプリケーション開発者にとっての利点
次にアプリケーション開発者として見たときの利点はこういうのがあると思う。
・アプリケーションのためのスクリプト言語として、使いやすい最強の言語の一つを使える。
・動作させたいことの検証を充実した標準配布のライブラリ、準標準的なサードパーティのライブラリで早めにできる。
・C/C++による最適化が必要ではないときには、Pythonの既存のライブラリ(標準ライブラリ、その他のPythonライブラリ)を使うことで開発の工数を節約することができる。
・Pythonの拡張としてC/C++言語で書かれたモジュールを実装するので、モジュールの設計を意識するようになる。
・C/C++で書かれたライブラリも、Pythonインタプリタからhelpで使い方を参照することができる。
・Python言語のインタフェースではモジュールの単体テストがしやすい。
・pythonインタプリタを使って対話的にモジュールの利用ができるので、モジュールを臨機応変の使い方ができる。
・OS依存性が少ないライブラリで、マルチスレッドのコードが書きやすい。(どのライブラリはthread safeだったはずなどと心配する必要がない。)
・プログラムの上位層の設計が、pythonのスクリプトにできるので、上位層の見直しをしやすい。
・プログラム全体ができあがっていない時点でも、実装済みのモジュールの評価ができる。
・モジュールの評価のためにpythonのmatplotlibなどのグラフのライブラリでチェックするのが簡単です。
・そのような評価をプログラムの部品レベルで実行できるので、実装するプログラムの根幹をなすアルゴリズムについての理解を深め、早めに誤解を解く事ができます。
・C/C++で開発する部分は、Pythonの拡張モジュールとして実装するので、C/C++部分が依存性が込み入った厄介なライブラリになることを防げます。
・Python用のライブラリとして開発するので、作成したライブラリの単体テストがしやすくなります。
C++の巨大なアプリケーションとして作成すると、必要な変数の初期化を完了させて、テストを可能な準備をして、テスト用のアプリケーションを作るまででも一作業になります。
・Python用のライブラリとして開発するので、組み込むモジュールの設計を十分に決定して、出戻りの生じない設計として確定させるのがしやすい。依存性を減らすことが必須になるので、externなどのC/C++言語で生じる設計上の荷物になるものが減らすことができます。
ROSにしてもTensorFlowにしてもpythonインタフェースが提供されている。あなたの開発の分野でもPythonを使ってみてはどうでしょうか?
画像関係のソフトウェアでは次のようにPythonをスクリプト環境が利用できるものが多い。
Maya
Blender
Corel Paint Shop Pro
GIMP
Inkscape
Metasequoia
Poser
RenderMan