Я рассматриваю возможность программирования многопользовательской RTS-игры (частично) на C ++.Я быстро обнаружил, что одно жесткое требование состоит в том, что игровая симуляция должна быть полностью детерминированной до самого последнего бита на сервере и на всех клиентах, чтобы иметь возможность ограничивать сетевую связь для пользовательского ввода, а не самого игрового состояния,Поскольку у каждого свой компьютер, это кажется сложной проблемой.
Итак, есть ли какой-то «волшебный» способ заставить компилятор C ++ создать исполняемый файл, который будет полностью детерминированным в Linux (на сервере),Windows и Mac?Я думаю, что двумя основными компиляторами OSS C ++ являются GCC и Clang, поэтому мне было интересно, будет ли один работать лучше, чем другой в этом отношении.
Мне также будет интересен любой набор тестов, который можно использовать для проверкиДетерминизм в C ++.
[EDIT] Под детерминизмом я имел в виду, что скомпилированная программа с заданным одинаковым начальным состоянием и входом в одинаковом порядке будет всегда выводить один и тот же вывод прилюбая платформа, где она работает.Так же и по сети.Последовательность звучит для меня как подходящее определение этого поведения, но я не являюсь носителем языка, поэтому я могу неверно истолковать точное значение.
[РЕДАКТИРОВАТЬ # 2] Во время дискуссий о том, имеет ли значение детерминизм / согласованность, иДолжен ли я стремиться к этому в игровом движке, и насколько велика проблема, как правило, в C ++, довольно интересно, но это никоим образом не отвечает на этот вопрос.До сих пор никто не знал, должен ли я использовать Clang или GCC для получения наиболее надежных / детерминированных / последовательных результатов.
[РЕДАКТИРОВАТЬ # 3] Мне просто пришло в голову, что есть способполучить точно такой же результат в C ++, как в Java.Нужно взять реализацию JVM с открытым исходным кодом и извлечь код, который реализует операторы и математические функции.Затем вы превращаете ее в автономную библиотеку и вызываете в ней встроенные функции вместо непосредственного использования операторов.Это было бы трудно сделать вручную, но если код сгенерирован, то это идеальное решение.Может быть, это даже можно сделать с помощью классов и перегрузки операторов, поэтому это тоже выглядит естественно.