Сергей
Тоесть как я понял 5.2 до сих пор идет как новинка?
mva
Нет
mva
Он идёт как уже устаревшее апи, которое не набрало достаточной аудитории для продакшн-юза
mva
У 5.3 и то больше сторонников. Посмотрим, что будет с 5.4
Александр
А что крутого в 5.4 будет?
Ivan
типа деструкторы
Александр
А они вызываются когда сборщик мусора пройдется или при выходе из скоупа?
Ivan
Ivan
при сборке мусора и сейчас есть
Александр
Ivan
Igor
Количество аргументов, возвращаемых функцией
Igor
Проще говоря сколько пушей, столько и должно быть в return
Igor
А если в функции произошла ошибка, то машина делает джамп и функция далее не исполняется
Igor
Но это только в случае вызова lua_error (или luaL_error, не помню точное название)
Igor
Если компилятор будет ругаться на то, что функция ничего не возвращает, то просто return 0; сделай, всё равно код недостижимый, соответственно и не сильно важно, что функция вернёт
Igor
luaL_error нужно вызвать, в документации только что глянул
Igor
Там, кстати, есть всё, что я написал выше
Igor
Использует
Igor
В глубине машины самой
Igor
В lua 5.1, напрмер
Igor
Я прошагал вниз по макросу lua_call
Igor
Дошёл до ldo.c, и увидел там на 413 строке функцию luaD_precall
Igor
Она проверяет чем является переданная функция, если она сишная, то вызывается внутри этой функции, а если луёвая то идёт дальше
Igor
И вот как раз в этой функции на строке 434 вызывается переданная сишная функция
Igor
То, что она возвращает пишется в переменную n и позже используется в вызовах api_checknelems и luaD_poscall
Igor
Дальше лезть мне было лень, но скорее всего если число неверное будет, то мало того, что у тебя вернутся не все аргументы но и забьётся стек ненужными данными
Igor
Если в доках написано, что она нужна, значит она явно нужна, была бы не нужна в качестве возврата функции был бы void
Igor
Ошибочка, сорцы у меня от 5.3 лежали, не 5.1
Igor
Количество Lua values, которая возвращает Lua-C функция (сколько слотов стека ниже L->top будет использовано caller-ом из callee frame).
Если ошибка, то обычно возвращают признак ошибки (nil) первым аргументом и ошибку. Т.е. надо положить эти два значения на стек и вернуть 2.
Anatoliy
Ребяты всем привет, подскажите по вопросу - захотел опробовать библиотечку SQLite в скриптах луа, скачал отсюда https://www.sqlite.org/download.html https://www.sqlite.org/2019/sqlite-dll-win32-x86-3300000.zip, подключаю её в скрипте require "sqlite3" - Zerobrane ругается -
Anatoliy
Snusmumriken
В первую очередь, проверь разрядность библиотеки (и совпадение с интерпретатором).
Snusmumriken
Во-вторую очередь, ты скорее всего подключаешь сишную библиотеку для сишки, а не сишную библиотеку для луа.
Snusmumriken
Оно скорее всего ругается что "procedure luaload_sqlite3 not found"
Snusmumriken
Если что, в луашных библиотеках есть специальная функция
int luaopen_[libname], которая как раз экспортирует весь фарш в луа. Например, как тут.
https://pastebin.com/Ag07yDKS
А то что ты скачал таки сишная либа для сишки.
Anatoliy
Snusmumriken
Ну ты можешь посмотреть, что это какая-то бинарщина, которую можно интерпретировать десятком образов
Snusmumriken
Скорее всего chcp1251 или 1252, смотря где собирали либу. Зеробране не справился с распознаванием кодировки и выдал коды.
Igor
Самый действенный вариант - сидеть на английском языковом пакете, тогда точно проблем с кодировкой не словишь
Lucky
Lucky
если из внешних файлов строки посасываешь, тогда либы нужны
Lucky
хотя тоже проще сконвертировать, если возможно.
Alexey
Pavel
Ребят, @gotzmann в частности.
Лчень нужна ваша помощь.
Pavel
дайте пожалуйста оценку - какие расходы у парсеров на инфраструктуру.
Pavel
+- километр
Pavel
В частности - можно на примере парсеров юлы\авиты\маркета
Pavel
делаю презентацию одного продукта. и для наглядности хочется цифрами пооперировать. вдруг кто может поделится примерными расходами (ну типо и спользуем 5 инстансов от DO по 10$ в месяц + proxy (еще 50$ в месяц ))
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Encrypt lua
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Good sir?
Pavel
Serezha
Serezha
Без напряга такой сервер прожует трафик от прокси за который заплатишь раз в 100 дороже самой железки
Serezha
Так я без размаха, для себя :) Два сервера: сайты, эксперименты... Больше штуки баксов не сливал за месяц никогда
Pavel
Pavel
Vyacheslav
Подскажите плз, как-нибудь можно получить извне локальную переменную пакета?
Tverd
На то она и локальная, что бы не раскидывать ее кругом )
Tverd
Но если хочешь покопаться, то setfenv и getfenv
Vyacheslav
Vyacheslav
Snusmumriken
Запихнуть в табличку пакета.
module.lua
local M = {}
M.foo = 100500
return M
main.lua
local lib = require"module"
print(lib.foo) --> 100500
А ещё можно нафигачить геттеров-сеттеров, чтобы всякие злодеи не испортили переменную:
local foo = 100500
local M = {}
function M.getFoo() return foo end
function M.setFoo(v) foo = check(v) or foo end
return M
Snusmumriken
@EliasDaler тут хочет запостить мегаблог по форку луажыта https://eliasdaler.github.io/luavela/
Tverd
Спасибо, good job
Anonymous
А он чо тоже там работет?
Anonymous
Или просто энтузиаст?
Anton
Просто энтузиаст, а ещё там работает :-)
Anton
Но пост написал по своей инициативе.
Anonymous
Понятно
Pavel
https://habr.com/ru/company/oleg-bunin/blog/471684/
Serezha
проблемы гарбадж коллектора и строк в луаджите обсуждаем здесь периодически - как в статье
Anatoliy
Ребяты всем привет, будьте добры кто нибудь подскажите, по проблеме: хочу отправить API запрос на криптобиржу EXMO, https://exmo.me/en/api, метод user_info
Скрипт в упрощенном виде выглядит так:
mime = require("mime")
ltn12 = require("ltn12")
ssl = require("ssl")
http = require("socket.http")
https = require("ssl.https")
socket = require("socket")
function httpreq(req,file)
local r, c, h, s
local body = ''
local resp
local method,url,sink
https = require("ssl.https")
r, c, h, s = https.request {
method = "GET",
url = req,
headers = {Key='MyAPIKey'},
sink = ltn12.sink.file(io.stdout)
}
return body, r, c, h, s
end
body = httpreq('https://api.exmo.com/v1/user_info')
print (body)
В итоге получаю ответ:
{"result":false,"error":"40007: Incorrect format parameter 'nonce'"}
Что это за параметр nonce для чего он и как его правильно задать?
Alex
Мне кажется это сервис отдает , и надо смотреть в доках у них