Автор LuaJIT вернулся к разработке и планирует выпуск LuaJIT 3.0
Майкл Полл (Mike Pall), создатель JIT-компилятора LuaJIT, отошедший от активной разработки проекта в 2015 году и ограничивавшийся с тех пор редким сопровождением ветки 2.1, вернулся к активной работе над проектом и опубликовал план синтаксических расширений будущей ветки 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».
Оператор объединения с nil «a? b», возвращающий «b», только если «a» равно «nil».
Составные операторы присваивания:»+=»,»-=»,»*=»,»/=»,»//=»,»%=»,»&=»,»|=»,»~=»,»‹‹=`,»››=»,»~››=»,»…=» и »?=». Индексное выражение в левой части вычисляется однократно.
Оператор «continue» для перехода к следующей итерации цикла, оформленный как «мягкое» ключевое слово (можно продолжать использовать как имя переменной).
Объявление «const» — блочная неизменяемая привязка локальной переменной; запрещены переприсваивание и повторное объявление в той же или вложенной области видимости (также «мягкое» ключевое слово).
В обсуждении дополнительно затрагиваются ещё не вошедшие в спецификацию идеи: выражение сопоставления с образцом через ключевое слово «in», индексируемый тип для vararg (»…varg», «varg[i]»), краткий синтаксис лямбд (»|x| → expr»), оператор отложенного выполнения «defer» в стиле Go/Zig и присваивание в условии («if local x = … then»).
Появление расширений вызвало и критику: часть участников отметила, что нововведения окончательно превращают LuaJIT в отдельный язык, несовместимый с эталонным Lua 5.1. На это Полл ответил, что «этот корабль уплыл уже очень давно».
Документацию по языку планируется консолидировать в отдельное самостоятельное описание, в котором каждое расширение будет помечено версией, в которой оно появилось.
Источник: http://www.opennet.ru/opennews/art.shtml? num=65795
Полный текст статьи читайте на OpenNet
