Является ли Clang более детерминированным, чем GCC, на разных платформах?

Я рассматриваю возможность программирования многопользовательской RTS-игры (частично) на C ++. Я быстро обнаружил, что одним жестким требованием является то, что симуляция игры должна быть полностью детерминированной до самого последнего бита на сервере и всех клиентах, чтобы иметь возможность ограничивать сетевое взаимодействие вводом пользователя, а не самим состоянием игры. . Поскольку у всех разные компьютеры, это кажется сложной проблемой.

Итак, существует ли какой-то «волшебный» способ заставить компилятор C ++ создать исполняемый файл, который будет полностью детерминированным для Linux (сервера), Windows и Mac ? Я думаю, что двумя основными компиляторами OSS C ++ являются GCC и Clang, поэтому мне было интересно, работает ли один лучше, чем другой в этом отношении.

Мне также был бы интересен любой набор тестов, который можно было бы использовать для проверки детерминизма C ++.

[EDIT] Под детерминированным я имел в виду, что скомпилированная программа при одинаковом начальном состоянии и вводе в том же порядке будет всегда производить один и тот же вывод на любой платформе, где она выполняется. Так же и по сети. Согласованность звучит для меня как подходящее определение этого поведения, но я не являюсь носителем языка, поэтому могу неверно истолковать точное значение.

[РЕДАКТИРОВАТЬ №2] Хотя дискуссии о том, имеет ли значение детерминизм / согласованность, и должен ли я стремиться к этому в игровом движке, и насколько велика проблема в C ++, это довольно интересно, но никоим образом не собственно ответьте на вопрос. До сих пор ни у кого не было фактов, говорящих мне, следует ли мне использовать Clang или GCC для получения наиболее надежных / детерминированных / согласованных результатов.

[РЕДАКТИРОВАТЬ # 3] Мне просто пришло в голову, что есть способ получить в C ++ точно такой же результат, как и в Java. Нужно взять реализацию JVM с открытым исходным кодом и извлечь код, реализующий операторы и математические функции. Затем вы превращаете его в автономную библиотеку и вызываете в ней встроенные функции вместо прямого использования операторов. Это было бы сложно сделать вручную, но если код сгенерирован, то это идеальное решение. Возможно, это можно было бы сделать даже с помощью классов и перегрузки операторов, так что это тоже выглядит естественно.

6
задан Sebastien Diot 23 July 2011 в 08:31
поделиться