Get Mystery Box with random crypto!

Entity Component System (ECS) English version: https://telegr | Sea

Entity Component System (ECS)

English version: https://telegra.ph/Entity-Component-System-ECS-02-10

Все мы неоднократно слышали о чудесах объектно-ориентированного программирования (ООП), позволяющих контролировать сложность программ, которые мы разрабатываем. Объект реального мира сопоставляется объекту какого-либо класса в коде. Вспомним, к примеру, хрестоматийный пример с Animal, Dog, Cat и т.д.

Но оказывается, игровая индустрия уже давно ушла от ООП в сторону Data Oriented Design (DOD), дизайна программ основанного на данных. Вот главные причины:
• ООП в случае игр больше вредит, чем помогает. Появляется всемогущий SuperObject, который определяет все методы всех наследников (а это очень много даже в случае игр среднего размера)
• Обдумывание архитектуры проекта в рамках объектов звучит привлекательно, но чаще всего действия в игре затрагивают две и более сущности, что делает применение методов затруднительным

Эти и многие другие проблемы ООП в играх рассматривает Кэтрин Вэст (Catherine West) в своем выступлении Using Rust For Game Development на RustConf 2018:



Кэтрин, как апологет языка Rust, показывает, как использование устаревшего антипаттерна SuperObject в этом языке ведет к бесконечной борьбе с borrow-checker'ом. "Сдавшись", Кэтрин постепенно начинает логично модифицировать архитектуру игры так, что в итоге приходит к Entity Component System (ECS), пожалуй, самой знаменитой реализации концепции Data Oriented/Driven Design, в которую Rust вписывается чуть более, чем полностью. В результате получается гибкая и более производительная система сущностей и компонентов, которые могут быть без труда сериализованы на диск или в сеть.

Кстати, есть более длинная, но и более интересная версия доклада в виде поста с кодом в блоге Кэтрин: https://kyren.github.io/2018/09/14/rustconf-talk.html