Snusmumriken
Потом код на github кину, как немного отполирую :)
А чем превращатор json в lua-table плох? Таких много, превращают в обычную lua-таблицу, благо они совместимы с json.
mva
Потом код на github кину, как немного отполирую :)
если оно ещё и быстрее/оптимальнее по памяти чем cjson будет, то будет вообще ня
Snusmumriken
Хм. Просто есть cjson, да, с удобным интерфейсом : )
Snusmumriken
И есть просто json-либы, на чистой луа, но чутка медленнее работают.
Elias
Я сделал биндинг, потому что на C++ стороне использую JSON for Modern C++ И я на C++ стороне открываю JSON, получаю json объект и часть данных получаю в C++, а часть - в Lua При этом если бы я использовал Lua библиотеки, то мне пришлось бы два раза один и тот же JSON парсить, что было бы плохо. Производительность биндинга пока не тестировал. :)
Snusmumriken
Хмм. А на С++-стороне это как выглядит? Превращает json в некоторый объект, типа списка списков списков указателей на отдельные "ноды" json?
Snusmumriken
Потому что ты теоретически мог бы знаешь что сделать? Один раз грузить json на луа-стороне, а потом передавать луа-таблицу на С++-сторону, чтобы там с ней баловаться, например.
Elias
Ага Можно, но Lua таблица не будет настолько же быстрой, как C++ контейнер. Большая часть загрузки больших JSON происходит именно на C++ стороне, на Lua относительно небольшая часть данных грузится
Snusmumriken
Не факт что луа не такая же быстрая : ) Если грузишь большие json'ы на C++, выгружая кусочки в луа - можно в луа выгружать луа-таблицу, сгенерированную из куска контейнера. Или тебе ещё и нужно редактировать эту таблицу из луа, чтобы и на С++-стороне менялось?
Snusmumriken
Я просто предпочитаю разделять такие штуки.
Snusmumriken
Например, тут - у нас есть класс ChanheTitle_t, который хранит у себя данные, которые потом передаются на луа-сторону методом tolua.
Snusmumriken
И на луа-стороне не используется никаких userdata и нестандартных типов данных, специально чтобы у пользователя было меньше поводов что-то сломать, напороться на невозможность сериализации данных, например, и всего такого.
Elias
Эти кусочки не всегда идут в большом JSON как один объект. Всё-таки удобно передавать целый JSON и потом давать скрипту делать с ним всё, что угодно И да, иногда нужно изменять JSON на стороне Lua Да и к тому же someJson.someKey.someKey2 в Lua на C++ стороне напрямую обратится к someJson["someKey"]["someKey2"]. И никаких таблиц не нужно дополнительно создавать Биндинг библиотеки строк 100 занимает, работает довольно быстро. И если я и хочу сделать из JSON Lua-таблицу, то я могу это сделать на Lua стороне вызовом C++ функции.
Snusmumriken
Оки : )
Elias
И да, если напрямую использовать Lua C API, то то, как ты делаешь, наверное, лучше. А я просто как казуальщик использую sol2, поэтому для меня сделать userdata - вообще не беда, не парюсь особо по такому пока что. :D
Snusmumriken
У меня бзик на "простые решения, которые не дают никому ничего сломать", а ещё на "решаем все задачи на луа-стороне, С++ - только для расширения функционала".
Columbus
А зачем вообще парсить жсон через луа?
mva
А зачем вообще парсить жсон через луа?
а где его ещё парсить, если приложение на lua?
Columbus
Зачем делать приложение на луа?
mva
...
Columbus
Я так поняла, что луа медленнее, чем си/си++
mva
Columbus
Луа как скриптовый язык хорош, он для этого охуенный
Snusmumriken
Ну представь себе, что ты делаешь сетевую игру. У тебя есть сервер, который общается через json. Ты делаешь ему запрос: local request = { type = 'leaderboard', value = 'UserPupkin', } server:send(json.encode(request)) data = server:receive() print(data) --[[ { kills = 10, death = 20, assExplodes = 100500 } ]] Ты это парсишь, и добавляешь в статистику игрока.
mva
Луа как скриптовый язык хорош, он для этого охуенный
покажи в современном мире хоть одно веб-приложение не на скриптовом языке, плз
mva
(они есть, да, но я уверен, что не покажешь)
Columbus
А не проще сделать функции для работы парсера в плюсах и ебануть их в луа
Snusmumriken
Зависит от твоих конечных целей.
Columbus
Тут скорость важна
mva
Я так поняла, что луа медленнее, чем си/си++
я как-то в IRC постил. и в конфе prosody, вроде, тоже. Делал я как-то на pure lua имплементацию sha512+crypt() (пароли в линупсах). Она работала от двух до десяти раз (в зависимости от к-ва циклов) быстрее референсной C-имплементации
mva
Тут скорость важна
где "тут" и кому важна?
Columbus
Тут, в конечной проге, важна мне
Columbus
Мне скорость важнее всего
mva
ну, так то у тебя в твоей неведомой проге
mva
а выше ты задаёшь более общий вопрос "зачем вообще"
mva
это немного разные вещи
Columbus
Так луа же обернут вокруг си
mva
...
Columbus
Поэтому я думаю, что оно должно работать медленнее, чем си, но луа да, самый быстрый из скриптовых языков
mva
ни вокруг чего Lua не обёрнут
Columbus
Питон люто медленный, squirell быстрый, но не популярный
mva
у Lua если лексические правила, которые можно парсить на чём угодно, включая сам Lua
Columbus
ни вокруг чего Lua не обёрнут
У него есть компилятор?
mva
LuaJIT, вон, вообще изобрёл DynASM
Columbus
Кроме интепретера у луа вроде ничего нет, в бинарники луа может?
Columbus
LuaJIT, вон, вообще изобрёл DynASM
Про луажит я мало слышала, но вроде он быстрый
Columbus
да
Вау
Columbus
Я думала, что есть только луа, который как либа для си
Columbus
Ну и жит
Snusmumriken
Тут скорость важна
Скорость - смотря где важна. Ну смотри. Тебе надо обновлять лидерборд раз в пол года, но при том - нужно легко переносимое приложение без перекомпиляций. Ядро у тебя уже есть, скомпилированное под всё, и тебе лень компилировать С/С++-либу под всё, или пересобирать ядро десять раз, с правками под каждую версию, где будут запускать твою приложулю. Делаешь не шибко требовательную к скорости часть на луа, получаешь полную переносимость.
mva
Я думала, что есть только луа, который как либа для си
этого уже достаточно для того чтобы завернуть lua-скрипт в бинарник
mva
он даже, скорее, отрицательный
mva
потому что на производительность это не повлияет ВООБЩЕ никак, а запиливая код в бинарник ты ещё и усложняешь дебаг (и скрываешь код). Сразу два плохих дела.
Snusmumriken
Я, например, активно использую love2d. Это - фреймворк с биндингами в луа, и он уже скомпилирован на 100500 архитектур. Модификации исходного кода фреймворка для меня - табу, поэтому я всё что можно пишу на луа, а что нельзя - пишу в виде динамически подключаемых сишных библиотек, благо их после этого можно подключать к чему угодно, что использует луа, не только к этому движку-фреймворку.
Elias
Я всегда любил C++, но после того, как пописал много на Lua, начал жалеть о том, что не начал писать игру изначально на Love2d. С Lua просто легче и приятнее жить, что ли. 😆
Snusmumriken
С++ не даёт нормальной переносимости, приходится много трахаца чтобы запускать и там и там.
mva
я знаю одного C++ специалиста, который пишет так, что компилировать это может только clang
Snusmumriken
В моей стимовой либе - не используется ничего кроме стима и STD, поэтому она ОТНОСИТЕЛЬНО переносима. Но стимовая часть компилится только VS, и ничем другим, это особенность самого стима.
Elias
Зависит от платформ У меня игра на Windows, Linux и Mac компилируется без проблем с CMake. Использую только кроссплатформенные библиотеки, так что в целом проблем нет Хотя в этих библиотеках могут быть платформо зависимые баги... и вот тогда лучше застрелиться
mva
потому что там последние стандарты, лямбды и прочее во все поля
Snusmumriken
Ну, в VS можно настроить выход для линупсов/arm.
mva
напомню, что vs есть только под одну ос и одну процессорную архитектуру
mva
(ну, без кросскомпиляции, с которой там грустновато)
Snusmumriken
Надо будет тестить стим с кросскомпиляцией.
Snusmumriken
Ох лол, оказывается можно сохранить ссылку на луа-таблицу, и использовать её в своих грязных целях.
Snusmumriken
Хотя я скорее сделаю чуть другую фиговину, типа: 1. При инициализации стима, начинаем трекать таблицу steam.event (мы её выгружаем вместе с таблицей steam) 2. Колбеки - проверяют наличие нужной функции в таблице event, и при наличии - запускают её через lua_pcall.
Elias
Думаю скоро работу искать, и даже хочется пойти куда-то, где будет Lua или Python Жить будет легче. Но 7 лет на C++ жаль просто так оставлять :D
Tverd
Переходи на nim )
Elias
А на нём много кто кодит?
Алексей
https://iponweb-events.timepad.ru/event/610813/
Алексей
(извините за наглость)
Tverd
А на нём много кто кодит?
да в том то и дело что не много, хотя очень крутая штука
Snusmumriken
Elias
https://iponweb-events.timepad.ru/event/610813/
О, спасибо А то пропустил бы. До этого все пропускал :(
Elias
да в том то и дело что не много, хотя очень крутая штука
Что там крутого в сравнении с мейнстримом?