- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
if (cond1)
{
do_shit1();
}
else if (cond2)
{
do_shit2();
}
else if (cond3)
{
do_shit3();
}
else if (cond4)
{
do_shit4();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
if (cond1)
{
do_shit1();
}
else if (cond2)
{
do_shit2();
}
else if (cond3)
{
do_shit3();
}
else if (cond4)
{
do_shit4();
}
Вот например есть такая вот типичная хуита, предположим что я знаю, что среди этих cond1 cond2 ... только один может быть true, остальные условия всегда будет ложными.
И в этой сраной цепочке из if - else if можно перемещать if блоки без изменения логики. НО в языке Си (да и в C++ я уверен тоже) нет способа сказать компилятору что-то вроде "только одно из условий true, так что ты, сраный компилятор, можешь переделывать эту хуиту, и даже убрать else, если процессор в таком случае (при if(cond1) {do_shit1();}; if(cond2) {do_shit2();}; ... ) будет эту ссанину быстрее обрабатывать".
Какие-нибудь языки программирования такую оптимизацию вообще умеют?
Сомневаюсь правда, что он как-то сильно повлияет. Ты сам-то как бы этот код ускорил? Странно ожидать от компилятора "каких-нибудь" оптимизаций которые сам придумать не можешь
Смотря какой процессор. Интеловские процессоры с микрокодом вообще хрен пойми как работают, а вот если речь идет о каком-нибудь 8-битном AVR - запросто. На основе статистики, какое из условий равно true чаще всего, выносим его вперед
https://godbolt.org/g/hE3tRz
> даже убрать else
- ну руками убери что ли
javac и копелятор шарпея же выдает oopкоды, которые потом JITят
Так что jit про иф элсы не знает
вывод: надо копелироваться в JS, чтобы JIT знал про такие тонкости бггг
Какую оптимизацию?
а вообще можно запилить: