Михаил
Михаил
Михаил
там в многопотоке все пашет и с GC
Михаил
ясно
Михаил
опять своё выдумывать
UtoECat
опять своё выдумывать
Там нечего выдумывать. Просто на всех стульях не получится усидеть, и всё тут)
Михаил
я наверно рассказывал уже здесь об идее, что общая память - не обязательно память непосредственно GC
UtoECat
Михаил
Михаил
и опа - общий указатель
Михаил
мьютексы, все дела - и вот тебе объект общий для 2х независимых настоящих луашных потоков
Михаил
канеш с нюансами
Михаил
и тем более смотри
Михаил
вряд ли тебе понадобится что-то тяжелое, если это нельзя запихнуть в FFI
Михаил
это или моделька какая-нибудь для opengl, или текстура, или файл какой-то
Михаил
так что вполне кмк хорошее решение
Михаил
Можно. Хотя и с нюансами.
и мне нужны тестировщики которые посмотрят на яп и скажут чё говно а что нет
всё что там есть - я выдумал в одну каску
Михаил
документация есть уже на англ, кусочек
UtoECat
так что вполне кмк хорошее решение
Явное управление памятью таких расшареных объектов правда) а так да, давно уже делают похожее.
Даже дока луаджита по ффи где-то это упоминала помню.
Михаил
luarlibs
Михаил
там включена еще библиотека рантайм типов....
Михаил
UtoECat
UtoECat
UtoECat
Михаил
вот так сейчас выглядит строчка "юзинг неймспейс бла бла"
Михаил
setfenv(1, namespace.use(getfenv(), ns));
Михаил
я уже вижу способ завернуть это в сахар но зачем хз
Михаил
могут быть решения получше
Михаил
и определяешь структуру жысона
Михаил
и по этой структуре валидируешь
UtoECat
могут быть решения получше
Слушай... Ну может всё-таки оставить операторов необходимость явно объявлять какие именно испольжуются они в конкретном модуле... Раз они тупо в вызов метода трансформируются и не более...
Михаил
Михаил
я примерно об этом кажется и сказал
UtoECat
А то это страшный комар какой-то...
Михаил
дошла мысля
Михаил
как-то так получается
Михаил
щас я еще проверю что делает setfenv с require
Михаил
а неплохо он делает. даже внутри using namespace если либу подключать ее глобальные переменные никуда не теряются
Михаил
а определенные непосредственно в модуле в глобальный неймспейс не суются
Михаил
вообще имба, оставляю эту либу
Михаил
Михаил
barka.luar
local namespace = require "luar/namespace";
local ns = {bar = print};
setfenv(1, namespace.use(getfenv(), ns));
require "kurwa";
kurwa2 = fn() {};
bar("kurwa:", kurwa);
Михаил
а что страшного если она работает?
Михаил
причем как задумано
Михаил
это же гениально, это просто шедевр
Михаил
да и setfenv() должен просто устанавливать окружение, а из документации ясно что окружение и так у каждой функции есть
Михаил
это как lookup of keys in __index
UtoECat
Но у меня голова уже не варит совсем) пойду отдыхать
Михаил
Михаил
но в дебаге отдельная функция
Михаил
а теперь тут _ENV
UtoECat
печально
Не, на самом деле может и можно, но очень осторожно
Михаил
и что _ENV уже не только для дебага?
Михаил
надо бенчмарки сделать
Михаил
а, то есть меня ограничивают только санитары нежелающие чтоб я ногу отстрелил
Михаил
но не скорость
UtoECat
надо бенчмарки сделать
В твоём случае в новой луашке всё бы решилось переопределением local _ENV в начале, да.
Михаил
хм
но у меня не новая луашка а луажит
UtoECat
Михаил
да это и так глобальные переменные...
Михаил
вот код на засыпку - реализация неймспейсов...
local iter = require "luar/iterator";
local namespace = {};
local upper = {};
namespace.upper = upper;
local operator<index> ~. = rawget;
local operator<newindex> ~. = rawset;
fn namespace.use(env, ns) {
ns =~ or {};
if (rawget(env, upper)) {
for k, v in pairs(ns) do
env[k] = v;
return env;
}
local newtab = {[upper] = env};
newtab._G = newtab;
for k, v in pairs(ns) do {
newtab[k] = v;
}
setmetatable(newtab, {
__index = fn(self, k) {
return rawget(self, k) or rawget(self, upper)~.(k);
},
__pairs = fn(self) { // @todo not loop
local tbls = {env};
local i = 1;
while tbls[i]~.(upper) do {
tbls[i + 1] = tbls[i]~.(upper);
i = i + 1;
}
tbls.n = 0;
return iter.mulnext, tbls;
}
});
return newtab;
}
return namespace;
Михаил
нет, циклы таки придется сделать, т.к. юзинг неймспейс может быть и внутри функции
Михаил
но зачем? а главное - ...
Михаил