自作アプリのGUIと3Dグラフィック用の言語

低レベル言語と高レベル言語を組み合わせる場合、一般的に高レベルな言語から低レベルな言語を呼ぶのが普通だと思われる。今、仕事に関係したプライベートなメインのアプリをPythonで書いていてJava 3Dでグラフィックを描かせる事を考えていたが、Jythonを使ってもJavaからPythonを呼び出すのが一般的ではないということを知った。逆のPythonからJavaを呼び出すのならOKらしい。


そもそもPythonでメインのアプリを組んでいるのが問題だと思い、C言語化を考えたが、どっちにしてもCとJavaでは相性が悪い。Javaを使用すると決めたらJavaをメインにする必要がある。しかし、パフォーマンスを考えるとそれは避けたい。PypyでJavaに変換できたとしても現実的ではないと思われる。


やはり色々な言語を組み合わせる場合、C言語を使用するのが一番無難だと思った。C言語でメインの部分を作り、Pythonから呼び出すのならSwigや自力で何とかなりそう。wxPythonも確かSwigを使っていたと思うので実績から言ってもOKだと思う。そこで、慣れているPythonでリファレンス実装を行い、単純な置き換えでC言語化していく方針にした。C言語での置き換えが面倒であれば最悪の場合、Pythonのみをメインにすることにした。CythonがPythonの全ての機能に対応してくれれば、かなり色々できそうだし。


次に、GUIと3Dグラフィックを何で行うかだが、やはりC++が一般的だが、いくつかの問題がある。最大の問題は言語の習得が難しいのと実装に時間がかかるということである。GUIを組む上でMFCは難しいし、C++自体がメモリ管理やテンプレートなど難しい。参考資料や書籍はたくさんあるが、勉強とアプリ実装の時間があまり取れない。


そこで、資料や書籍は少ないがD言語を検討することにした。D言語ならGCや高機能であるおかげで実装が楽そうだし、ゲーム関連の実践的な資料が参考になりそう。3DはSDL+OpenGLGUIとしては、とりあえずwxDを検討。問題としてはバージョンの問題でコンパイルが通らなかったり、環境的な問題で分からなかったりということがありそう。しかし、仕事が忙しくて時間があまりないのと、ずっと使っていけそうという感じがするのと、パフォーマンスやC/C++との相性が良さそうということで、少し試してみることにした。Java系の言語には若干がっかりした。Javaでベースを作って、Pythonで呼び出すなど私は全く魅力を感じない。という訳でGroovyの勉強はとりあえずPendingかな。でも何でD言語流行らないのだろう?言語が安定していないから?ライブラリが少ないから?言語の特性から言って、微妙な位置づけの言語なのかもと思った。