アカウント名:
パスワード:
うしろから羽交い絞めにして、「やめろ、やめるんだ!!」「はなせっ離してくれっっ、ここを最適化しないと…ここを最適化しないとっっ」「ばかっ、そこで苦労してどうする。今じゃもう、gcc とかの最適化がそんな事は全部やってくれるんだっっ」「な…なんだって… じゃぁ、俺の今までの苦労は…」
うん。もう同情に涙が止まりませんよ。gccの最適化の強靭さを見た瞬間の感動を君にも分けてあげたい。
.
ただ、そのためにコードを読みにくくするのは昔のコードであってもお勧めできません。
「アセンブラで組め」「インライン アセンブリコードで組め」
で、コメントにCの読みやすいコードを書くんだ。「いつか、良いコンパイラが出てきたら、このアセンブリコードは破棄するように」というコメントをつけて。
コンパイラは「共通部分式の削除」だといった「小手先の最適化」はできますけど、アルゴリズムレベルでの最適化は無理ですね。計算量のオーダーは変わらない。計算量そのものが変わってくるような、例えば
int sum(int n) { int i, accum = 0; for (i = 1; i <= n; i++) accum += i; return accum;}
を
int sum(int n) { return (n+1)*n/2; }
に書き換えるような最適化はコンパイラには無理で、そういうの手で書くしかないし、それを突き進めていくと、どうしても可読性は悪くなるんですよね。
昔の自分が書いたコードで、
> に書き換えるような最適化はコンパイラには無理で、そういうの手で書くしかないし、それを突き進めていくと、どうしても可読性は悪くなるんですよね。
あなたの挙げた例の通り、多くの場合可読性は向上します。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー
良い言い訳 (スコア:1)
出来る限りの最適化を加えてた結果としてどうしょうもなく読みにくくなって、それを緩和すべくくどい説明を添えることぐらいは許してください。
単純なところでは、
strcpy(dst + a + b + c, src); // 意図はstrcat(dst, src); ここまでの処理でstrlen(dst) == a + b + cなので
みたいな、(この例だと変数名が最悪なのは置いといて)分かってる値を使い回してステップ数を減らすところから、もっと凝りに凝った最適化まで。
ぱっと見て何が書いてあるのか分からない、
Re: (スコア:2, 参考になる)
うしろから羽交い絞めにして、
「やめろ、やめるんだ!!」
「はなせっ離してくれっっ、ここを最適化しないと…ここを最適化しないとっっ」
「ばかっ、そこで苦労してどうする。今じゃもう、gcc とかの最適化がそんな事は全部やってくれるんだっっ」
「な…なんだって… じゃぁ、俺の今までの苦労は…」
うん。もう同情に涙が止まりませんよ。gccの最適化の強靭さを見た瞬間の感動を君にも分けてあげたい。
.
ただ、そのためにコードを読みにくくするのは昔のコードであってもお勧めできません。
「アセンブラで組め」
「インライン アセンブリコードで組め」
で、コメントにCの読みやすいコードを書くんだ。
「いつか、良いコンパイラが出てきたら、このアセンブリコードは破棄するように」
というコメントをつけて。
fjの教祖様
Re: (スコア:1, 興味深い)
コンパイラは「共通部分式の削除」だといった「小手先の最適化」はできますけど、
アルゴリズムレベルでの最適化は無理ですね。計算量のオーダーは変わらない。
計算量そのものが変わってくるような、例えば
を
に書き換えるような最適化はコンパイラには無理で、そういうの手で書くしかないし、それを突き進めていくと、どうしても可読性は悪くなるんですよね。
昔の自分が書いたコードで、
Re:良い言い訳 (スコア:0)
> に書き換えるような最適化はコンパイラには無理で、そういうの手で書くしかないし、それを突き進めていくと、どうしても可読性は悪くなるんですよね。
あなたの挙げた例の通り、多くの場合可読性は向上します。