第4話 スピード狂再び(コンパイラの世界)

--------------------- 第4話 スピード狂再び(コンパイラの世界) --------------------------


はじまり、はじまり~。


<一億倍♪ 一億倍!! イチ・オク・バイ。>
アンタね。

<今度は一兆倍ですか?>
んなアホな。

<だったら何?>
少しコンパイラの話をしてみようかと。

<コンパイラ?>
コンピューターは最終的にマシン語で動くのは知ってるよね?

<もちろん! 機械語とかアセンブラとか言うんでしょ?>
ま、まあアセンブラは少し違うがいいでしょ。

最初はマシン語で書いていたが、あまりに手間がかかるのでより人間に近い言葉で表現して書かれたのを翻訳してくれるのが
コンパイラと呼ばれるプログラムだ。

<じゃあUWSCはコンパイラなの?>
いや基本的にはインタープリタだよ。

<インタープリタ?>
ソースプログラムを読んで、逐次実行するタイプさ。

<どう違うの?>
コンパイラはソースプログラムを一括して翻訳してくれるので、実行時のスピードが速い。反面、翻訳作業が入るので作成が
面倒で、文法も非常に厳しいものが多い。

インタープリタは、作成が比較的容易な上、翻訳作業が無いのでスグに結果を出したい場合に便利、しかし実行速度が遅い。
<どのくらい遅いの?>

一般に数倍から数十倍と言われている。
<な~んだそのくらいか>
まあ、前回の事を考えれば大した数字ではないように思えるが、同じアルゴリズムならこの差は非常に大きい。

<でもUWSCはインタープリタなんだから関係ないじゃん>
正論だ! だが、そのスピード差を知っておくことは無駄にはならないよ。

<だって数倍から数十倍って言ってたじゃん!>
あくまでも一般的な話さ。場合によっては、ほとんど変わらない場合もあるし、百倍以上も夢じゃない。

<でもコンパイラじゃ無いんだから意味ないじゃん!>
そうでもないよ。時には速度面からUWSCを断念しなければならない時がある。

<そっか~。あまりに遅いとヤバイわね。>
当然その前に、アルゴリズムを再検討すべきだけどね。その上で使う言語の選択になるね。

<で、何が言いたい。>
分かってないな~。今までクドクド説明して来たのに。

<ハッキリ言ってよ。>
あっ意外に単純だったねオタク。

<オタク言うな! オタクにオタクと呼ばれたくない!>
オタクの再帰的表現だね。いや否定か?

<美人薄命って呼んでよ>
何百年生きてるんだか・・・

<何かおっしゃいました?>
今日もご機嫌麗しゅう。

<よろしい。で、遅い原因は?>
分かってるいるじゃないかぁ。

ズバリ。 ファイル、文字列、繰り返しだ。
<繰り返しは理解できるけど、ファイルや文字列は?>

ファイルは、メモリなどのデバイスに比べて、HDDなどの非常に遅いハードにアクセスする為、その影響を受けやすい。
その為、UWSCなどでも実際の書き込みはfcloseが呼ばれた時などにして、ソレまでは内部で処理するなどの工夫をしているようだ。

文字列は数値変数などに比べても、かなり遅いものだ。感覚的に文字列は、一文字単位の配列と考えよう。そうすると一気に
ファイルから、長い文字列を読み込んで繰り返し処理する事がどれだけ効率の悪いことか想像できるでしょ?

<そっかー。 だから一億倍なのね。まさに遅さの三重奏!>
結論がでたところで、今日はこのくらいかな?

<え~~~~!>

 

----------------------------------------------------------------------

提供は: コンパイラの世界はどうなってるの? <美人薄命>天使でした。

----------------------------------------------------------------------