プログラミング言語の動的性

最近、言語の動的性が非常に重要ではないかと思っている。C++Javaでも大きいアプリを組む場合は汎用性を持たせたい部分を動的な仕様にする。その意味で、DLLやCOM(など。他はあまく詳しくないので分からない)、Javaのリフレクションは非常に重要だと思う。しかし、言語が初めから動的であると、単なるロジックを処理する部分まで動的になってしまい遅くなる。その部分だけC++Javaで組んで、リンクやimportすれば良い。また、動的だけでなくメタも絡んでくるが、そこまで理解できていないので、GroovyのMOPを勉強するまでは保留。


最近、GroovyやCythonをチェックしているとテストはソースのまま実行して動かし、リリースするアプリはコンパイルしたものというやり方が一般的になりつつある気がする。HaskellやGroovyなどそうだし、言語と共にREPL(Read-eval-print loop)な環境があるとテストや勉強がラク。例えば、REPLな環境で、オブジェクトのメソッド一覧を表示して、help関数などでヘルプを表示したりできる。動的言語でも型宣言をオプションで使用できるようにすれば静的言語のソースコードや静的言語のバイトコードなどに変換できる。汎用化する分のオーバーヘッドはあるが、十分なパフォーマンスは出ると思う。


やっと最近Javaでも実用的なアプリが開発できるようになってきたというレベルな気がするので、C++がGroovyなどの動的言語に置き換わるまでは、10年以上の年月が必要かもしれないが、ウェブ系ではRubyPythonがかなり普及してきて、今後はデスクトップアプリでもGUIとしてIEFirefoxなどのブラウザが使われるようになってくると思うので、開発言語の主流が動的言語に置き換わるのは、それほど遠くないかもしれない。


もしGroovyのようにPythonに型宣言がオプショナルで付いて、Cythonも標準に組み込まれれば最強ではないかと思う。今後開発される言語は以下の2つになってくると思う。


そして、遅い部分はそれぞれC/C++Java(C#)で記述して、簡単にリンク/importできる。