90 likes | 210 Views
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)
E N D
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はハッシュテーブルのクラスが用意されているのに、使わない人が多い