Здесь есть два возможных вопроса: что делать, чтобы позволить двоичному файлу работать, и что делать, чтобы исходный код компилировался и запускался.
Не так много, что вы можете сделать, чтобы сделать двоичный код будущим. Строго следуйте опубликованному API и избегайте использования недокументированных документов. Он будет работать, если будущая система его поддержит, и будущая система с большей вероятностью будет поддерживать стандартный API, чем что-либо недокументированное. Это было проблемой со многими ранними программами для Macintosh: вместо использования API (который был неуклюжим для некоторых вещей на ранних этапах), они использовали ярлыки, которые работали в OS 5 или чем-то еще, а не в OS 7.
Этот совет в основном для C и C ++, так как языки, такие как Java, определяют вещи намного лучше. Любая чистая Java-программа должна нормально работать на любой более поздней JVM. (Да, это имеет свои собственные расходы.)
Абстрагируйте все архитектурно-зависимые вещи, которые можете. Используйте типы типа size_t
и ptrdiff_t
в C и C ++, а не любое целое число.
Если вам нужен тип определенного размера в битах, не задавайте ему такой тип, как int
или long
. Используйте typedefs. Для этой цели есть заголовок C99 с полезными typedefs, но вы всегда можете иметь что-то вроде typedef int int32_t
и при необходимости изменить int
позже, в одном очевидном месте, а не разбросанном по программе в труднодоступных местах.
Попробуйте инкапсулировать вызовы ОС, поскольку они могут измениться в будущей архитектуре. Если вам нужно что-то сделать с недокументированной функцией ОС, запишите это очень заметно.
Если ваша программа имеет какое-либо отношение к сети, не принимайте ничего о порядке байтов. Порядок байтов в сети вряд ли изменится, но ваша программа может оказаться на микросхеме с другой архитектурой (например, Macintosh, которая в свое время использовала три разные архитектуры).
В общем, принимайте как можно меньше. Используйте типы, специально предназначенные для машинно-зависимых вещей, и используйте их последовательно. Делайте все, что находится за пределами программы, как написано наиболее формальным, стандартным и документированным способом.