Anonymous
Так поинтер и так 47 битный
Anonymous
Или еще меньше надо для выравнивания?
Anton
Нет, мне просто кажется что дальше довольно очевидных и простых вещей развитие джита не пойдет без Майка.
Можно уточнить, какие вещи являются на ваш взгляд очевидными и простыми? > развитие джита не пойдет без Майка Наш опыт не позволяет мне согласиться с этим утверждением.
Anton
Так поинтер и так 47 битный
http://wiki.luajit.org/New-Garbage-Collector All arenas have the same size and they are naturally aligned to their size. E.g. 64 KB-sized arenas have addresses ending with 16 zero bits. This has two advantages: Aligned arenas can be densely packed and do not cause any extra memory fragmentation issues for the operating system. The metadata area of its arena can be derived from any interior pointer simply by masking off the lowest bits of the address.
Highly Likely
Можно уточнить, какие вещи являются на ваш взгляд очевидными и простыми? > развитие джита не пойдет без Майка Наш опыт не позволяет мне согласиться с этим утверждением.
Я бы сказал, что проблема в том, что люди очень неохотно меняют привычные для себя вещи на что-то новое. uJIT не дает сверх-крутых преимуществ над LuaJIT2.1, чтобы все массово на него перешли. Сейчас есть уже штуки 4 разных ЖИТов, но все продолжают использовать LuaJIT
Highly Likely
Я думаю, тут мысль в том, что Майк Полл уже подсадил людей на свою платформу и кто бы что ни делал –– люди всё равно будут ждать луажита
Anonymous
Конечно, когла привычные вещи стабильно работают
Anonymous
Очень неохотно
Anton
Я бы сказал, что проблема в том, что люди очень неохотно меняют привычные для себя вещи на что-то новое. uJIT не дает сверх-крутых преимуществ над LuaJIT2.1, чтобы все массово на него перешли. Сейчас есть уже штуки 4 разных ЖИТов, но все продолжают использовать LuaJIT
Не-не-не, не поймите меня превратно, я не агитирую за советскую власть^W^W LuaVela. Правда. У меня нет целей прийти и вот всем-всем-всем продать новую платформу, тем более что по некоторым характеристикам (например, переносимости) она заведомо хуже оригинала. Но у LuaJIT'а есть проблемы, которые нам удалось так или иначе решить. И мы будем только рады, если кому-то эти решения окажутся полезны. Кто-то может забрать к себе в форки. Кто-то может нам что законтрибутит. Как-то так. Мне очень понравился комментарий Хавьера, он соответствут примерно моим ожиданиям: > even if many of us might not use it directly, there's a _ton_ of hard > work there and lots of things to learn from. the first thing I'd > like to check is how much work and overhead is there from the bigger > TValue struct. the current 47-bit limit is annoying, and just saying > "this is a design issue, it's not going away" is just not enough. now > we can compare with a real, tested, alternate implementation. Ну даже если не пригодятся никому наши наработки – ну что ж, ну бывает :-)
Snusmumriken
Это всё-таки не отвечает на мои вопросы (ещё раз): * А в каком состоянии по вашему мнению Майк Полл забросил разработку? * И что такое по вашему мнению 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% – это выглядит как-то непонятно.
>Но утверждение про 10% – это выглядит как-то непонятно. Это Серёжа. Я его уже много раз бил по рукам за громкие вопли без оснований, и миллиард выводов когда сам не разобрался в теме (наполовину нахватался, наполовину выдумал). Не работает. Видать просто человек такой, но реагировать бесполезно.
Snusmumriken
С другой стороны, Серёжа делает вброс, и дальше мы дружно дискутируем и бьём его по рукам, движуха идёт, сообщество развивается и не стагнирует.
Andrii
Доброго времени суток. Объясните пожалуйста новичку в чем разница между точкой и двоеточием при вызове функции connect_signal. Я так понимаю, через точку мы получаем просто функцию, а двоеточие используется какбы для вызова метода объекта?
Snusmumriken
Точки и точки с запятыми. local t = {} function t.foo(tbl, a, b) tbl.v = a + b end t.foo(t, 10, 20) t:foo(10, 20) == local t = {} -- аргумент self автоматически провешивается, если пишем двоеточие при инициализации function t:foo(a, b) self.v = a + b end t:foo(10, 20) t.foo(t, 10, 20)
Snusmumriken
Это совершенно то же самое, только более явные вызовы, но при инициализации функции-метода через двоеточие не надо писать self.
Andrii
Теперь понятно. Спасибо
Snusmumriken
Можно даже сделать что-то такое: local str = {} function str:split(delm) delm = delm or " " local res = {} -- self это первый аргумент, -- который передадут в функцию for l in string.gmatch(self..delm, "(.-)"..delm) do res[#res + 1] = l end return res end -- передаём первым аргументом строку local tbl = str.split("hello world", " ") print(tbl[1]) --> "hello" То есть, self может не быть таблицей. Что туда передадим — то и будет. В ООП на сишных структурах такое часто используется.
Snusmumriken
И в методах строк — то же самое. У них списком методов является таблица string. local s = "yo" print(string.match(s, ".")) --> y print(s:match(".")) --> y Но тут уже метатаблицы, да.
Snusmumriken
Теперь понятно. Спасибо
Во, иди читать. Для общего образования, про точки с двоеточиями там тоже есть. https://habr.com/ru/post/346892/
Lucky
тупой вопрос можно?
Lucky
если трассировщик лучей на luavela нафигачить, насколько он будет быстр?
Lucky
точнее, кто будет быстрее - он или luajit?
Lucky
ага
Lucky
https://habr.com/ru/post/113804/
Mark ☢️
https://habr.com/ru/post/113804/
А ты аналогичное на джс сделай. Посредством asmjs
Mark ☢️
И посмотри
Mark ☢️
Bytearray или как там
Mark ☢️
В джс
Mark ☢️
Тайпед аррейс
Lucky
не, меня интересует, кто из луёв самый шустрый сейчас.
Lucky
кокой из них к проекту прикручивать
Mark ☢️
не, меня интересует, кто из луёв самый шустрый сейчас.
Запили вначале прогу. А потом забенчи на всех
Anton
Anton
не, меня интересует, кто из луёв самый шустрый сейчас.
> Запили вначале прогу. А потом забенчи на всех Присоединюсь к оратору.
🐅🤦‍♂️
Запили вначале прогу. А потом забенчи на всех
Поддержу. Ты запили трассировщик, а потом сравним, есть ли разница.
Александр
Господа, подскажите. Юзаю sol2 (C++). Добавил себе метаметод index (как обычно, не в первый раз), а он не работает. Я ничего не понимаю: cm.__index(cm, 100) cm:__index(100) cm[100] даёт 0 -- как надо 0 attempt to call a number value
Александр
Я переопределил index/new_index с логикой вида some_arr[index] = value; и return some_arr[index]; Но не ясно, как луа понимает, есть у меня поле или нет. Я же не предоставляю какой-нибудь метаметод has_index
Александр
Мне нужно, чтобы при cm[100] = 123 вызывалось одно, а при a = cm[100] - другое. Я предположил, что для первого new_index, для второго - index, но начинаю сомневаться
Lucky
А, это, как собрать-то velua?
Lucky
Мне бы пошаговую инструкцию, чтоб как для мартышек.
Lucky
трассировщик написать не проблема вообще
Igor
А, это, как собрать-то velua?
Так вот же инструкция https://github.com/iponweb/luavela/blob/master/INSTALL
Lucky
Спасибо
🐅🤦‍♂️
А, это, как собрать-то velua?
На чем будешь собирать?
🐅🤦‍♂️
На винде или на линуксе?
Lucky
на линуксе
Lucky
на винде я задолбался что-либо собирать
fgntfg
Написал программу на lua. Первая за полгода, точно
Anonymous
ну пол года это ещё норм
Pavel
ребят - а кто подскажет простой в использовании статик-анализатор для ЛУА? в идеале тот что знает про openresty или nginx_lua_module
Mark ☢️
Умвр
Pavel
Pavel
Та ну -) ci/cd и вот это все
Pavel
Линтеры на каждый пуш... Красота.
Pavel
Говно в мастер не пройдёт
Ivan
https://github.com/mpeterv/luacheck
Ivan
Можно как к иде прикрутить, так и отдельно запускать - по хуку, например
Pavel
https://github.com/mpeterv/luacheck
Позырю. Спасибо
Ivan
Плюс из коробки знает про глобальные переменные openresty: https://luacheck.readthedocs.io/en/stable/cli.html?highlight=openresty#command-line-options
Maxim
Это для ide. Мне для cli
Тогда luacheck смело на вооружение, ссылку на документацию уже привели
Snusmumriken
Я, и оно такое себе : )
Snusmumriken
На моей практике, эффективнее влепить termux и поставить luajit пакетом.
Igor
У меня Termux как-то странно себя вёл, не помню уже в чём была проблема, но она довольно серьёзная была, что-то с запуском бинарников, это и вынудило меня установить luajit на дроиде в контейнер Debian'a под Linux Deploy, там уже всё отлишно
Super
Ребята, у меня тут задачка возникла - нужно в сделать прокси на луа и нгинкс для tcp, но я при этом налету хочу кое какие ответы править, как это можно сделать?
Super
я поставил модуль https://github.com/openresty/stream-lua-nginx-module#preread_by_lua_no_postpone
Super
ну и соответственно стрим модуль включил в нгинкс
Super
но ничего такого как header_filter или body_filter там нет
Anonymous
Что такое прокси для тср?
Super
stream { server { listen 3344; proxy_pass test.com:3344; } }
Super
пример прокси
Super
там отдельная луа в ообщем
Super
мне как-то нужно налету править ответы, как это можно сделать?