https://www.opennet.ru/opennews/art.shtml?num=65795:
Майк Полл (Mike Pall), создатель JIT-компилятора LuaJIT, отошедший от активной разработки проекта в 2015 году и ограничивавшийся с тех пор редким сопровождением ветки 2.1 (github.com), вернулся к активной работе над проектом и опубликовал план синтаксических расширений будущей ветки LuaJIT 3.0.
Среди предлагаемых для LuaJIT 3.0 расширений:
- Битовые операторы в виде встроенного синтаксиса вместо вызовов функций
bit.*:~a(NOT),a & b(AND),a | b(OR),a ~ b(XOR),a << b,a >> b(логический сдвиг) иa ~>> b(арифметический сдвиг). XOR обозначен как~, поскольку символ^в Lua занят возведением в степень.- Альтернативные («привычные») операторы в стиле C/JavaScript:
!(not),&&(and),||(or) и!=(~=).- Оператор целочисленного деления
//с округлением в сторону минус бесконечности и метаметодом__idiv(как в Lua 5.3+).- Тернарный оператор
a ? b : cс поддержкой сокращённого вычисления.- Оператор безопасной навигации
?.(a?.field,a?.[key],f?.(...),obj?.:method(...)), возвращающийnil, если левый операнд равенnil.- Оператор объединения с
nila ?? b, возвращающийb, только еслиaравноnil.- Составные операторы присваивания:
+=,-=,\*=,/=,//=,%=,&=,|=,~=,<<=,>>=,~>>=,..=и??=. Индексное выражение в левой части вычисляется однократно.- Оператор
continueдля перехода к следующей итерации цикла, оформленный как «мягкое» ключевое слово (можно продолжать использовать как имя переменной).- Объявление
const— блочная неизменяемая привязка локальной переменной; запрещены переприсваивание и повторное объявление в той же или вложенной области видимости (также «мягкое» ключевое слово).
В обсуждении дополнительно затрагиваются ещё не вошедшие в спецификацию идеи: выражение сопоставления с образцом через ключевое слово
in, индексируемый тип дляvararg(...varg,varg[i]), краткий синтаксис лямбд (|x| -> expr), оператор отложенного выполненияdeferв стиле Go/Zig и присваивание в условии (if local x = ... then).
Появление расширений вызвало и критику: часть участников отметила, что нововведения окончательно превращают LuaJIT в отдельный язык, несовместимый с эталонным Lua 5.1. На это Полл ответил, что «этот корабль уплыл уже очень давно».
Документацию по языку планируется консолидировать в отдельное самостоятельное описание, в котором каждое расширение будет помечено версией, в которой оно появилось.




