An empirical comparison of C, C++, Java, Perl,

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)
– 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
実行速度 ○
△(しかし許容範囲)
メモリ
○
△(←の倍くらい食う)
生産性
△(コーディング
○
時間がスクリプト言
語の倍くらい)
信頼性
○
○