プログラム言語比較

既に議論され尽くしたこの話題に触れてみた。
といっても、はてな記法に慣れるのが目的なのですがね。
前半はデータに基づく内容、後半は管理人の恣意的な意見です。


データソースはこちら

Shapes: Source Code Size and Run Time(英語)

http://shootout.alioth.debian.org/u32/code-used-time-used-shapes.php/

Computer Language Benchmarks Game(英語)

http://shootout.alioth.debian.org/


数多くの言語が載っているのですが、対象は以下の言語としましょう。


データはURL元を参照してもらうとして、超適当なまとめ方をしてしまいましょう。
比較基準は速度です。

Language Speed Rank Speed
C++ GNU g++ 1 1.0x
C GNU gcc 2 1.0x
Java 6 3 1.7x
C# Mono 4 3.3x
JavaScript V8 5 12x
Python 3 6 32x
Ruby 1.9 7 48x
PHP 8 83x
Perl 9 89x

という結果です。
見る日によって結果が変わるらしい。
まぁ、やはりC++は最速ですなぁ。


一応、とあるブログにて「プログラミング言語の速度 != アプリケーションの速度」なる主張をお見受けしました。
これはある意味正しいと思います。
しかし理屈の根拠が「テンプレートエンジンの速さがうんたら」だったので、幻滅しました。
作るアプリケーションによって得意不得意な言語があるわけで、作りかたの上手/下手の議論に持ち込まれると論点がずれる気がします。
多分このブログを書いている人はウェブ系のプログラマなんでしょうね。
リバースエンジニアリングの関係で、アセンブリを眺めてる自分からするとやはりギャップを感じます。
割り算の計算を加減算とビットシフトで最適化する時代は終わったのですねorz


というわけでどういう目的でどの言語を選択するかを考察しました。
・ウェブ系プログラマ
PerlPHP、そしてJavaScript
Ajaxとか言われると、最近は無駄な名前ばかり増えたなぁ…と感じます。


リッチコンテンツ系→FlashSilverLightFlex
スクリプト系→PythonRubyPerlPHP
サーバでウェブベース→JavaJSP
結構バージョンによって互換性がないものが多いです。(特にMicrosoft製は)
私はそういうのが本当に大嫌いなのですがね。


・低レイヤ・組み込みエンジニア
あえて、エンジニアとしました。
アセンブリ・C・C++・(Java)ですね。
しかし、C++使うところは最初に一気にインスタンス生成して後はメモリ消費しないとか、Java使うところはハイスペックな処理系をもっているところだけです。
というか、Javaは組み込みって言わない気がする。
少なくともメモリ管理が出来ない人は余裕で無理。
ガーベージコレクタに頼ったプログラムをしてきた人はまわれ右するべき。
ちなみに尊敬すべきプログラマは必ずここらの知識を持った人です。
さらに別の分野ですが、ハードウェア設計だとVerilogVHDLですな。


・アマグラマ
そろそろ眠たくなってきたので、これで最後にします(分類はもっといっぱいあるのですが)
趣味でプログラム書く人はどの言語使ってもいいのではないでしょうか。


フリーウェア開発→C#、BASIC、C++
ゲーム開発→C、C++
フリーウェアでWindowsだと、GUIコンポーネントで有利なMicrosoft製の言語を使うべき。
WindowsAPIやDirectXなどをC++でガチで組むと猛者になれます。
ゲーム開発では程度によるので何とも言えませんが、本格的なものだとほぼC++で選択肢はありません。
PS2など、ハード固定ならアセンブリで3Dをやってもいいですが、100回以上死ねますよね。
2Dでは、今時好きな言語使っていいのではないでしょうか。


というわけでこんな感じになりました。
皆さんはどう思いますか?