Домой Новости Софт и сервисы Автор LuaJIT вернулся к разработке и планирует выпуск LuaJIT 3.0

Автор LuaJIT вернулся к разработке и планирует выпуск LuaJIT 3.0

Майкл Полл представил план синтаксических расширений для LuaJIT 3.0, которые приблизят язык к современным стандартам.

Майкл Полл, создатель высокопроизводительного 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 (арифметический сдвиг). Символ ^ остается за операцией возведения в степень.
  • C-подобные операторы: Внедрение привычных для разработчиков на C и JavaScript операторов ! (not), && (and), || (or) и != (в качестве замены ~=).
  • Целочисленное деление: Появление оператора //, который выполняет деление с округлением в сторону минус бесконечности, с поддержкой метаметода __idiv.
  • Условные конструкции: Добавление тернарного оператора a ? b : c, поддерживающего сокращенное вычисление.
  • Безопасная навигация: Оператор ?. для цепочек вызовов (например, a?.field или obj?.:method()), который возвращает nil, если левая часть выражения оказалась пустой.
  • Оператор объединения: Конструкция a ?? b, возвращающая b только в том случае, если a равно nil.
  • Составное присваивание: Поддержка широкого набора операторов, таких как +=, *=, &=, ??= и других. Важным уточнением является однократное вычисление индексного выражения в левой части.
  • Управление циклами и переменными: Появление оператора continue и ключевого слова const для создания неизменяемых локальных переменных, исключающих повторное объявление в той же области видимости. Оба нововведения реализованы как «мягкие» ключевые слова, что позволяет при необходимости использовать их в качестве имен переменных.

Перспективы развития

В ходе обсуждения дорожной карты сообщество затронуло и другие амбициозные идеи, которые пока не вошли в текущую спецификацию. Среди них — сопоставление с образцом через in, индексируемые типы для vararg, лаконичный синтаксис для лямбда-выражений |x| -> expr, механизм отложенного выполнения defer в духе языков Go и Zig, а также возможность присваивания внутри условий.

Предложенные изменения вызвали дискуссии в сообществе. Часть разработчиков опасается, что подобные нововведения сделают LuaJIT несовместимым с эталонным Lua 5.1. Майкл Полл на это ответил довольно прямолинейно: «Этот корабль уплыл уже очень давно».

Для удобства работы с расширенным функционалом планируется создание отдельной, консолидированной документации, где каждое новшество будет сопровождаться пометкой о версии, в которой оно было внедрено.

Источник: http://www.opennet.ru