Highly Likely
5.1 is outdated.
Highly Likely
And dont claim personal bias...
Highly Likely
Puc-lua, as you call it, is not a reference implementation. it is Lua. At version 5.3. LuaJIT is not.
Highly Likely
LuaJIT does not even implement current Lua features. it simply is not Lua.
Highly Likely
LuaJIT was a try to add JIT to Lua 5.1 and is has been stuck there while Lua evolved to what is now Lua 5.3 and soon 5.4.
Highly Likely
This group is about Lua. If you want to discuss LuaJIT, please create your own group.
Highly Likely
Igor
О, спасибо
Igor
Ну да, так и думал
Highly Likely
Но один поинт есть хороший: LuaJIT не полностью поддерживает 5.1, насколько мне известно
Igor
Igor
Было один раз, что luajit вёл себя как-то иначе, в сравнении с lua 5.1 у меня, но это было давно и во время какой-то из моих бессоных ночей, так что я не до конца уверен, было ли
Igor
Ещё я вспомнил, что у меня по какой-то ну очень странной причине luajit крашился, когда я использовал метаметод __add чтобы реализовать объединение строк их сложением. В общем если часто происходил вызов этого метаметода, то lj крашился, но стоило заменить "+" обратно на ".." в конкретном месте, как сразу же краш пропадал
Igor
У меня было предположение, что это происходило из-за того, что я криворукий и через ffi в каком-то месте повредил память и сам этого не заметил, но краш этот происходил только при использовании соединения строк посредствам метаметода, больше никогда он не вылезал
Highly Likely
Snusmumriken
Ещё у луажыта, например, xpcall поддерживает аргументы для вызываемой функции, как у 5.2 и далее. Типа:
xpcall(func, traceback, arg1, arg2, ...), ещё goto оттуда же, и всякая такая мелочёвка. Ууу нисоответствие стондартам ))
Snusmumriken
Можно вспомнить язык pl/1, у которого даже родной компилятор не соответствует стандарту (уж очень большой, и даже реализаторам влом было).
Igor
Мне вот переодически, разве что, не хватает bitwise операций не вызовами функций из таблички bit, а операторами, как в 5.3
Igor
Всё равно, позиция у него странная. Это всё равно, что сказать "ядро Linux 4.x перестало быть линуксом после появления ветки 5.x".
Хотя может он так и думает.
Snusmumriken
Ну ды ))
Snusmumriken
Мне пришлось сейчас ему объяснять суть версионирования. Интересно, зобанит или нет.
Snusmumriken
Я видел как он общается. Кажется, и правда не понимает. Очень упёртый человек. Правда, ему столько лет, что не факт что он в принципе может стать гибче.
Snusmumriken
Прост мне довелось года три назад поспорить с ним на этот счёт, и мне грозили баном, поэтому я такой: "ок, палехчи" ))
Lucky
Толку-то с этих споров?
Lucky
Одно дело - выяснять в процессе обсуждения подробности того, что и как работает, другое - эти вот религиозные срачики пустопорожние.
Pavel
Есть софт (ip-pbx asterisk), в котором Lua используется для описания планов набора. При старте asterisk грузит конфиг на Lua и запускает его интерпретацию при каждом звонке.
Все замечаиельно, но если в коде есть require(), то происходит считываение этого модуля из файловой системы при каждом запуске.
Как с этим обстоит в других системах со встроенным Lua, может можно как-то закэшировать модули?
Igor
Roma
Alexey
Yuriy
Anonymous
В луа же есть кстати какое то вспоможение для разделяемых стейтов в одном. Типа Sol::thread
Это какая то хитрая штука или просто текущая корутина?
Pavel
Pavel
Yuriy
ну... такой конфиг смысла то особого не имеет... как минимум касаемо require и http.request
Snusmumriken
А там само ядро создаёт луа-стейты на каждый чих? Его нельзя пофиксить, на манер той же опенрести с async_io?
Pavel
Yuriy
Anonymous
Snusmumriken
Чо за асинкио в рести?
Ну там типа открывается всего несколько луастейтов на всё, и эти луастейты очень быстро переключаются между задачами, в моменты простоя (чтение сокетов, запись на диск).
Snusmumriken
И они держатся пока сервер не завершит работу.
Anonymous
А там используется кооперативный мультитаскинг нжинкса что-ли?
Snusmumriken
Ага
Anonymous
Это хорошее решение
Yuriy
в nignx вообще на сколкьо я помнб даже сокеты используются обстрактные nginx-ковые (cosokets по-моему), соответсвенно они и не блокирующие получаются.
Snusmumriken
Ну, это очевидно абстракция над осевыми сокетами, но да, оно сделано так чтобы быть зашибись.
Pavel
Yuriy
Тогда может профита в Lua-кофниге перед AGI на том-же Lua и нет?
есть
Он вполне быстрый и более гибкий, а самое главное читабельный чем обычный extensions.conf
AGI умеет далеко не все
но вообще каждый использует то, что удобнее ему
НО extensions.lua надо использовать с умом и пониманием того как работает астериск
Alexey
Yuriy
Pavel
Как-нибудь из программного кода можно получить имя пакета? json = require('json')
Узнать, это luajson, lua-json? ._NAME не у всех модулей есть.
Snusmumriken
Изнутри самого пакета —
local requiredname = ...
Если тут nil — модуль вызван самостоятельно.
halt
Парни, вопрос.
А можно ли перенести строку кода если нет пробелов?
Типа такого...
/tts?format=mp3&quality=hi&platform=web&application=translate&lang=ru_RU&speaker=ermil&emotion=good&......
А то строка шибко длинная и выходит из видимости
Artem
halt
типа
"bla-bla-bla" ..
.. "bla-bla-bla"
?
mva
halt
Спасибо. Сработало
fgntfg
ipairs
Denis
pairs даст тебе все ключи
Highly Likely
Pairs
Highly Likely
Обычно дает, но это UB емнип
Highly Likely
Читай про next()
Highly Likely
Емнип так и есть
Snusmumriken
Вот примерно так работает pairs.
local key, value = next(tbl)
while key do
.. do stuff
key, value = next(tbl, key)
end
Highly Likely
Ну и формально, дырки могут быть только в линейном массиве
Snusmumriken
Но самый главный прекол — вот в этом.
Цикл for .. in — сам сохраняет промежуточные состояния и посылает их в функцию итератор.
Highly Likely
https://www.lua.org/source/5.3/ltable.c.html
Highly Likely
Это если совсем скучно станет :)
Highly Likely
Highly Likely
Highly Likely
@zarif_li :)
Highly Likely
Довольно приятные исходники у Луа
🐅🤦♂️
Имеет смысл писать для tcp соединения такой код отправки и приема? Типа сокет отправил не до конца данные, пробую доотправить.
function sendData(sock, s)
local totalsent = 0
while totalsent < #s do
local size, err, last = sock:send(string.sub(s,
1 + totalsent, #s))
if err then
return false, err
end
totalsent = totalsent + size
end
return true
end
Igor
Имеет смысл писать для tcp соединения такой код отправки и приема? Типа сокет отправил не до конца данные, пробую доотправить.
function sendData(sock, s)
local totalsent = 0
while totalsent < #s do
local size, err, last = sock:send(string.sub(s,
1 + totalsent, #s))
if err then
return false, err
end
totalsent = totalsent + size
end
return true
end
Местами у меня бывало, что даже TCP данные доходили не полностью, так что думаю, что имеет