言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

最適化に熱中する。

折角コードが綺麗になっても、遅いとあっちゃ悔しいので最適化に熱中してしまった。全体にパーサのパフォーマンスの占める割合なんて微々たる物なので、はっきり言って殆ど無駄なのだが、これは理屈で分かる話ではない。男の問題なのだ。

最初ファイルを全部メモリに読み込んでから解析していたので、まずこれが無駄の原因だろうと思っていたが、それは覆された。数メガくらいならメモリに入れても余裕だ(これは、Squeak が他のアプリを差し置いてメモリを食ってしまうと言う事なので、協調性が無いとも言えると思うけど)。次に、配列では無くストリームを使うという方針は変えるわけには行かないので、ストリームのクラスの中でバッファを使って検索するようにした。これは効果がメチャクチャ大きかった。だけどよく探せばあらかじめこういうメソッドってあったのかも知れない。よく使いそうな機能だから。

後はプロファイラを見て、とことんコピーを減らして行った。最終的にコードは以前より美しく、速度は一割速くなったのだ。一割だけか。。。よく最適化に関する 8:2 の法則というのを聞く。プログラムのパフォーマンスを決定する要素の多くはある部分のコードに集中していて、実行時間の8割は、2 割のコードで占められているという説だが、これって最適化のめちゃめちゃ初期の段階の話なのであまり役に立たないんじゃない? とにかく、これ以上の最適化には根本的な改良が必要だ、まだまだ山は立ちはだかるのだ。