An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl sada@ecn
Introduction 7つのプログラミング言語で同じ処理をするプログラムを書いてもらうテスト 複数の人が実験台に プログラムの種類 Z1000:1000個の電話番号をランダムに生成 M1000:1000個の任意の電話番号(空を含む) Z0:電話番号を生成しない(初期化処理測定用) 電話番号をアルファベットに変換し辞書から検索
Results – Run time 初期化処理(z0) サーチ処理(z1000) C, C++は速い スクリプトではPerl, Pythonが速い サーチ処理(z1000) Rexx, Tclだけやたら遅い
Results – Memory consumption メモリ消費量はC, C++が最も少ない Javaが最も多い スクリプト言語は意外にメモリを食わない
Results – Program length and amount of commenting スクリプト言語はプログラム行数が短くて済む そのせいか、プログラム中に含まれるコメントの比率が高い
Results – Program reliability Z1000テスト C, C++, Perlが正しくない答え Javaがクラッシュ M1000テスト JavaとTclとPythonでクラッシュしたのが出た ・・・これはプログラムが変なのでは?
Results – Work time and productivity コーディングにかかる時間はスクリプト系がやはり短くて済む LOC/hour (Line Of Code) Tclで時間がかかり気味の人がいる
Results – Program structure スクリプト系の場合 電話番号をキーにして、データを連想配列に サーチの処理は連想配列を使って簡単に記述できる 非スクリプト系の場合 配列に入れる データ構造をツリー状にする、という手もある サーチの処理は自前で書かなければいけない C++, Javaはハッシュテーブルのクラスが用意されているのに、使わない人が多い
Conclusion C, C++, JAVA 実行速度 ○ △(しかし許容範囲) メモリ △(←の倍くらい食う) 生産性 Perl, Python, Rexx, Tcl 実行速度 ○ △(しかし許容範囲) メモリ △(←の倍くらい食う) 生産性 △(コーディング時間がスクリプト言語の倍くらい) 信頼性