首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标相关代码&可移植性

目标相关代码&可移植性
EN

Software Engineering用户
提问于 2017-05-09 20:22:17
回答 3查看 554关注 0票数 1

的问题是:什么是目标相关的代码,它如何影响软件的可移植性?

问这个问题的动机

在CS类中,我被告知,与目标相关的代码软件越多,它就越具有可移植性,be.But对我来说是错误的,实际上,我认为恰恰相反。

理由是,与目标相关的代码意味着特定于目标的实现,以及更多的目标,这意味着您可以在更多的目标上运行软件。(Target被定义为一个硬件和软件环境)因为您可以在更多的目标上运行软件,它使软件更易于移植。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2017-05-11 14:28:46

理由是,与目标相关的代码意味着特定于目标的实现,以及更多的目标,这意味着您可以在更多的目标上运行软件。..。因为您可以在更多的目标上运行该软件,它使软件更易于移植。

在能够在多个目标上正确运行的程序和用可移植代码编写的程序之间有一个非常重要的区别。

如果没有标准,使代码在多个目标上正确运行的方法是为每个目标或一组行为相同的目标编写一个实现。这种开发在上世纪80年代和90年代初在Unix系统上开发的代码中处于最糟糕的状态,因为竞争的供应商试图占领尽可能多的市场,并成为“标准”。对于一个程序来说,广泛使用条件编译或执行来使其工作在大量特定于供应商的System和BSD风格上是不寻常的。这些实现可以方便地绑定到一个文件中,并根据外部因素进行选择,但这并不改变存在多个实现的事实。按照定义,这样的程序并不是可移植的,因为在每个目标上运行的程序是不同的(也就是说,它是特定于目标的代码)。正如gnasher729在他的回答中指出的那样,它们是移植的。

可移植性来自于采用了一些标准,这些标准为要使用的程序提供了一个定义良好的API,可以在幕后处理目标的特性。例如,我可以确信在Windows、Linux、Solaris或OS上,这部分C将按预期的方式编译和运行:

代码语言:javascript
复制
int file = open("somefile", O_RDONLY);
lseek(file, 12345, SEEK_SET);
char buffer[1024];
read(file, buffer, 1024);
/* Do something with buffer */
close(file);

这是可移植代码,因为上面列出的所有目标都有符合POSIX的ISO C编译器和库,其中P代表可移植性。

对于可移植性的试金石是不必对其进行更改才能在新的目标上运行。您的教授所说的话归结为“一个程序可以在任何目标上运行,您可以在其中击败源代码提交。”在我的书中,这与可移植性完全相反,这让他大错特错。

票数 2
EN

Software Engineering用户

发布于 2017-05-09 21:25:02

当我们称软件为“可移植”时,这意味着很容易使软件在不同的目标上运行。通常,这意味着可以用很少的目标相关代码使软件在不同的目标上运行。可移植性较低的软件需要更多的目标相关代码来使其在不同的目标上运行。

当然,如果您使软件运行在十个目标上,那么您将有比两个目标更多的目标依赖代码。但这并不意味着该软件是“可移植的”。这意味着软件已经被移植了。

票数 3
EN

Software Engineering用户

发布于 2022-04-09 15:41:20

在听到同一位教授的上述论点后,我在谷歌上搜索了同样的内容,最后来到这里,希望能说出我理解的东西是有益的:

想象一下,你正在建造一辆能够在不同环境下运行的汽车。您可以为沙漠添加一些齿轮,为金枪鱼等添加一些齿轮。针对不同情况的专用齿轮是目标相关的代码。如果你有专门的齿轮为不同的条件,你可以使用汽车在不同的条件,从而使它更便携。如果这辆车没有特别的装备,而且只适合在城市使用,那么这辆车就不会被移动到沙漠,或者西伯利亚的风衣。

但是,当然,为每一种情况添加专门的齿轮并不是实现可移植性的最佳方法,使常规齿轮能够通用于多种情况是一种更好的方法。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/348640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档