172 похожих чатов

Доброго времени суток. Сейчас я работаю над своей архитектурой Component /

Systems.
Если просто, это то что использовали до дробления на ECS. Потому что ECS это все таки нишевая вещь. ИМХО.
Так вот в расте и го я использую интерфейсы для создания обобщенных систем.
Но в D в D у нас не все так просто, мы не можем использовать структуры с Interface? Насколько я зняю.
Выходит у нас 2 пути. Классы, что не всегда хорошо и метопрограммирование..
В моем случае в функцию куда мы отправляем объект, мы должны проверить, если ли у него методы.
Или поля. Гибко, но я совсем не знаю...насколько это ударит по времени компиляции?
Вообще есть какие то исследования или заметки, что быстро компилируется, а что нет?
Ну и в целом, какие у вас идеи по решение задачки. Нужна принять разные данные, проверить обобщенные вещи и вернуть ошибку компиляции или записать объект куда либо.
Тут даже суть не в обобщенности типо интерфейса. А скорее создание точечных обобщенных вещей.
Для наглядности, пример.
У нас есть N компонентов которые мы рисуем.
Но по сути просто рисовать мы их не можем напрямую, нам нужно составить пулл объектов которые удовлетворяют данным. Например они видны, их позиция и.т.д.
В итоге это наследование или создание интерфейсов. Возможно концепты.
Я бы наверное мог просто все хранить в классах и возможно стоит так сделать, но есть нюансы.
Классы это же ссылочный тип? в итоге будет массив ссылок, а нам бы массив структур. Для разных оптимизаций. и.т.д. и.т.п
Считаю это актуальная проблема D, в остальных языках это решено +-.

26 ответов

135 просмотров

scoped!(Class)[]

Стикер

Стикер

Стикер

Стикер

можно создать хоть пул объектов класса(D позволяет вручную создавать объекты класса), если их количество достаточно большое.

Vi- Автор вопроса

Они нишевые. 1. задача, это не умение в архитектуру. 2. параллелизм и перфоманс. Если посмотреть на существующие движки и игры, у ECS будет не так много реальных использований. Они будут, но это не будет чем то доминирующем и никогда не будет. ECS это способ отделить часть логики и данных от общей системы. Многие вещи вы все так же будете делать отдельно, вне ECS. Проблем у ECS не меньше, чем плюсов. От дробления на компоненты, до раздувания кодовой базы. То за что например ругают Го. Есть и другие проблемы. Исторически ECS это одна из разновидностей Component / System подхода и их тоже много. И из второго можно сделать первое, но не наоборот. Если приводить человеческий пример, взрывать дома это нишевый подход для разрушения здания и не подойдет в ряде случаев. Почему я не хочу доверятся классам, они не работают в BetterC, они требуют избыточных решений. Первое я никак не измен. Второе, просто даст мне больше времени думать над каждым компонентом. Самое главное тут отделить, любые данные от любой логики. То есть ориентироваться на структуры. Концепты и либы, что были выше..Главный тут вопрос это время компиляции, если никто сам не имел опыта. Что ж я вероятно это потом протестирую.

Vi- Автор вопроса

Вы правда говорите в том, о чем не понимаете. Этот паттерн появился в конце 90х. Вы представляете сколько игр делается в целом? Так вот у ECS не будет и 3-5%. Я что должен говорить что такое ниша? Я это лишь говорю, потому что чувствую что устал как люди выдают поверхностные знания, за действительно полезные. Вы думаете у меня есть студия уровня AAA или миллиарды долларов? Увы нету у меня таких ресурсов. Даже если вы наберете 1000 отличных игр на ECS, то 1 000 000 будут без них. Даже если вы скажете что они использовали ECS, это не будет чем то уровня У НАС ВЕСЬ ДВИЖЕК НА ECS. ECS будет отвечать за определенную часть системы. UI, Объекты, тесты бизнес логики,что то еще. Единственные движки на Only ECS я видел в Rust. В Rust очень сложно в архитектуру. Это даже грустно, маркетологи из Unity навешали лапши, а теперь даже в инди сегменте какой то треш. Хотя большинство игр на Unity как делалось без ECS так и будет делаться. Так же как на Unreal / Godot / ect. А там где нужна будет ECS, люди напишут ECS. Если это не ниша? ТО я хз.

Стикер

Vi
Вы правда говорите в том, о чем не понимаете. Этот...

Unreal как коммерческая технология, которая вышла в релиз в том самом конце 90-ых. Им незачем переходить на другой архитект, т.к. это ресурсозатратно и может тупо отпугнуть разработчиков, которые привыкли к классам наследуемым от Actor. Может я чего-то и не знаю об Unreal, но примерно их архитектура скриптов долгое время оставалась такой-же очень долгое время, изменяя фунционал и возможности движка.

Ты причину и следствие перепутал

а как ECS соотносится с акторной моделью?

Dmitry Ponyatov
а как ECS соотносится с акторной моделью?

В Unreal Engine элемент сцены - объект класса, наследуемый от класса Actor. В ECS другой подход, элемент мира - некоторая сущность, к которой можно привязать компоненты, которые обрабатываются системами. Это два разных архитектурных подходов/решений.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта