« Oprofile | トップページ | 卒業 »

再び速度

fridgeの速度アップ作業が2割程度終わったところなんですが,
ここでおもしろい実験結果が出たので載せてみます.
次のコードでそれぞれ速度を測ってみました

--python
i=0
while i < 5000000 :
                   i+=1

--ruby
i=0
while i < 5000000
                   i+=1
end

--fridge
i=0
while i < 5000000 i+=1

全部同じ意味のコードです(fridgeのi=0はいらないけど一応同じにするため書いた)
で、こいつらを20回くらい実行して平均時間を取ってみます.

python : 2.233(sec)
ruby : 2.325(sec)
fridge : 2.195(sec)

...fridgeはやいじゃん!!!
というわけで人並な速度になってきました.
実際中規模程度のプログラムを書くと圧倒的にfridgeが遅くなるんですが, それは今後のチューニングでなんとかするとして.

実はどんなにチューニングをしてもfridgeには速度的に越えられない壁というものがあります.

なぜか.それはfridgeが変な構造をしているからです.
一般的なプログラミング言語というものは大まかに言って

1.フロントエンド(抽象構文木生成)
2.ミドルエンド(中間言語生成,最適化)
3.バックエンド(目的コード生成)
4.コード実行(CPU上なりOS上なり仮想マシン上なり)

といった流れになる場合が多いです.しかしfridgeの場合は.

1.フロントエンド(抽象構文木生成)
2.コード実行(オブジェクト間の連鎖的な通信による実行)

というふざけた構造を持っています.
fridgeのような構造だとミドルエンドとバックエンドがないので,
例えばOSや特定CPUの機能を使ったローレベルな最適化が行いにくくなります.

ではなんで僕はこんな構造にしたのか.一番大きな理由は単に変な事をしたかったからなんですが, 一応メリットもあります.
見ての通りfridgeではフロントエンドから実行までのフェーズを大幅に省略しているので, プログラムを起動してから実行が開始されるまでの時間が短くなります.
もっと言葉を言いかえると,fridgeはプログラムとして非常に「軽い」処理系ということになります.

プログラミング言語が軽いことのメリットは何か.
例えばwebにおけるphpはサーバアプリケーションにプロセスを常駐させ「軽く」しています.
Lightweight Languageなんて言葉がありますが(僕はあんましこの言い方が好きじゃない) 処理系が軽いことは特定の分野において非常に強みとなります.

まとめると,fridgeは「早い」プログラミング言語ではなく「軽い」プログラミング言語ということですね.(while文は早かったけど)

« Oprofile | トップページ | 卒業 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/163977/3700904

この記事へのトラックバック一覧です: 再び速度:

« Oprofile | トップページ | 卒業 »