- 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();}; ... ) будет эту ссанину быстрее обрабатывать".
Какие-нибудь языки программирования такую оптимизацию вообще умеют?
j123123 03.05.2018 05:56 # 0
j123123 03.05.2018 06:01 # 0
Antervis 03.05.2018 06:06 # +1
Сомневаюсь правда, что он как-то сильно повлияет. Ты сам-то как бы этот код ускорил? Странно ожидать от компилятора "каких-нибудь" оптимизаций которые сам придумать не можешь
j123123 03.05.2018 06:26 # +1
Смотря какой процессор. Интеловские процессоры с микрокодом вообще хрен пойми как работают, а вот если речь идет о каком-нибудь 8-битном AVR - запросто. На основе статистики, какое из условий равно true чаще всего, выносим его вперед
Antervis 03.05.2018 06:56 # +1
subaru 03.05.2018 08:35 # 0
Elvenfighter 03.05.2018 11:54 # 0
https://godbolt.org/g/hE3tRz
plusinho 04.05.2018 23:15 # 0
Antervis 05.05.2018 11:53 # 0
Desktop 05.05.2018 12:25 # +1
> даже убрать else
- ну руками убери что ли
roskomgovno 06.05.2018 22:04 # 0
Antervis 07.05.2018 10:33 # 0
roskomgovno 07.05.2018 14:51 # 0
Antervis 07.05.2018 17:01 # 0
roskomgovno 07.05.2018 17:21 # 0
bormand 07.05.2018 18:05 # 0
roskomgovno 07.05.2018 21:00 # 0
javac и копелятор шарпея же выдает oopкоды, которые потом JITят
Так что jit про иф элсы не знает
вывод: надо копелироваться в JS, чтобы JIT знал про такие тонкости бггг
dm_fomenok 07.05.2018 14:43 # +3
Какую оптимизацию?
bzzz 04.09.2018 18:40 # 0
а вообще можно запилить: