OptimusZero
А подскажите мне непонятливому. Есть свой проект на esp32. В нем используется lua 5.4. стандартный Включено lua32bit и usec89. Скрипт на lua вполне нормально отрабатывает dofile то есть со стороны обвязки с файловой системой все работает. Но вот совсем никак не получается использовать в самом скрипте функции работы с файлами через io. Говорит что global io такого нету Хотя luaopen_io я вызываю в c обёртке
OptimusZero
как всегда - сам спросил - сам ответил ) luaL_requiref(LUA_state, "io", luaopen_io, 1); //luaopen_io(LUA_state); вот так работает The particular problem here is that luaopen_io does not store the module table in _G, hence the complaint that io is a nil value. Take a look at the source code for luaL_requiref in lauxlib.c if you want to know the gory details.
OptimusZero
теперь другая штука: global 'require' is not callable (a nil value)
OptimusZero
да - спасибо - уже дошло //luaopen_base(LUA_state); //luaopen_table(LUA_state); //luaopen_string(LUA_state); //luaopen_math(LUA_state); //luaL_requiref(LUA_state, "io", luaopen_io, 1); luaL_openlibs(LUA_state); это кусок был с rsp8266 а там ресурсы ограничены - вот и использовался ограниченный набор библиотек
Wsevolod
Какие еще есть способы переделывать код на коллбеках в процедурный? Сейчас у меня примерно так: -- before: local pipe = uv.new_pipe() pipe:connect(sockpath, function(err) -- handle error end -- after local pipe = uv.new_pipe() local co = coroutine.running() pipe:connect(sockpath, function(err) coroutine.resume(co, err) end) local err = coroutine.yield() -- handle error проблема в том, что здесь 1 корутина, решение не работает, если я хочу "ждать" несколько коллбеков от libuv
Wsevolod
И да, точку входа приходится в корутину оборачивать
Miautron
Друзья, а как то можно отделить компилятор в байткод от виртуальной машины? Есть какой-то дефайн для этого, может быть? Хочу иметь отдельно компилятор, который будет исходники на Lua в байткод компилировать, и виртуальную машину, которая будет этот байткод исполнять, без кода всяких парсеров лексеров и тд.
Miautron
А какие части языка зависят от loadstring? Я бы от него избавился бы совсем.
Aydar
А как будешь loadstring etc реализовывать?
Я так понял они не нужны, но таких реализаций луа я не видел наверное только если самому сделать
Miautron
Альтернативный вопрос: а есть какой-нибудт эмбеддабл скриптовый язык, типа Луа, но со статической типизацией (на Си написанный)?
Leon174
Хм... Встройка, скриптинг и статика. AngelScript разве что. Не пробовал, но писали, что тот еще тормоз. Но под условия подходит. http://angelcode.com/angelscript/
Leon174
Кстати, Ravi еще. Но там все экспериментальное такое. https://github.com/dibyendumajumdar/ravi
Leon174
Пожалуй, еще Wren. Там все на классах. https://github.com/wren-lang/wren
Leon174
Вот такое еще нарылось. Выглядит неплохо. https://fascinatedbox.gitlab.io/lily-docs//
Leon174
Nelua с его промежуточной компиляцией в C точно не встройка, а Умка прикольный.
Aydar
Nelua с его промежуточной компиляцией в C точно не встройка, а Умка прикольный.
Я не изучал, но с моей точки зрения компиляция в C неплохой вариант. Если конечно это всё можно линковать с другим сишным кодом
Leon174
Ха, а TinyC же может как интерпретатор работать. https://bellard.org/tcc/
Miautron
Umka - интересная штука, но пока не прадакшн рэди проект. Хотя можно попробовать его потыкать. Кстати автор, похоже, русский)
Miautron
Чет у Умки даже никакого синтакс хайлайта нет для VSCode((
OptimusZero
Перебирал многие варианты для есп32. Начал даже к wasm3 прмсатрмватся. В итоге выбор остался на lua
Aydar
Чет у Умки даже никакого синтакс хайлайта нет для VSCode((
Из https://github.com/vtereshkov/umka-lang/blob/master/Umka.sublime-syntax можно сделать наверное
OptimusZero
Lua все же красивее выдает дебаг. Ошибки
OptimusZero
Сегодня докрутил файловую систему. В итоге dkjson отлично встал на свое место. И свободной памяти в пределах 170-200кб ещё есть
Miautron
Lua все же красивее выдает дебаг. Ошибки
А поверх Луа нет какого-нибудь добротного статически типизированного языка? Я знаю только Haxe, но он кошмарный Lua-код генерирует.
Leon174
Есть https://github.com/teal-language/tl
mva
или тебе чтобы комплиировался в lua?
Leon174
И вот это еще, луашный выхлоп гораздо чище, как по мне. И VS Code опять же вообще родной. https://github.com/TypeScriptToLua/TypeScriptToLua
Leon174
А поверх Луа нет какого-нибудь добротного статически типизированного языка? Я знаю только Haxe, но он кошмарный Lua-код генерирует.
Я тоже офигевал от луашного кода. Пока не попробовал вывод в джаву... Там, не побоюсь этого слова, такого навалило... Хорошо, что мне такого не надо. А вот под HashLink понравилось.
Miautron
ravi же ж, уже давали же ссылку
Да, я видел. В идеале, чтобы запускался на виртуальной машине Луа без какого-то серьезного оверхеда. То есть, либо с компиляцией в нормальный Луа-код (а не как Хаксе в 100500 строк и еще с зависимостями от тяжелых библиотек типа libuv), либо с компиляцией напрямую в байт-код.
Leon174
Еще вот такое есть, очень добротно выглядит. Но хаскелевский стек это такое себе развлечение. https://github.com/amuletml/amulet
Miautron
Спасибо большое. Мне пока хватит, я посмотрю все варианты, которые вы мне накидали, подумаю, может что-то подойдет из этого.
Leon174
Без статики, а так хорош. https://github.com/marcobambini/gravity
Miautron
Без статики, а так хорош. https://github.com/marcobambini/gravity
Да, на сайте у них написано, что скоро будет манифест тайпинг (как в Питоне), но уже достаточно долго висит, может уже и забили на это.
KOSHMARIK
Друзья подскажите есть ли готовое коробочное решение для генерации исходников луа из файлов xml/json /чего то ещё. Пользователь работает в приложении wpf,где набрасывает бизнес логику в UI. Данные экспортируются в хмл. Как преобразовать их в луа скрипт,не изобретая велосипеда? Пользователь не технарь, заставлять учить луа нельзя.
mva
во-первых, Lua специально создавался для не-технарей
mva
даже нумерация в массивах с единицы
mva
во-вторых, твой вопрос подразумевакт что мы знаем что такое "приложение wpf", а это не так. И заставлять людей, отвечающих на твой вопрос гуглить что ты имел в виду (да ещё и с шансом ошибиться) - моветон как минимум
mva
в-третьих, если где-то что-то и есть, то искать нужно в инфраструктуре вокруг этого "приложения wpf"
mva
xml/json/что-то ещё - это не просто файлы. Это форматы хранения данных. Данные бывают разные.
mva
xml - вообще язык разметки, json - структура объектной нотации данных для упрощённой передаци, а Lua - язык программирования
mva
ни о каком ПРЕОБРАЗОВАНИИ рандомно взятого представителя одного из них в другое речи идти не может
mva
так что ищи в экосистеме этого своего поделия конвертеры в Lua. // ну, или пиши сам 🤷‍♂️ это не так сложно, как может показаться
Snusmumriken
Snusmumriken
Дело в том, что данные в одном формате можно преобразовать в данные в каком-нибудь другом формате. "Преобразовать данные в скрипт" может означать слишком много всего, например прочитать луа-скриптом, распарсить и что-то сделать на основе скрипта, или, как я предположил выше — "преобразовать в языкочитаемый вид". Вкратце: скрипт это действия, данные это данные, и от них могут зависеть действия, но это не обязательно.
Snusmumriken
Есть опыт взаимодействия с ним?
mva
потому что я почти уверен, что он хочет чтобы на выходе был готовый код, который делает "зашибись и чтобы музыка играла" :)
Snusmumriken
Ну пока не уточнил — нет смысла гадать.
mva
Есть опыт взаимодействия с ним?
есть опыт взаимодействия с людьми настолько же неконкретно формулирующими вопросы про %рандомная_хрень_нейм% лишь косвенно связанные с онтопом чата :)
Snusmumriken
Будь выше этого. Сначала узнаём полную историю, потом решаем. Преждевременные эя.. Выводы не всегда имеют основания для каждого конкретного случая.
mva
кстати, у меня, вот, более онтопичный вопрос (но тоже хрень, на самом деле)
Snusmumriken
Давай :)
mva
за глобальные реквайры внутри цикла не бьют же раскалённой кочергой? :)
Snusmumriken
В своём проекте — не думаю.
mva
а то вот напала на меня шизофрения которая не хочет делать реквайры ради пустого прогона скрипта, если аргументы будут "неподходящие" или их вообще не будет
mva
а т.к. насколько я помню повторный реквайр погоды не портит - положил я их внутрь цикла проверки аргументов
mva
но всё равно грустно от костылей 😢
Snusmumriken
Но мб проще сделать что-то такое: local modules = { "foo", "bar", "foobar", "socket" } for i, module in ipairs(modules) do modules[module] = require(module) modules[i] = nil end И потом пихать всем подряд.
mva
я про такое
Snusmumriken
Угу
Snusmumriken
Не, пофигу в целом на реквайры в данном контексте.
mva
ну всё равно не покидает ощущение говнокода :)
Snusmumriken
Постоянно переопределяешь глобальную переменную на ссылку на неё же, в целом фигня. Если не хочешь говнокода — просто сделай переменные локальными
mva
я, кстати, об этом думал (локальными но на топлевеле
Snusmumriken
for i, v in ipairs(something) do local i = require'inspect' local c = require'curl' ... end В общем-то всё.
Snusmumriken
Можешь вывести на топлевел нормальные названия, а в цикле сделать local i = inspect как шорткат, если тебе особо важна производительность. Но тут есть курл, значит на производительность явно пофигу.
KOSHMARIK
Хорошо,абстрагируемся от впф и от того,откуда берется xml файл с данными. Допустим, у меня есть хмл файл. Я ищу утилиту/либу/движок, которой можно скормить этот файл,и чтоб на выходе утилита сгенерировала исходник луа. Я знаю,что можно самому сесть и написать кастомный парсер хмл ,потом окунуться с головой в синтаксические анализаторы,теорию компиляторов и потеряться там на полгода))) потому то и ищу решение из коробки,чтоб не изобретать велосипед. Привожу пример хмл файла и готового скрипта который я хочу получить на выходе. Конечно пример упрощён,по факту утилита должна уметь генерировать любые языковые конструкции луа из исходного хмл файла (таблицы, циклы, и прочее)
KOSHMARIK