Сергей
Тоесть как я понял 5.2 до сих пор идет как новинка?
mva
Нет
mva
Он идёт как уже устаревшее апи, которое не набрало достаточной аудитории для продакшн-юза
mva
У 5.3 и то больше сторонников. Посмотрим, что будет с 5.4
Александр
А что крутого в 5.4 будет?
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
Если что, в луашных библиотеках есть специальная функция int luaopen_[libname], которая как раз экспортирует весь фарш в луа. Например, как тут. https://pastebin.com/Ag07yDKS А то что ты скачал таки сишная либа для сишки.
А ясно, либа 32х битная, интерпретатор тоже весь 32х битный, кстати что это за кракозябры зеробран пишет? Это коды символов, в ютф8 или в аски? И как сделать чтобы не кракозябры а нормальные мессаги писал?
Snusmumriken
Ну ты можешь посмотреть, что это какая-то бинарщина, которую можно интерпретировать десятком образов
Snusmumriken
Скорее всего chcp1251 или 1252, смотря где собирали либу. Зеробране не справился с распознаванием кодировки и выдал коды.
Igor
Самый действенный вариант - сидеть на английском языковом пакете, тогда точно проблем с кодировкой не словишь
Lucky
если из внешних файлов строки посасываешь, тогда либы нужны
Lucky
хотя тоже проще сконвертировать, если возможно.
Pavel
Ребят, @gotzmann в частности. Лчень нужна ваша помощь.
Pavel
дайте пожалуйста оценку - какие расходы у парсеров на инфраструктуру.
Pavel
+- километр
Pavel
В частности - можно на примере парсеров юлы\авиты\маркета
Pavel
делаю презентацию одного продукта. и для наглядности хочется цифрами пооперировать. вдруг кто может поделится примерными расходами (ну типо и спользуем 5 инстансов от DO по 10$ в месяц + proxy (еще 50$ в месяц ))
Serezha
В частности - можно на примере парсеров юлы\авиты\маркета
У меня попроще задачи, все крутится на виртуалках Хецнера. Основные расходы не в железо а в оплату распределенного прокси улетают (парсинг и гугл транслейт)
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Encrypt lua
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Good sir?
Serezha
Без напряга такой сервер прожует трафик от прокси за который заплатишь раз в 100 дороже самой железки
Pavel
CX51: https://www.hetzner.com/cloud-ru
а сколько штук таких ты держишь? 1го не хватает?
Serezha
Так я без размаха, для себя :) Два сервера: сайты, эксперименты... Больше штуки баксов не сливал за месяц никогда
Serezha
это на жэелезо 1000-) ну норм
Нет, сервер только 40 евро, а прокси может сжечь 1000 легко :)
Pavel
Нет, сервер только 40 евро, а прокси может сжечь 1000 легко :)
понял. Ты мне ОЧЕНЬ помог. мое тебе спасмибо
Serezha
понял. Ты мне ОЧЕНЬ помог. мое тебе спасмибо
И кстати, я не парсил сложные сайты которые требуют хедлесс браузер полноценный с жабоскриптом. Они наверное жрут ресурсы будь здоров :)
Vyacheslav
Подскажите плз, как-нибудь можно получить извне локальную переменную пакета?
Tverd
На то она и локальная, что бы не раскидывать ее кругом )
Tverd
Но если хочешь покопаться, то setfenv и getfenv
Vyacheslav
Но если хочешь покопаться, то setfenv и getfenv
хм, спасибо, сейчас попробую
Tverd
хм, спасибо, сейчас попробую
но проще всего сделать локальную переменную пакета - глобальной
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
Мне кажется это сервис отдает , и надо смотреть в доках у них