アカウント名:
パスワード:
高級言語であれニモニックレベルであれ、分岐が少ないとエレガントに感じる。
分岐というか、深いネストがあると汚らしく感じる。
8~16bit時代のゲームだと容量が許すならループを展開して少しでも早くというバッドノウハウがありましたね
いまだってありますよ。gccもVCも普通にループ展開します。
今はソース上ではやらんよね、ってことかな。勿論、コンパイラがループ展開しやすく書くというのはある(かもしれない、自分の業務では無い)
VLIWのプロセッサなら今でも普通にベタなループ展開しますよ細かなオプション設定に苦労しながらコンパイラにオプティマイズをお願いするよりも、そうした手作業のコーディングの方がずっと楽に速いコードを書ける場合も多い
必要な分岐を減らすことはできないはずなので、
・見かけ上、分岐ではないコードに置き換えているだけ・言語が持つ隠された分岐機能を使っている(そのぶん、複雑な仕様を持つ言語を使っている)
ということのなのでは?
あるいは、どんなふうに分岐を減らすのがエレガントなのでしょうか?
あまり良い例を思い付かないけど、例えばint16_t x; if (x > 100) s++;な場合に、s += uint16_t(100-x)>>15;みたいな感じで、『評価を計算式に組み込む』とか。#例に限定する突っ込みは禁止の方向でひとつ
他には、ある値に応じて、別の数を掛けたり足したり、或いは関数を呼びたい場合にテーブルを引くとか。
必要な分岐云々じゃ無くて、不必要にifを使うのが悪いコードの特徴ですよ。「これをif文でやるか!」みたいなコード、見た事無いんですか?書いた奴の労力も、どうやって全パステストしたのかも、ピラミッドの建設並みに神秘的なコードとか。
ちなみに分岐にif文を一切使わないコードを書く事は、大抵の言語で可能です。分かりきったつまらないコーディングやってるとき一度試してみると良いですよ。飽きたRPGの縛りプレイみたいで、面白いテクニックを思いついたりして、結構楽しめます。
分岐を必要とするアルゴリズムであれば分岐を無くすことは出来ないし、無理に分岐を無くそうとするコーディングには意味が無いベクトル・プロセッサ(スパコン)などで高速化のために分岐を排除することがあるが、代償としてコードの見通しが悪くなったりコードサイズが増えるのでエレガントという印象とはほど遠い
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
分岐が少ない (スコア:2)
高級言語であれニモニックレベルであれ、分岐が少ないとエレガントに感じる。
Re:分岐が少ない (スコア:2)
分岐というか、深いネストがあると汚らしく感じる。
Re: (スコア:0)
8~16bit時代のゲームだと容量が許すならループを展開して少しでも早くというバッドノウハウがありましたね
Re: (スコア:0)
いまだってありますよ。gccもVCも普通にループ展開します。
Re: (スコア:0)
今はソース上ではやらんよね、ってことかな。
勿論、コンパイラがループ展開しやすく書くというのはある(かもしれない、自分の業務では無い)
Re: (スコア:0)
VLIWのプロセッサなら今でも普通にベタなループ展開しますよ
細かなオプション設定に苦労しながらコンパイラにオプティマイズをお願いするよりも、そうした手作業のコーディングの方がずっと楽に速いコードを書ける場合も多い
Re: (スコア:0)
必要な分岐を減らすことはできないはずなので、
・見かけ上、分岐ではないコードに置き換えているだけ
・言語が持つ隠された分岐機能を使っている(そのぶん、複雑な仕様を持つ言語を使っている)
ということのなのでは?
あるいは、どんなふうに分岐を減らすのがエレガントなのでしょうか?
Re:分岐が少ない (スコア:2)
あまり良い例を思い付かないけど、例えば
int16_t x; if (x > 100) s++;
な場合に、
s += uint16_t(100-x)>>15;
みたいな感じで、『評価を計算式に組み込む』とか。
#例に限定する突っ込みは禁止の方向でひとつ
他には、ある値に応じて、別の数を掛けたり足したり、或いは関数を呼びたい場合にテーブルを引くとか。
Re:分岐が少ない (スコア:1)
Re:分岐が少ない (スコア:1)
誤: case ~ switch
正: switch ~ case
Re: (スコア:0)
必要な分岐云々じゃ無くて、不必要にifを使うのが悪いコードの特徴ですよ。
「これをif文でやるか!」みたいなコード、見た事無いんですか?書いた奴の労力も、どうやって全パステストしたのかも、ピラミッドの建設並みに神秘的なコードとか。
ちなみに分岐にif文を一切使わないコードを書く事は、大抵の言語で可能です。
分かりきったつまらないコーディングやってるとき一度試してみると良いですよ。
飽きたRPGの縛りプレイみたいで、面白いテクニックを思いついたりして、結構楽しめます。
Re:分岐が少ない (スコア:1)
Re: (スコア:0)
分岐を必要とするアルゴリズムであれば分岐を無くすことは出来ないし、無理に分岐を無くそうとするコーディングには意味が無い
ベクトル・プロセッサ(スパコン)などで高速化のために分岐を排除することがあるが、代償としてコードの見通しが悪くなったりコードサイズが増えるのでエレガントという印象とはほど遠い