Denis Kolosov

+31
с 2022
2 подписчика
38 подписок

Правильно догадываетесь. Я немного предвзято отношусь к boost-у, имхо, он не совсем про производительность, но, вполне возможно, я просто не умею его готовить, мы используем eastl::string_view.
Что касается мотивации string_view, то вот банальнейший пример.
Допустим, есть набор функций, принимающий const string &, а в коде много вызовов этих функций с const char *. В таких вызовах мы получаем лишние string constructor/destructor и new/delete. Есть несколько способов решить данную проблему. Например, запилить отдельные реализации для const char *. Вариант не особо интересный и багоопасный. А есть вариант преобразовать этот набор функций в шаблоны, и передавать string_view вместо const char *, т.к. API string и string_view практически идентичен, сами функции исправлять и не нужно, если только c_str() изменить на data(), если есть такое вызовы. Да, придётся пройтись по всему код и заменить вызовы. Процесс не особо увлекательный, но и в этом есть плюс, все неоптимальные вызовы можно будет поправить.

Если проблема выявляется при более лёгких сценариях, разве есть смысл в более сложных?

Вы статью-то читали? Там речь о проде шла? При первом запуске из-под отладки полезли краши, затем зависания, затем отвал координат. В чём разница поймать эти вещи под debug-ом или тебе о половине из них тесты скажут?
Индикация всех проблем происходила на этапе отладки, юнит-тесты испытали бы все те же проблемы при старте, что и клиентское приложение. unit-тесты относительно могли бы помочь только с математикой, но те, что есть, на тот момент не помогли.

С аллокатором нет, проблема-то не в каком-то невалидном коде, а в предрассудках компиляторов. Да и с математикой тоже, ведор-либа в unit-тестах не подрубается за ненадобностью. Если загружать в unit-тестах весь бэкграунд, то в лучшем случае тест также бы не прошёл, выплюнул сообщение почему не прошёл, а причин странного округления тесты бы не выявили. Это сейчас , когда проблема известна, можно запилить именно для её выявления unit-тест.

1

В драйверах и модулях ядра хватает связки C+asm. В чём его превосходство перед этой связкой именно в плане производительности? Быстрее них только машинный код, но никак не rust. )

РАЗУМЕЕТСЯ! Причём те же, что и документацию и автоматическую коробку передач!
А, если серьёзно, во всех описанных проблемах они бесполезны.
1) Какая разница, где ты свалишься на разрушении smart_pointer-а, в тесте, или в реальном приложении? Причина от этого яснее не станет. Наоборот, thread safe local static быстрее словишь в реальном приложении, либо в функциональных тестах с применением ботов, считай то же приложение игры.
2) С макросами проблема видна на этапе компиляции, до тестов здесь ещё далеко.
3) Проверка .export-секции финального экзешника тоже тестами не покрыть. Эта проверка реализована в самом клиенте игры. Да, можно было бы написать дополнительные чекеры, которые бы отрабатывали на эпате сборки, но это по-большому счёту бесполезно.

3

На данный момент складывается ощущение, что rust ничему не замена, а, правда, кому-то было скучно, захотелось приключений. )

3

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

Я и имею в виду ваш текущий ПК, а не 10-ти летней давности. Без обновления компилятора ситуация у вас была бы ещё хуже.
Прогрузка объектов в мире может быть не моментальной, это вполне нормально для игр. Что касается настроек- вы не путайте, это совершенно другая оптимизация, исключительно рендера. О ней речи не шло, она только в ближайших планах. Более оптимально сгенерированный машинный код влияет на весь игровой процесс.

1

Да, вы всё правильно помните. Основная нагрузка на одно ядро. Есть фоновые потоки, но реально разгружающих основной поток всего 2 (чуть больше). На данный момент работаем над этим, но работы очень много, так что многопоточный pipeline это наше светлое будущее.

15

Интересный термин. ) Зачем же так с бедными макросами? Они хорошие, просто пользоваться нужно с умом. ) Про современные стандарты применительно к проекту, который относительно недавно слез с Visual Studio 20210, забавно слышать. ) Но тренд, конечно, на избавление от макросов, они зло, на костёр! )

1

За это время контента в игру было завезено предостаточно. Вполне возможно, что на вашем текущем ПК ещё года три назад они не завелись бы вообще.
По поводу объектов это интереснее. Пример можете привести?

2