Comments 23
Какая интересно связь между ЯП и жанром игры? Алгоритмы то одинаковые, а язык - просто инструмент. Ладно бы если бы сравнивались языки разные по парадигмам...
Я рассуждения Ильи на эту тему проинтерпретировал так: для не-стратегий есть общие техники, движки, и Rust будет проигрывать тем языкам, на которых эти готовые инструменты написаны, а так как для стратегий таких вещей нет, то можно брать Rust, он как язык дает определенные преимущества и, в то же время, вы не будете так страдать из-за отсутствия инструментов, как в случае других жанров (так это или нет на самом деле, я не знаю, ибо далек от геймдева).
Это не так ) Общие техники они на то и общие. А в языке вообще никаких инструментов для стратегий и не стратегий нет. Ладно еще можно поговорить об оптимизации при компиляции/выполнении, но тут явно не про это. Какие преимущества даст раст как язык в стратегиях тоже неясно.
Но мысль понял.
Я конечно же имел ввиду, что определенные преимущества как язык Rust даст не в стратегиях, а в целом по сравнению с мейнстримовыми языками. При этом из-за того, что есть готовые игровые инструменты и движки под другие языки, оно того не стоит, ибо все равно больше потеряешь, чем приобретешь. А вот если готовых инструментов нет, то смысл появляется.
Раст даст преимущества как язык... без продолжения.
Не подхватил GameDev Rust, не собирается и вряд ли в будущем соберется, потому что ООП, да в Rust-е это все можно сделать по Rust-овски, но зачем?
А можете объяснить, почему для разработки видеоигр обязательно ООП?
Нет не обязательно. Дело в том что 30 лет пишут игры на плюсах с ООП, кучу движков написали, экосистема... Да это все можно на rust переписать, но зачем?
И в итоге уходят на дата ориентированную экосистему. Даже анриал сдался, хотя, если не изменят память, больше всех заявлял о том что только ооп только боль.
Ооп не боль, проблема в кривых руках и религии, просто есть люди, которые пытаются натянуть ооп на все подряд, что и приводит к боли, а если использовать подходы грамотно, то боли не будет.
Последние лет 5-10 стараются переходить на ECS, где ООП не нужно. А студии вроде Ubisoft внедряют Rust в свои процессы.
Carbon FAQ: If you can use Rust, ignore Carbon
Rust нельзя компилировать с флагом -fast-math и по этой причине перемножения векторов и т.п. игровая математика на расте тормозит. Например вращение кубика на bevy engine отъедает несколько % цпу а должно потреблять 0% с флагом fast math в том же cpp.И насколько я знаю мнение о fast math в сообществе раст неоднозначное т.е. одни за другие против и в итоге я бы сказал что раст не подходит для программирования игровой графики и физики пока там нет fast math.
Так неужели в Rust нет макросов или либ для доступа к SIMD сопроцессорам?
Дело не в SIMD а в тех оптимизациях, которые привносит флаг оптимизации компилятора -ffast-math. Коротко говоря это оптимизации для менее точных быстрых вычислений float которые приемлемы в играх и позволяют снизить нагрузку на ЦПУ в играх в несколько раз и увеличить FPS https://habr.com/ru/company/ruvds/blog/586386/
Так например обычная скелетная анимация одной модели без -ffast-math будет кушать 10-15% ЦПУ а с -ffast-math 1-2% .
Справедливости ради, есть некоторые костыли помогающие с этим бороться вроде библиотеки fast-floats
.
По-моему и логично локализовать fast-math'ную логику в отдельных частях программы (чем бы она не была), а не делать глобальной для всей программы, ломая те вещи, которым разумно полагаться на точность работы с float'ами.
Тем более, что тут ничего сложного изобретать не надо:
можно использовать быстрые функции только тогда, когда это действительно уместно (см. fast-math);
можно в конкретных задачах использовать свои типы, реализованные с быстрой математикой (например, таковые из fast-floats);
можно делать свои типы обощёнными относительно некого генерика, реализованного как на стандартных флотах, так и на ускоренных, а ля
struct Rotation<F: Float32> {
yaw: F,
pitch: F,
}
где некий Float32
реализован как на f32
, так и на каком-ниубудь FF32
.
Не спорю, флагов оптимизации у gcc не мало. Там же написано, что не стоит применять их где попало. Но есть другой подход - явно в коде отправлять операции в SIMD расширения с явной векторизацией. Например как в плюсовой либе Eigen.
Некрокомент по теме статьи
https://arewegameyet.rs/ - сайт с играми на Rust
и еще наброс по поводу "самый крупный игра" на Rust -
«Rust — это язык для изобретательства»: Илья Лахин о том, нужен ли Rust в GameDev