Как стать автором
Обновить

Комментарии 22

Какая интересно связь между ЯП и жанром игры? Алгоритмы то одинаковые, а язык - просто инструмент. Ладно бы если бы сравнивались языки разные по парадигмам...

Я рассуждения Ильи на эту тему проинтерпретировал так: для не-стратегий есть общие техники, движки, и Rust будет проигрывать тем языкам, на которых эти готовые инструменты написаны, а так как для стратегий таких вещей нет, то можно брать Rust, он как язык дает определенные преимущества и, в то же время, вы не будете так страдать из-за отсутствия инструментов, как в случае других жанров (так это или нет на самом деле, я не знаю, ибо далек от геймдева).

Это не так ) Общие техники они на то и общие. А в языке вообще никаких инструментов для стратегий и не стратегий нет. Ладно еще можно поговорить об оптимизации при компиляции/выполнении, но тут явно не про это. Какие преимущества даст раст как язык в стратегиях тоже неясно.
Но мысль понял.

Я конечно же имел ввиду, что определенные преимущества как язык Rust даст не в стратегиях, а в целом по сравнению с мейнстримовыми языками. При этом из-за того, что есть готовые игровые инструменты и движки под другие языки, оно того не стоит, ибо все равно больше потеряешь, чем приобретешь. А вот если готовых инструментов нет, то смысл появляется.

Раст даст преимущества как язык... без продолжения.

Не подхватил GameDev Rust, не собирается и вряд ли в будущем соберется, потому что ООП, да в Rust-е это все можно сделать по Rust-овски, но зачем?

А можете объяснить, почему для разработки видеоигр обязательно ООП?

Нет не обязательно. Дело в том что 30 лет пишут игры на плюсах с ООП, кучу движков написали, экосистема... Да это все можно на rust переписать, но зачем?

И в итоге уходят на дата ориентированную экосистему. Даже анриал сдался, хотя, если не изменят память, больше всех заявлял о том что только ооп только боль.

Ооп не боль, проблема в кривых руках и религии, просто есть люди, которые пытаются натянуть ооп на все подряд, что и приводит к боли, а если использовать подходы грамотно, то боли не будет.

Что такое грамотно использовать подходы? Звучит также как в объявлениях: Ищу толкового руководителя ;)

душно что-то стало...

Если продолжить вашу (странноватую) аналогию, то толковые руководители вполне себе существуют. Так же и с грамотными подходами.

Последние лет 5-10 стараются переходить на ECS, где ООП не нужно. А студии вроде Ubisoft внедряют Rust в свои процессы.

НЛО прилетело и опубликовало эту надпись здесь

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.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории