Сергей
Алёша
А... А тетрадь может убивать людей по описанию?
Необходимо знать имя и лицо, по другому никак
Алёша
В противном случае сюжет бы закончился на 2ой серии, Кира бы просто написал "Все, кто переступил закон, должны умереть'' и всё
Алёша
Нуу, насчёт того, может ли владелец тетради в принципе умереть от какого нибудь несчастного случая, я не знаю
Алёша
В теории да
Алёша
Тетрадь ведь не даёт бессмертие
Uni_X
Тогда ещё вопрос
Uni_X
Если владелец тетради вскроет вены, он умрёт?
Алёша
Он же умирает не по воли тетради...
Кто сказал? В финале Кира умер потому что Рюк записал его в свою тетрадь
Uni_X
Если владелец тетради вскроет вены, он умрёт?
Ведь владелец тетради не может убить владельца тетради...
Алёша
Он бог смерти
Алёша
Это другое
Алёша
Алёша
Во во
Uni_X
Чувствую себя тестировщиком...
Uni_X
Спасибо за диалог)
Алёша
Рил
Алёша
Но ведь Рюк владелец тетради...
По сути это можно обьяснить так, дефолтный челик с тетрадкой обладает привилегией кикать других, при этом другого челика с тетрадкой он кикнуть не может тк у них одинаковые по силе права. А Рюк считай как админ, у него есть право повышать роль дефолтных челиков до челиков с тетрадкой и кикать всех, даже челиков с тетрадкой, тк у них права слабее чем у Рюка
Сергей
Алёша
Хпхп
Domka
Привет
Luсky
Хмм https://instead-games.ru/game.php?ID=86
Luсky
[приплетает lua к аниме]
Igor
Хмм https://instead-games.ru/game.php?ID=86
> ориентирована на девочек 13-15 лет, поклонниц сериала О, так это мы, та самая целевая аудитория)))
Uni_X
Хмм https://instead-games.ru/game.php?ID=86
Знаете, я и сам своего рода девочка 13 - 15 лет...
Uni_X
0xSU
Ребят, никто не знает как можно вернуть uint64_t из своего .so модуля? Модуль под luajit. Через FFI могу привести к типу uint64_t, а как вернуть из модуля, непонятно :> #include <lua.h> #include <lauxlib.h> static int test(lua_State *L) { uint64_t number = 1152921504606846976ULL; lua_pushnumber(L, number); return 1; } LUALIB_API int luaopen_test_uint64_t(lua_State *L) { lua_pushcfunction(L, test); return 1; } ```
0xSU
Как cdata просто возвращай и кастуй в uint64
А не подскажите, как возвращать cdata?
Igor
А не подскажите, как возвращать cdata?
lua_pushlightuserdata() можешь использовать в принципе
Igor
Igor
Как указатель возвращать из стека функции не рекомендую возвращать числа в луи по очевидным причинам)))
0xSU
Вот минимальный пример
Благодарю, ток что попробовал строку вернуть, получилось :) static int return_cdata(lua_State *L) { const char *str = "Hello :)"; lua_pushlightuserdata(L, (void *)str); return 1; } ну и потом ffi.string(ptr)
Uni_X
А есть ли какая либо литература по написанию своего языка программирования? Можете подсказать)
Snusmumriken
А есть ли какая либо литература по написанию своего языка программирования? Можете подсказать)
Можешь для начала просто накатать интерпретатор брейнфака. Это простенькая задачка, и заодно посмотришь на базовые элементы. Благо все токены в один байт и достаточно побайтово проитерировать по строке с кодом.
Snusmumriken
Как базовое описание необходимых действий сойдёт вот это https://habr.com/ru/companies/edison/articles/315068/ https://habr.com/ru/articles/698990/
Uni_X
Спасибо большое)
Михаил
не знаю что вы будете с ним делать и как объяснить как прогать, ну вот так просто auto hk = 78; auto er = 25; print(hk + er); auto fn ui(a, b) a + b; auto fn ui2(a, b) { return a + b; } print(ui(7, 8) + ui2(7, 8)); чисто посмотреть как будет выглядеть замененное local на auto
Михаил
патч с auto вместо local
Михаил
мне не оч понравилось я откатил
Михаил
патч с auto вместо local
установка: заменить /src в корне луажита на эту папку, make
Михаил
с житом, без?
Михаил
была какая то книга по компиляторам
Михаил
в общем если хочешь компилировать сначала освой ассемблер, все языки типа с/с++/раста компилируются в ассемблер
Михаил
и просто бери свой исходный код и генерь из него ассемблер. Tsoding daily делал свой ЯП как раз, который генерил GAS
Михаил
GAS это то, во что компилируется С/С++ компилятором GCC
Михаил
потом из GAS объекты, из объектов бинари
Petr
Petr
Т.е. ты генерируешь не асм, а низкоуровневый язык и его уже компилирует бэкенд в асм и машинный код.
Petr
Можно на этом же языке писать напрямую при желании, Вот тут Алексей играется с бэкендом QBE https://www.youtube.com/watch?v=JTjNoejn4iA
Petr
А есть ли какая либо литература по написанию своего языка программирования? Можете подсказать)
Ну классикой считается т.н. "Dragon Book" ( https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D1%8B:_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B,_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B ) но практики последнее время что я слушал от неё не в восторге в плане того что она больше про разбор и построение АСТ, и мало про генерацию и оптимизацию, а это именно где самая большая сложность.
Hello, World! 🎄
Тебе по сути нужно взять код в виде строки, разобрать на токены, далее построить дерево
Petr
Кстати odin пользуется llvm, но они пишут свой бэкенд сейчас.
Hello, World! 🎄
После этого можешь по разным путям пойти, создать свою vm или генерировать машинный код или ассемблер под существующую архитектуру
Petr
Вот очень крутой проект: https://www.youtube.com/watch?v=k3gDvF-Fbpw&list=PLvdK1vRmp8wMzH4w_8sQ30NKU3Bt4Cc-M
Petr
Тут используется другой подход, где напрямую генерируется машинный код минуя AST, интересно чисто с познавательных целей
Petr
Типа понять вообще что такое бинарь которые ОС загружает и т.п.
Petr
Было бы у меня бесконечное время, обязательно бы посмотрел)
Petr
Crafting Interpreters https://craftinginterpreters.com/
Petr
Вот ещё классная книга-сайт свежая
Uni_X
Спасибо всем огромное!
Михаил
Михаил
кто хотел поюзать ImGui в луажите но что то не срослось - я знаю почему и таки запустил, может скоро патчи выложу
Михаил
(патчи на cimgui)
Михаил
зацените код на луажит который добавляет в package.path пути относительно исполняемого скрипта do local win = require("ffi").os == "Windows"; local sl, ls = unpack(win and {"\\", "/"} or {"/", "\\"}); local sp = arg[0]:gsub(ls, sl); local is_abs = sp:sub(1, 1) == sl or (win and sp:find(":")); local last = ({sp:find(".*" .. sl)})[2]; local path = (last or is_abs) and sp:sub(1, last) or ""; if not is_abs and path:sub(1, 2) ~= ("." .. sl) then path = "." .. sl .. path; end if not path:sub(-1, -1) == sl then path = path .. sl; end package.path = path .. "?.lua;" .. path .. "?" .. sl .. "init.lua;" .. package.path; end
Snusmumriken
Snusmumriken
зацените код на луажит который добавляет в package.path пути относительно исполняемого скрипта do local win = require("ffi").os == "Windows"; local sl, ls = unpack(win and {"\\", "/"} or {"/", "\\"}); local sp = arg[0]:gsub(ls, sl); local is_abs = sp:sub(1, 1) == sl or (win and sp:find(":")); local last = ({sp:find(".*" .. sl)})[2]; local path = (last or is_abs) and sp:sub(1, last) or ""; if not is_abs and path:sub(1, 2) ~= ("." .. sl) then path = "." .. sl .. path; end if not path:sub(-1, -1) == sl then path = path .. sl; end package.path = path .. "?.lua;" .. path .. "?" .. sl .. "init.lua;" .. package.path; end
Зацени фигню которой я пользуюсь последние 6 лет. Недавно для развлечения добавил on-the-fly-загрузчик moonscript. https://pastebin.com/Y25iWjKh Выводит ошибки с трейсбеком. Не влияет на аргументы. Не делает ничего лишнего. Только добавляет относительные пути для скриптов и либ, и включает поддержку мунскрипта. Работает с любой версией луашки. В конце — debug.debug() чтобы консолька не закрывалась при ошибке.