Автор 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 прочитано 1838 раз