Ключевое слово I/if
I <условие> ... | I <условие> ... E ... | I <условие1> ... E I <условие2> ... | I <условие1> ... E I <условие2> ... E ... |
Два ключевых слова
E/else и I/if идущие подряд трактуются специальным образом в 11l, благодаря чему отпадает необходимость в специальном/отдельном ключевом слове (как elif в Python или elsifв Ruby).
Также
I/if и E/else можно использовать в выражениях в качестве альтернативы тернарному оператору ?:из языка Си:
sign = I x < 0 {-1} E I x > 0 {1} E 0 // 11l
sign = x < 0 ? -1 : x > 0 ? 1 : 0; // C
Ключевые подслова I/if
I.unlikely <условие> ...используется, чтобы указать компилятору, что условие в подавляющем большинстве случаев не будет выполнено.
Это влияет на генерацию машинного кода следующим образом:
- Тело оператора
I/ifпереносится в отдельную ("холодную") область сегмента кода или в конец функции после всего "горячего" кода. - Если тело оператора
I/ifсостоит из одного вызова функции, тогда этот вызов не встраивается.
Пример:
- Место в стеке под локальные переменные внутри тела оператора
I/ifвыделяется не в ‘начале функции’/‘момент входа в функцию’, а в начале самого тела оператораI/if.
Пример:
I.likely <условие> ...используется, чтобы указать компилятору, что условие в подавляющем большинстве случаев будет выполнено.
Влияет на генерацию машинного кода только при наличии ветки
E/else, код в которой получает пометку "unlikely".