LINUX.ORG.RU
ФорумTalks

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

 , , , ,


0

2

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.
  • Оператор объединения с 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. На это Полл ответил, что «этот корабль уплыл уже очень давно».

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

★★★★★
Ответ на: комментарий от MoldAndLimeHoney

На C++ есть и Luau (тоже с JIT) от Roblox, и Pluto. Но до популярности исходного Lua им ещё гнать и гнать.

dataman ★★★★★
() автор топика

Важным преимуществом LuaJIT является то, что он не ломает обратную совместимость ни в языке, ни в C API. PuC Lua постоянно ломает и то, и другое. Я считаю большой ошибкой использовать PuC Lua для чего-либо, лучше взять легковесные интерпретаторы JavaScript.

shdown ★★
()
Ответ на: комментарий от shdown

Не, не лучше. Луа прекрасен минимализмом и продуманностью. Я пишу сейчас и на том и на том. Тот же луажит всего в 2-2,5 раза медленнее ручного кода на ассемблере например. Лишен лютых косяков ява-скрипта в плане синтаксиса. Ничего лишнего, есть все нужное, не жрет, не требует ресурсов.

Простой пример - конкатенацию сравни там и там.

Хотя, конкретно PuC Lua не пробовал.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Не, не лучше. Луа прекрасен минимализмом и продуманностью.

Во-первых, 4.2. Во-вторых, даже если бы это было так, это не имеет значения, если обратная совместимость постоянно ломается.

Хотя, конкретно PuC Lua не пробовал.

PuC Lua — это стандартная реализация с lua.org :)

Её так называют, потому что авторы из католического университета Рио-де-Жанейро (PUC-Rio).

shdown ★★
()
Ответ на: комментарий от shdown

Ну тогда он прекрасен. Я же говорю - пишу на том и на том. На фоне луа, ява-скрипт кажется нагромодением говна и палок - нужно все время следить, чтобы что то не то или не туда не сделать. Проще вообще писать на ts.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Даже если бы это было так, к особенностям скриптовых языков можно привыкнуть. Я не хочу разводить срач на эту тему.

И привыкнуть проще, чем каждый раз вникать в то, что в очередной раз поломали в новой минорной версии, глазами смотреть на весь код и переписывать. Причём ломают без причины. Вот убрали math.atan2 — он кому-то мешал? Может быть, в новой версии завезли что-то, что позволяло бы более идиоматично выразить эту операцию? Нет, просто так.

shdown ★★
()
Ответ на: комментарий от shdown

Полностью согласен - ко всем особенностям можно привыкнуть. Тут прогнал тесты и с удивлением узнал, что js в несколько раз быстрее луа. Что то луа совсем забросили похоже.

У меня луа был по сути первым осознанным языком - я просто предвзят. Для меня он лучший просто подсознательно.

LightDiver ★★★★★
()
Ответ на: комментарий от shdown

Дополню: убирание math.atan2 — не показательное изменение. Вот был у меня код:

for iface, params in pairs(t) do
    -- strip out "label" from the interface name
    iface = iface:gsub(':.*', '')
Его нужно переделывать. Потому что теперь изменять итератор нельзя. Нужно объявлять новую переменную в этой области видимости, которая будет shadow’ить старую:
    local iface = iface:gsub(':.*', '')

Ради чего? У меня нет ответа на этот вопрос.

shdown ★★
()
Последнее исправление: shdown (всего исправлений: 1)
Ответ на: комментарий от TheNewDragon

А как ты собрался использовать? У них свой форк - смесь луажит и луа5.4, если я не ошибаюсь. Что они добавят, то и будешь использовать.

Чисто технически - уже используется и да, можно. Но это делать должны разрабы проекта.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)

ха! где-то раньше пару~тройку десятков лет я подобное уже видел :-)

а потом в J# переименовали кажется

user_id_68054 ★★★★★
()

Среди предлагаемых для LuaJIT 3.0 расширений:

Не нужно. Уродуют простой и лаконичный язык. Так им и до JavaScript не далеко.

X512 ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)