为了让程序在未来的架构和操作系统中可以运行,我们可以做些什么?

Kar*_*arl 0 architecture operating-system

我提出这个问题因为我已经看到Windows 7 64位能够运行几个32位程序而没有任何问题; 当然,有些运行有问题,有些人拒绝运行.

我不确定为什么有些32位程序可以在64位上运行得很好,但对于我们来说,未来,如果我们将来有128位架构和操作系统发布,那么我们可以在编程方面做些什么呢?我们希望我们的程序能够在不同的位架构中运行吗?或者它不是程序员的工作?

Dav*_*ley 6

这里有两个可能的问题:如何允许二进制文件运行,以及如何允许源代码编译和运行.

没有那么多你可以做的二进制面向未来.严格按照已发布的API进行操作,并避免使用任何未记录的内容.如果未来的系统支持它,它将运行,并且未来的系统比未记录的任何东西更有可能支持标准API.这是许多早期Macintosh程序的问题:它们不是使用API​​(早期对某些事情很笨拙),而是使用在OS 5中运行的快捷方式,或者在OS 7中没有.

这个建议主要用于C和C++,因为像Java这样的语言更好地定义了东西.任何纯Java程序都应该在以后的任何JVM上运行良好.(是的,这有自己的成本.)

抽象出所有与架构相关的东西.使用类型,如size_tptrdiff_t在C和C++,而不是任何整数类型.

当您需要特定位大小的类型时,请不要给它类似int或类型long.使用typedef.有一个C99标题包含有用的typedef用于此目的,但你可以总是有类似的东西,并根据需要在一个显而易见的地方typedef int int32_t改变int后者,而不是在难以找到的地方分散在程序周围.

尝试封装OS调用,因为这些调用可能会在未来的架构中发生变化.如果您必须对未记录的操作系统功能执行任何操作,请将其记录得非常明显.

如果您的程序与网络有关,则不假设字节顺序.网络字节顺序不太可能改变,但您的程序可能会在具有不同体系结构的芯片上结束(参见Macintosh,它在其时间使用了三种不同的体系结构).

一般来说,假设尽可能少.使用专门为机器相关事物指定的类型,并始终如一地使用它们.尽可能以最正式,标准和记录的方式编写程序之外的所有内容.