あざらしとペンギンの問題

主に漫画、数値計算、幾何計算、TCS、一鰭旅、水族館、鰭脚類のことを書きます。

動的言語で30行以上書くのはつらい

タイトルそのまんまです。

少し前の記事で Java をそのまま埋め込むことができる動的言語 Groovy についてお話しました。結論としては Groovy は Java を簡単に書ける Java Script である、と書いたのですが、その使用についていくつか思うところがあったので、さくっと書いておきます。これは他の動的言語、例えば PythonRuby などにも当てはまることです。

まず、動的言語の利点については多くの人がそれを享受していることでしょう。基本的に変数宣言がいらない、多くは REPL シェルを備えているので、1行だけ実行してすぐに結果を確認できる、また、結果を見て様々な処理を試してみるのに適している、などでしょう。このような特徴は、ちょっとした計算から画像処理や科学技術計算まで、やってみて結果を見ながら考える、という用途に適しています。概ね MATLABMathematica などのように使えるといえば早いでしょう。無論、スクリプトによるバッチ処理も簡単なものであればすぐに書けてしまいます。

一方で、動的言語には弱点もある、ということを前に少し書きました。今回の話はそういうことです。

30 という数字は、エディタでひとつの画面に全文を表示できる程度、という意味で決めました。私としては 20 行でも少しつらいかなーといったところです。

で、具体的に何が問題なのかと言うと、

実行してみないとエラーが出ない

ということに尽きます。もちろん例外はありますが、多くの処理系ではコンパイル時に検出できるようなミスさえ実行時にならないと分かりません。というのも、変数に入るオブジェクトが文脈に依存して変わることがあるので、それに何の操作が適用可能かが実行時にならないと分からないためです。人の3倍はミスをする筆者にとっては由々しき問題と言わざるを得ません。

そのような性質から、動的言語で何百行〜も書くのは相当神経を使う作業になるでしょう。動的言語は実験には向くが開発には向かない、というのが筆者の感想です。というわけで、そろそろつらくなってきたので、筆者は開発言語としては静的言語を使うことを選びました。C、C++Java は静的言語として広く使われていますが、敢えて Scala や Rust といった関数型ベースの言語を選びました。理由は型推論によって明示的に型を指定しなくてもプログラムが書けること、当然ですが型のミスマッチがコンパイル時に検出されることがあります。また、ScalaJava 系の言語であり、ほとんどの場合で Java で書くよりも簡潔に Java を書くことができます(妙な表現ですが、実際そうなので)。もちろん、Java のライブラリを使うこともできます。

さて、おそらく 30 行にも達していないでしょうが、もう限界です。さようなら。