Lucky
Ну, может он просто интересуется, интересно ли кому-нибудь это настолько, что он готов пожертвовать чашкой кофе и шоколадкой.
Lucky
Или килограмом говядины.
Lucky
Я, когда к проекту перевода учебников монетизацию прикручивал. тоже примерно так же рассуждал.
Lucky
но я ещё и безработным был тогда.
Hauve
А я сейчас безработный (в колледже на 3 курсе учусь). Может тоже попробовать?
Snusmumriken
Anonymous
toggle = true
Anonymous
Эквивалентная запись
Hauve
Leon174
Anonymous
Поч?
Ivan
потому что false
Snusmumriken
(строки)
Andrey
:D
Andrey
к с++26 обещают починить!
Snusmumriken
(может быть)
Andrey
ну ты сначала подожди 7 лет, а потом утверждай.
Snusmumriken
Эх, ну ладно.
Hauve
Я ох уж как жду модульность от C++20
Hauve
Я всё лето питон учил. После него подключать либы в плюсах - ад
Hauve
Пробовал юзать систему сборки waf, она на питоне строится. Вышел python 3.8. Waf перестал билдить ахах
Кажется, придётся CMAKE учить
Snusmumriken
А я жду языка, который может компилироваться и интерпретироваться на выбор, у которого есть опциональная статическая типизация, опциональная сборка мусора, и луаподобный синтаксис (в смысле, лаконичный и без мусора). И чтобы там были строки.
Andrey
>опциональная сборка мусора
сложна!
Hauve
Да нет
Hauve
Не сложно
Snusmumriken
Ну знаешь, наличествует по умолчанию но можно сказать что этот объект не нужно собирать, типа сам удалю когда надо будет
Hauve
Ты можешь взять исходники lua и переписать их под себя
Snusmumriken
Возможно так и сделаю, блин
Snusmumriken
Мне очень нравится динамическая природа луёв, но время от времени нужно размечать битмапы, и они в виде таблицы жрут ну очень много (long вместо bool). А если таблица ещё и двухмерная - вообще кошмар (ссылки на ссылках). Сейчас с этим справляется ffi и внешние либы.
Andrey
Hauve
Я как раз-таки нечто подобное читал где-то, но не помнил про какой язык :D
Snusmumriken
С другой стороны, яп который может компилироваться и интерпретироваться на выбор, это фактически зашивание интерпретатора в экзешник. Но все что мы руками написали как статическое - можно и скомпилировать во время генерации экзешника, побырее будет.
Snusmumriken
Надо написать ffi-либу, которая будет мутить настоящие битмапы (char, восемь бит на один символ, доступ к отдельным битам через __index/__newindex)
Andrey
а у метатейблов же оверхед условно в 2 проверки указателей?
Snusmumriken
Ага, и это грустно. Поэтому надо ещё написать функции для прямой работы с. Меня больше интересует минимальный объем памяти, потому что время от времени нужны огро-омные битмапы.
Andrey
ну, если они в кеше, то не так уж и дорого поди!
Snusmumriken
Просто для игровой тайловой карты с разными типами блоков хватит, например, массива char/short, а для коллизионной модели в игре типа worms, если мы не хотим полигонов (мы их не хотим), нам нужны именно битмапы.
Andrey
но вообще звучит как то, что даже если заэкспозить апи на метатейблах, то оверхед для побитовых операций будет сильно большой. мб границу логики между С и Lua иначе провести
Snusmumriken
Да, сделать нормальные сишные объекты с сишными метаметодами.
Snusmumriken
Фигня в том что даже сишка не работает с битами, только с байтами : )
Выяснить, стоит ли тут флаг можно через битовый сдвиг или | с байтом, где этот флаг уже стоит.
Andrey
std::vector<bool>!
Andrey
говорят, очень хороший дизайн
Snusmumriken
Тут каждый буул занимает один октет, оверхед памяти в восемь раз.
Andrey
не, в плюсах специальную перегрузку сделали для bool в векторе, которая оборачивает побитовые операции
Snusmumriken
Хмм.
Hauve
Andrey
но потом признали этот дизайн ужасным, потому что интераторы переставали быть указателями, что давано кучу проблем
Snusmumriken
Потому что указатель пролистывает восемь буулов за раз.
Andrey
ну да. там в шаблонном коде проблемы возникали различные, но эт детали плюсов. мб на луа сделать апи в стиле *_many? т.е. чтобы проход по циклу на стороне Си происходил на 1 вызов из луа
Lucky
Snusmumriken
Ну это уже мечта
Anton
подскажите, обязательно ли вызывать lua_pcall после luaL_loadbufferx?
Snusmumriken
Нет конечно. Это просто генерация луа-функции из строки.
Snusmumriken
Дальше делай что хочешь: сохраняй куда-нибудь (например в табличку или регистрируй глобально), запускай с lua_call/lua_pcall или что-нибудь ещё.
Snusmumriken
В доке можно прочитать, что luaL_loadbufferx примерно аналогичен lua_load, а справка к lua_load —
https://www.lua.org/manual/5.3/manual.html#lua_load
Loads a Lua chunk without running it. If there are no errors, lua_load pushes the compiled chunk as a Lua function on top of the stack. Otherwise, it pushes an error message.
Anton
ок, спасибо за ответ
Anton
еще вопросик: https://github.com/antondevs/luatest/blob/master/sources/main.cpp
Anton
создал репозиторий, там простой проект. как мне просто добавить указатель на структуру, и потом в каждой функции этот указатель получать. пробовал через lua_newuserdata, срабатывает assert: assert(lua_type(lua, 1) == LUA_TUSERDATA);
Snusmumriken
https://stackoverflow.com/questions/11689135/share-array-between-lua-and-c
Snusmumriken
Зачастую проще проверять метатип.
Alexey
Можно lightuserdata использовать если нужен просто указатель
Anton
Anton
Context *context = new Context();
context->fp = fopen("output.txt", "a");
lua_pushlightuserdata(lua, context);
lua_setglobal(lua, "context");
так положил указатель
Context* context = (Context*)lua_touserdata(lua, 1);
тут null
Egor
ОФФТОП: Может кто поделиться линком на канал где сидят CAD'ники или может кто ответить на пару вопрос по FreeCAD'у? Например: как повернуть один объект вокруг другого, мышкой а не считая калькулятором углы итд
Ivan
советую чате по С++ спросить там больше народу. @procxx
vvzvlad
Гениальная идея: сделать чат, в котором сидит бот, который берет сообщение пользователя и ищет по нему в гугле, после чего отправляет ссылку на результаты
Ivan
да наверняка он гуглил, просто я тоже гуглил и не нашёл
Anton
RE
камрады, может кто сходу поймет почему ошибку ловлю:
/usr/bin/lua: /root/send:38: attempt to index global 'file' (a nil value)
stack traceback:
/root/send:38: in main chunk
[C]: ?
38 строка - это - file:close()
...........
file = io.open("/www/snowpole/data/"..filename, "w")
--print("file created")
file:close()
............
файл этот создается норм
Snusmumriken
Потому что что-то с ним происходит. Может ты его переопределяешь. Может он не создаётся.
io.open не всегда возвращает хендлер файла, иногда там nil и сообщение об ошибке.
Snusmumriken
Чтобы понять где упало — можешь воспользоваться ассёртом:
local file = assert( io.open(...) )
Тогда оно упадёт в случае если файл не открылся, с ошибкой открытия.
RE
хм.. спасибо
просто это работало на openwrt 15
счас вот запускаю на 18 и вот
Snusmumriken
Чаво, таки ошибки открытия?
RE
а чорд
не создается все таки
думаю права
RE
хм
из под рута в консоли скрипт пашет
а если вызываю его из Luci - веб морда опенвертшная - вот так ругается..
явно права.. но сходу не нахожу где поправить
Mikhail
доброе утро!!!
коты.. кто-нить читает-пишет-поллит Unix Sockets в luajit? есть готовченские решения?
Snusmumriken
(да, луасокетами, но не поллю а селектю)