Size: a a a

2019 August 09

IA

Ivan Azoyan in pro.lua
у вас ссылки не работают на странице с документацией.
local a = ujit.immutable(value) а вот это просто делает его read-only, но как только оно выйдет из скоупа либо a = nil соберётся gc?
источник

IA

Ivan Azoyan in pro.lua
и ещё у вас везде используется api через ujit, а проект LuaVela - неконсистентно))
источник

A

Anton in pro.lua
Ivan Azoyan
у вас ссылки не работают на странице с документацией.
local a = ujit.immutable(value) а вот это просто делает его read-only, но как только оно выйдет из скоупа либо a = nil соберётся gc?
Да.
источник

A

Anton in pro.lua
Ivan Azoyan
и ещё у вас везде используется api через ujit, а проект LuaVela - неконсистентно))
И это тоже верно. Мы поправим, спасибо!
источник

S

Serezha in pro.lua
Anton
Это всё-таки не отвечает на мои вопросы (ещё раз):

* А в каком состоянии по вашему мнению Майк Полл забросил разработку?
* И что такое по вашему мнению 10%?

Но я тем не менее как-то попробую ответить.

Во-первых, бетой в 2019 году по-прежнему является ветка  2.1, а 2.0 – stable. Сравнивая 2.1 и LuaVela, я не берусь утверждать, что LuaVela – это bugless code, но я хотя бы могу сказать, что она крутится с 2017 года в боевом окружении, обрабатывая сотни миллиардов запросов ежесуточно (я не преувеличиваю). А про LuaJIT 2.1 у меня проверенной информации нет. При этом, возвращаясь к стабильной ветке 2.0: она просто не умеет работать со всей виртуальной памятью на 64-битной платформе на Линуксах, а LuaVela (как потомок стабильной 2.0) – умеет. Да, 2.1 имеет режим LJ_GC64, но, насколько я помню доклад Питера на митапе в Лондоне (смотрели?), этот режим стабилизировался только к 2017 году.

Далее, не JIT-ом единым живы реализации Lua. Например, ещё хочется эффективно использовать память в бизнес-приложениях. Для этой цели и была добавлена функциональность силинга (о ней см. в анонсе) и DataState (забыл упомянуть об этом, это возможность задёшево разделять read-only данные между несколькими экземплярами VM). В этот момент мы бесплатным бонусом получаем возможность делать какие-то данные иммутабельными (как я рассказывал на докладе в прошлом году, ujit.immutable(_G) спасает нас от проблем опечаток в именах переменных).

Но если мы говорим о JIT-е:

* В LuaVela затащено очень многое из того, что есть в LuaJIT 2.1. Из крупного, что не сделано – trace stitching для "компиляции" вызовов Lua C API;
* В LuaVela есть расширения стандартной бибилиотеки, в которых собраны некоторые полезные на наш взгляд функции общего назначения. Они написаны на C, и многие из них JIT-компилируются;
* В LuaVela появились оптимизации, которые помогают улучшить работу машинного кода при обилии с операциями с памятью (это очень частый случай при скриптовании бизнес-логики, и вот тут оригинальный JIT ведёт себя не очень хорошо – безусловно делая всех в чисто вычислительных задачах).

Наконец, код платформы опубликован сразу с несколькими тестовыми сюитами и документацией, которую мы писали, накапливая экспертизу в течение многих лет. Можно брать, смотреть, пробовать, тестировать, контрибутить.

В общем и целом – да, проблема фрагментации, безусловно, есть. Это тот случай, когда сильная сторона языка оборачивается его же слабостью.

Но утверждение про 10% – это выглядит как-то непонятно.
Отвечаю по памяти: Марк решил что не будет тащить инт64 в джит, Марк набросал теорию нового сборщика мусора но не стал его имплементировать, не добавили вроде битовые операции в синтаксис, поддержкой ютф8 занимаются энтузиасты до сих пор
источник

IA

Ivan Azoyan in pro.lua
Anton
И это тоже верно. Мы поправим, спасибо!
если что удобнее так: ujit. чем так luavela.
источник

S

Serezha in pro.lua
Что нового в 5.4 я не очень знаю но даже 5.3 поддержки нет и не планируется
источник

S

Serezha in pro.lua
То есть джит остался в том же брошенном состоянии что при Марке с частичной поддержкой 5.2
источник

IA

Ivan Azoyan in pro.lua
Serezha
Что нового в 5.4 я не очень знаю но даже 5.3 поддержки нет и не планируется
из того что я запомнил:
local a <const> = 124;
a = 3; // error
источник

S

Serezha in pro.lua
Все что описано типа поддержки ппмяти больше 2 гиг читать смешно и странно
источник

S

Serezha in pro.lua
2019 на дворе господа
источник

S

Serezha in pro.lua
Тем не менее новость хорошая рад за русских разработчиков :)
источник

IA

Ivan Azoyan in pro.lua
Ivan Azoyan
потом будем экспериментировать дальше:
function foo()    
  mt = {}

 mt.__close = function() print("close a") end
 mt.__gc = function() print("gc a") end

 local <toclose> a = {}
 setmetatable(a, mt)

  return a
end

local d = foo()

print("======")
Должно быть:
close a
=======
gc a
источник

A

Anton in pro.lua
Serezha
Все что описано типа поддержки ппмяти больше 2 гиг читать смешно и странно
Ага, становится, яснее.

Да, если говорить про уровень языка, то и LuaJIT, и LuaVela остаются реализациями языка Lua версии 5.1 (ну с некоторыми допущениями). В этом плане действительно ничего не изменилось, вы правы.

С другой стороны, надо всё-таки различать понятия "язык" и "реализация языка" – и в этом смысле LuaVela как проект решает именно проблемы реализации, воленс-ноленс заложенные Майком в LuaJIT.

Для ясности: когда мы начинали проект, у компании IPONWEB не было проблем с отсутствием битовых операций на уровне синтаксиса. И проблем с поддержкой INT64 не было. Тем более что JIT-компилятор вполне себе умеет работать с целыми – почитайте про оптимизацию под названием narrowing, посмотрите на внутреннюю систему типов IR – вы удивитесь. Да и в общем и целом проблем с Lua 5.1 как с *языком* у нас не было.

Нашей проблемой были ситуации типа таких: приходит нам от клиента 1+Gb данных, а мы их либо загрузить не можем из-за ограничений платформы, либо кое-как загружаем и бегаем потом по ним сборщиком мусора, а нам каждый RTB-аукцион надо открутить за максимум 120 миллисекунд. И одновременно бизнес-логика крутит-вертит чего-то, запросы туда-сюда отправляет, и на ровном месте мы получаем trace explosion, когда совокупная сложность динамического машинного кода, который покрывает кусочек Lua-кода, в разы больше сложности Lua-кода.

И вот ровно эти "смешные и странные", но насущные проблемы мы и решали.

Тут можно завести спор в сторону более высоких материй, но я бы не хотел.

Да, а по поводу Lua 5.2+: я писал в анонсе, что мы совершенно не против апгрейда реализации до новых версий языка, можно ли ждать патч? ;-)
источник

ШТ

Шмель Тяжеловес in pro.lua
Anton
Есть (прошу прощения, не у компа)

make prepare_benchmarks
cd tests
./run_benchmarks.sh
Сделал
apt-get install libtext-table-perl liblist-allutils-perl
и оно заработало. Работало довольно долго, загружен был только один процессор. Тесты ведь можно замногопоточить?
источник

IM

Ivan Mukhin in pro.lua
Serezha
Все что описано типа поддержки ппмяти больше 2 гиг читать смешно и странно
А что в этом смешного и что странного?
источник

IA

Ivan Azoyan in pro.lua
ему обидно что мы отстаём от js и питона
источник

IM

Igor Munkin in pro.lua
Ivan Mukhin
А что в этом смешного и что странного?
Ваня, не иди туда!!!
источник

IA

Ivan Azoyan in pro.lua
оформите новость на IT ресурсах: habr, opennet, tproger, linux.org.ru
источник

A

Anton in pro.lua
Ivan Azoyan
оформите новость на IT ресурсах: habr, opennet, tproger, linux.org.ru
Конечно. В процессе!
источник