在与安德鲁·塔南鲍姆(Andrew Tanenbaum)就微内核与单片操作系统体系结构进行的辩论中,莱纳斯·托瓦尔兹(Linus Torvalds)说,
可移植性适用于无法编写新程序的人。
他是什么意思?
在与安德鲁·塔南鲍姆(Andrew Tanenbaum)就微内核与单片操作系统体系结构进行的辩论中,莱纳斯·托瓦尔兹(Linus Torvalds)说,
可移植性适用于无法编写新程序的人。
他是什么意思?
Answers:
正如莱纳斯(Linus)在辩论中所写的那样,这是面无表情的(即不要太当真)。
然后,他继续解释说,虽然可移植性是件好事,但这也是一个权衡。不可移植的代码可以简单得多。也就是说,与其使代码完全可移植,不如使它足够简单和可移植(“坚持可移植的API”),然后如果需要移植,请根据需要重写。使代码完美地可移植也可以看作是过早优化的一种形式-弊大于利。
当然,如果您不能编写新程序并且必须坚持原始程序,那是不可能的:)
早在最初编写Linux时,它就使用了仅在i386 CPU上可用的功能,这在当时是相当新的且昂贵的。
这正是linux的作用:它使用的386功能子集比其他内核似乎要大。当然,这使内核无法移植,但也使/ much /设计更为简单。可以接受的折衷方案,首先使linux成为可能。
进入21世纪以来,使i386独树一帜的功能已完全成为主流,使Linux变得非常轻便。
作为从事过许多Java工作并每周经历“一次编写,到处调试”现象的人,多年以来,我可以与之充分联系。
Java可能是一个温和的例子。我什至无法开始想象人们会尝试如何尝试使用一种语言/工具包中的可移植代码库,而该语言/工具包甚至都不是可移植的。
目前,我们正在研究为移动设备编写精简版产品之一的想法。我已经对如何为J2ME和Android制作可移植版本进行了一些研究-尝试共享尽可能多的代码库(显然本身不能完全“便携”,但这是类似的哲学)。这是一场噩梦。
是的,有时候,能够为特定工作使用特定工具进行思考(并做)真的很好。即针对一个单一的整体平台/环境自由开发。并且只需为每个脚本编写单独的干净版本。
尽管有些人认为/对待可移植性,遵循标准等在道义上是高级的,或按其要求行事,但这实际上归结为经济学。
编写可移植代码在使代码可移植方面付出了很多努力,并且(通常)具有某些并非在所有目标设备上都可用的功能。
当/如果您关心新的体系结构时,非便携式代码在移植代码方面会付出一定的代价,并且(通常)会覆盖一些在原始目标上不可用(或不可用)的功能。
最重要的限定条件是“何时/如果您关心新架构”。编写可移植的代码需要付出努力的前期在希望的是能够使用新的/不同的架构,代码很少或根本没有努力最终回报的。不可移植的代码使您可以延迟在移植上的投资,直到(至少合理地)确定确实需要移植到某个特定目标为止。
如果您预先确定要移植到许多目标,那么通常值得预先投资以最大程度地减少长期移植成本。如果您不确定需要移植多少代码,那么编写不可移植的代码可以最大程度地减少前期成本,从而延迟甚至完全避免使代码可移植的成本。
我认为值得一提的是,我所说的“便携式”和“非便携式”好像两者之间有明确的区分。实际上,事实并非如此-可移植性是一个连续的过程,从完全不可移植(例如,汇编代码)到高度可移植(例如,Info-zip)以及介于两者之间的任何地方。
Tanenbaum指出,许多Linux是采用非模块化方式编写的,以利用386 CPU(当时的最新技术),而不是使CPU交互成为组件,因此非常容易互换。Tanenbaum本质上认为,内核是如此单一并且绑定到386 CPU的事实使得很难做到这一点,
linux阵营提出了几点,其中包括: