Cloop210
Вархаммер, так, глазком видел
Vlad
Просто интересно, за кого вы
Я за тотальное уничтожение эксклюзивности, потому что игры должны быть доступны всем
usernameak
Снус выше дал описание.
линукс нарушает первый же пункт :)
Cloop210
Я за тотальное уничтожение эксклюзивности, потому что игры должны быть доступны всем
Они и так всём доступны, все эксклювизы через год-два выходят на пк
usernameak
там изрядно разных не-файловых ресурсов
Snusmumriken
Снус выше дал описание.
Я копипастил Laimadoo, это всё он.
Cloop210
А кстати
usernameak
Дай пример
таймеры, сокеты, процессы (в линуксе они не являются файлами)...
Vlad
таймеры, сокеты, процессы (в линуксе они не являются файлами)...
Всё представлено файлами в файловой системе, лол.
Vlad
Оно не настоящие файлы, да
Vlad
Но выглядит как файл
usernameak
у них нет путей.
Vlad
Да что ты
Михаил
с последнего раза что мы обсуждали многопоток, у меня появилась еще идея. а можно просто все общие данные хранить в объектах FFI. мьютексы тоже можно подключить. и использовать effil. меседж пассинг превращается в передачу одних лишь ссылок на ффи(надо только позаботиться чтобы они в общей памяти выделялись), и булет збс
Snusmumriken
с последнего раза что мы обсуждали многопоток, у меня появилась еще идея. а можно просто все общие данные хранить в объектах FFI. мьютексы тоже можно подключить. и использовать effil. меседж пассинг превращается в передачу одних лишь ссылок на ффи(надо только позаботиться чтобы они в общей памяти выделялись), и булет збс
Мона, но могут вылезти проблемы со сборкой мусора, если одна луа-машина попытается собрать ффи-объектик в одном потоке, который ещё доступен в другой луа-машине. По хорошему, контроль за сборкой должен быть на сишной стороне, мол "если дёргается _GC, уменьшаем количество ссылок на объектик, и собираем если тот достиг нуля"
usernameak
Да что ты
если мы опустим фокусы с /proc/self/fd/* :)
Vlad
у них нет путей.
У процессов нет путей? /proc тогда что? unix-Сокеты вообще в любой папке создавать можно Про таймеры не сильно в курсе
usernameak
У процессов нет путей? /proc тогда что? unix-Сокеты вообще в любой папке создавать можно Про таймеры не сильно в курсе
> /proc тогда что? это виртуальная файловая система которая экспозит информацию о процессах, но не сами процессы (у них отдельный неймспейс идентификаторов вообще) > unix-Сокеты вообще в любой папке создавать можно но это не единственный вид сокетов :)
usernameak
вот что всё (кроме процессов) является файловым дескриптором - это да (но это не то же самое что и файл, иначе всё (включая даже винду!) кроме некоторых RTOS попадает под этот критерий)
Snusmumriken
Но обыватель часто не увидит разницы между линуксами, юниксами и макосами. Это не шиндовс!
Vlad
Ух как вы со Снусом любите редактировать сообщение, добавляя кучу инфы в уже написанное
Laimadoo
Ребят
Laimadoo
Всё файл — это не закон. А философия
Laimadoo
Это не значит, что ВСЁ в прямом смысле должно быть файлом
Vlad
Так и не является
Snusmumriken
Всё файл — это смысл жизни. Я живу ради файлов. Удаление каждого файла — удаление части меня. Форматирование диска уничтожает мою личность. Не удаляйте файлы, берегите снусов.
Vlad
Выше человек правильно сказал про файловые дескрипторы
Laimadoo
Я не отрицаю
usernameak
а вообще – ядро винды тогда тоже unix-like :)
Snusmumriken
PS/2
Vlad
а вообще – ядро винды тогда тоже unix-like :)
Ну винда не выставляет это всё на показ в файловую систему, где юзер через проводник шарахается
usernameak
а вообще – ядро винды тогда тоже unix-like :)
(более того, оно изначально дизайнилось чтобы хостить, кроме Win32, ещё и Unix-подобное окружение; от этого правда отказались в какой-то момент после Windows 7)
Snusmumriken
usernameak
Обожаю читать постоянно дополняющиеся сообщения (:
это лучше, чем простыня коротких сообщений
Vlad
Так, снус, разлогинься
usernameak
ахаха
usernameak
ладно, пойду спать
Snusmumriken
Но сообщение нужно отредактировать
Snusmumriken
любишь многопоточност - люби и памьят управлят
Если планируется просто одноразово выделять здоровый кусок памяти, который жив пока живо приложение (и потом кастить куски из него на структурки например, в разных потоках) — это вполне вайбл тема.
Михаил
не, там будут динамически создаваемые и выбрасываемые объекты
Михаил
но я думаю по любому как-то можно
Михаил
и без заметных потерь перфа
Snusmumriken
Лове2д контроллирует свои объекты, выделяя их на сишной стороне, и выдавая в луашку ссылку увеличивая счётчик. Но там для этого не используется ффи.
Михаил
значит получится модель сборки мусора гибридная, луашный сборщик + рефкаунт для ффи
Михаил
или как-то можно будет даже без него четко определить где объект можно юзать а где нет
Snusmumriken
или как-то можно будет даже без него четко определить где объект можно юзать а где нет
Вообще, у ффи-объектиков есть косячок. Сам луажыт вешает на них метатабличку. Одну. Глобальную. Общую вообще для всех ффи-объектов. И сам их собирает. То есть, нельзя сделать свой тип, и поменять у него метатабличку на другую. Если так сделать, поменяются все метатаблички у всех ффи-объектов. Поэтому есть шанс что придётся использовать что-то ещё для инициализации объектов, кастомные аллокаторы-деаллокаторы или ещё что. Обычная, не-ффи-сдата.
Snusmumriken
А может и получится через debug-setmetatable с перевешенными __index/__newindex, но не уверен.
Snusmumriken
всм а как чево куда? почему так делается? вроде у ффи объектов можно задавать деструктор через ffi.metatype, это другая метатаблица получается? а зачем тогда общая?
Да, именно так. Общая метатабличка для всех ффи-объектов такая берёт, смотрит: "ага, это такой объект", идёт искать его табличку указанную как метатабличка, и вызывает. Типа проксирует.
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
Фига ты умный, а я не знаю потому что не использую.
Михаил
просто точечный доступ к сырой памяти