Cloop210
Вархаммер, так, глазком видел
Cloop210
Vlad
usernameak
usernameak
там изрядно разных не-файловых ресурсов
Cloop210
А кстати
Vlad
usernameak
Дай пример
таймеры, сокеты, процессы (в линуксе они не являются файлами)...
Vlad
Vlad
Оно не настоящие файлы, да
Vlad
Но выглядит как файл
usernameak
usernameak
у них нет путей.
Vlad
Да что ты
Laimadoo
Михаил
с последнего раза что мы обсуждали многопоток, у меня появилась еще идея.
а можно просто все общие данные хранить в объектах FFI. мьютексы тоже можно подключить. и использовать effil. меседж пассинг превращается в передачу одних лишь ссылок на ффи(надо только позаботиться чтобы они в общей памяти выделялись), и булет збс
usernameak
Да что ты
если мы опустим фокусы с /proc/self/fd/* :)
Vlad
у них нет путей.
У процессов нет путей?
/proc тогда что?
unix-Сокеты вообще в любой папке создавать можно
Про таймеры не сильно в курсе
Laimadoo
usernameak
вот что всё (кроме процессов) является файловым дескриптором - это да
(но это не то же самое что и файл, иначе всё (включая даже винду!) кроме некоторых RTOS попадает под этот критерий)
Vlad
usernameak
Snusmumriken
Но обыватель часто не увидит разницы между линуксами, юниксами и макосами.
Это не шиндовс!
Vlad
Ух как вы со Снусом любите редактировать сообщение, добавляя кучу инфы в уже написанное
Vlad
Laimadoo
Ребят
Laimadoo
Всё файл — это не закон. А философия
Laimadoo
Это не значит, что ВСЁ в прямом смысле должно быть файлом
Vlad
Так и не является
Snusmumriken
Всё файл — это смысл жизни.
Я живу ради файлов.
Удаление каждого файла — удаление части меня.
Форматирование диска уничтожает мою личность.
Не удаляйте файлы, берегите снусов.
Vlad
Выше человек правильно сказал про файловые дескрипторы
Laimadoo
Я не отрицаю
usernameak
а вообще – ядро винды тогда тоже unix-like :)
Snusmumriken
PS/2
Неполноценный
Snusmumriken
Vlad
usernameak
Vlad
Так, снус, разлогинься
usernameak
ахаха
Laimadoo
usernameak
ладно, пойду спать
Snusmumriken
Но сообщение нужно отредактировать
Михаил
Snusmumriken
любишь многопоточност - люби и памьят управлят
Если планируется просто одноразово выделять здоровый кусок памяти, который жив пока живо приложение (и потом кастить куски из него на структурки например, в разных потоках) — это вполне вайбл тема.
Михаил
не, там будут динамически создаваемые и выбрасываемые объекты
Михаил
но я думаю по любому как-то можно
Михаил
и без заметных потерь перфа
Snusmumriken
Лове2д контроллирует свои объекты, выделяя их на сишной стороне, и выдавая в луашку ссылку увеличивая счётчик.
Но там для этого не используется ффи.
Михаил
значит получится модель сборки мусора гибридная, луашный сборщик + рефкаунт для ффи
Михаил
или как-то можно будет даже без него четко определить где объект можно юзать а где нет
Snusmumriken
или как-то можно будет даже без него четко определить где объект можно юзать а где нет
Вообще, у ффи-объектиков есть косячок.
Сам луажыт вешает на них метатабличку. Одну. Глобальную. Общую вообще для всех ффи-объектов.
И сам их собирает.
То есть, нельзя сделать свой тип, и поменять у него метатабличку на другую.
Если так сделать, поменяются все метатаблички у всех ффи-объектов.
Поэтому есть шанс что придётся использовать что-то ещё для инициализации объектов, кастомные аллокаторы-деаллокаторы или ещё что. Обычная, не-ффи-сдата.
Snusmumriken
А может и получится через debug-setmetatable с перевешенными __index/__newindex, но не уверен.
Михаил
Snusmumriken
Всё для того чтобы корректно извлекать и задавать ключи __index/__newindex'ом, и собирать через __gc.
Просто когда дёргается __index, как фолбек дёргается ещё __index из метатаблички.
Поэтому процедурка "а давайте сделаем так чтобы к вектору доступ был не только через букву но и через цифру" будет такой:
ffi.cdef[[
typedef struct {
double x, y, z
} Vector3;
]]
ffi.metatype("Vector3", {
__index = function(self, key)
if type(key) == "number" then
if key == 0 then return self.x end
if key == 1 then return self.y end
if key == 2 then return self.z end
end
end
})
А потом мы такие
local foo = ffi.new("Vector3", 10, 20, 30)
local n = foo[2]
То процедурка получается примерно такая:
1. Вызываем оригинальный __index от глобальной прокси-таблицы для всей ffi-шляпы
2. Оно поискало тип Vector3, попробовало вытащить ключ "2", там такого ключа не нашлось, вызываем фолбек-__index который мы задали в metatype
3. В фолбеке переопределяем ключ на self.y
4. Внутри фолбека вызываем __index ещё раз от оригинала, извлекаем значение по ключу "y"
ВОЗМОЖНО (возможно) можно повесить новую метатаблицу на ffi-объекты через debug.setmetatable, и использовать "оригинальные" методы уже как колбек.
Но это довольно грубо.
Михаил
Snusmumriken
Я просто буквально на днях развлекался с переопределением метаметодов у raylib-lua, где автор очень умный и НЕ сделал дефолтной таблички под __index, замапив арифметику.
Из-за чего невозможно нормально повесить методов на всякие Vector2/Vector3.
Snusmumriken
Но на всё остальное внезапно можно, это автор raylib-lua не трогал.
Михаил
в общем: если я решил написать движок на луажите + effil с такой многопоточностью и иногда - использованием с++, то я не зашкварился, д?
Snusmumriken
Пф, кого это волнует, зашкварился или нет, если весело
Михаил
или не плюсов а свой кастомный язык
Михаил
и не луажит а свой кастомный язык. с патчами
Snusmumriken
Михаил
Михаил
а есть идеи насчет сделать точечные операции (ну не как в BLAS и питоне с пайторчем - вызвал функцию и дохуиллиард матриц посчитался на видеокарте) такими же эффективными как в Си?
воь есть кусок памяти сырой с флоатами (то есть массив vec3) и надо выборочно с разными индексами сто штук из них изменить, напр. умножить на число
или это и так довольно эффективно и превращается в нормальный нативный код безпосредственно?
Snusmumriken
Вообще как бы основная часть SSE про это
Snusmumriken
https://algorithmica.org/ru/sse
Михаил
но мне надо их не большими вагонами умножать делая одну и ту де операцию. допустим операции разные,один вектор умножил, второй сложил, дальше между этими действиями еще чето посчиталось
Михаил
мне не нужен blas. я знаю как это сделать в ссе
Snusmumriken
Фига ты умный, а я не знаю потому что не использую.
Михаил
просто точечный доступ к сырой памяти
Snusmumriken