Сергей
Алёша
Uni_X
Алёша
В противном случае сюжет бы закончился на 2ой серии, Кира бы просто написал "Все, кто переступил закон, должны умереть'' и всё
Uni_X
Алёша
Нуу, насчёт того, может ли владелец тетради в принципе умереть от какого нибудь несчастного случая, я не знаю
Алёша
В теории да
Алёша
Тетрадь ведь не даёт бессмертие
Uni_X
Uni_X
Тогда ещё вопрос
Uni_X
Если владелец тетради вскроет вены, он умрёт?
Uni_X
Алёша
Он бог смерти
Алёша
Это другое
Алёша
Uni_X
Алёша
Во во
Uni_X
Чувствую себя тестировщиком...
Uni_X
Спасибо за диалог)
Алёша
Рил
Алёша
Но ведь Рюк владелец тетради...
По сути это можно обьяснить так, дефолтный челик с тетрадкой обладает привилегией кикать других, при этом другого челика с тетрадкой он кикнуть не может тк у них одинаковые по силе права. А Рюк считай как админ, у него есть право повышать роль дефолтных челиков до челиков с тетрадкой и кикать всех, даже челиков с тетрадкой, тк у них права слабее чем у Рюка
Сергей
Uni_X
Алёша
Хпхп
Snusmumriken
Алёша
Domka
Привет
Luсky
Хмм https://instead-games.ru/game.php?ID=86
Luсky
[приплетает lua к аниме]
Snusmumriken
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;
}
```
Igor
0xSU
Igor
Igor
Как указатель возвращать из стека функции не рекомендую возвращать числа в луи по очевидным причинам)))
0xSU
Благодарю, ток что попробовал строку вернуть, получилось :)
static int return_cdata(lua_State *L) {
const char *str = "Hello :)";
lua_pushlightuserdata(L, (void *)str);
return 1;
}
ну и потом ffi.string(ptr)
Igor
Uni_X
А есть ли какая либо литература по написанию своего языка программирования? Можете подсказать)
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
Михаил
мне не оч понравилось я откатил
Михаил
установка: заменить /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! 🎄
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
Snusmumriken