• 2006-04-23

    《Unix程序设计艺术》之身边的例子——可移植性

    Tag:向上走

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/2335595.html

    《Unix程序设计艺术》的第十七章讨论的是可移植性,也就是我们常说的跨平台。这里的平台,包括硬件平台和软件平台。

    或许是初学编程时受一些书的影响,在相当长的一段时间内,可移植性在我心目中是一个相当神圣的词汇,甚至理所当然的认为一个好的程序就应该跨平台,所以,偶尔写程序用到一些判断平台特征的#ifdef,自己都会觉得很了不起。

    事实远没有理想那样美好。可移植性固然是一个很好的特征,但它并不像看上去那样美。

    首当其冲的问题便是,我们的程序有必要做到可移植性吗?我有一个朋友,他们项目的开发语言是VB,而且是诞生于上个世纪末的VB6。在这个Java和.NET抢占眼球的年代,一个新项目采用VB作为开发语言本身看上去就是一个大胆的决定。对此,这个朋友的解释是,一来他对于VB的熟悉程度,二来VB在快速开发上表现确实不错。朋友的公司是一个新公司,他们需要尽快的把产品做出来,因此,VB成了一个当仁不让的选择。因为他们的产品是一个面向普通用户的产品,于是,我想到了可移植性的问题,毕竟,Linux桌面的影响力是越来越大。朋友的答案是,先把Windows平台做好,公司的现状是把眼前的事做好,而不是把面铺开,再者,即便真的需要移植到Linux,作为一种选择,他可能会考虑Samba,至于后续的发展,那是以后需要考虑的事情。从他的身上,我感受到了一种强烈的实用主义气息。

    即便可移植性真的成了一种必须,跨平台也不像最初想像的那样简单。曾经写过一篇《小心翼翼跨平台》,讨论了我在使用Java时遇到的一个可移植性的问题。Java在跨平台上的表现已经不错了,但还会存在许多问题,遑论其它各家呢!

    部门原来分为两个组:算法和平台。其中平台组原本要做的工作之一就是保证我们算法的可移植性。按照原先单纯的想法,在平台组同志们辛苦的努力之下,算法组的同志们就可以在可爱的PC机上进行开发,到了具体的硬件平台,就是编译器的工作了。为此,同志们经过艰苦卓绝的努力,用C语言开发了OS Wrapper,屏蔽操作系统的差异。这一切发生在去年。今年年初,当我们拿到一块实验板子时,所有美丽的梦就此破灭了。虽然这块板子用到的也是C语言,但为了让程序可以获得更高的性能,它对C语言进行了扩展。如果不使用这些扩展,我们也就完全失去了使用这个板子的意义,而使用这些扩展意味着原先大量的代码需要重写,梦想中的可移植性也就荡然无存了。再有,这个板子有着特殊的运行程序的方式,根本没有操作系统,换句话说,我们辛辛苦苦编写的OS Wrapper至少在这个板子上完全没有用武之地。

    可移植性,是一个值得我们努力的美好目标。如果真的达不到,也没有必要一棵树上吊死。

    分享到:

    历史上的今天:

    引用地址:

    评论

  • 能不能在MSN上加我,觉得你的不少blog写得不错,很想和你交流交流xiekeli@hotmail.com
  • 最近忙啥呢?去北京了吗??
    回复幻影肥猫说:
    最近忙啥呢?这个问题应该我问你啊?

    还要再过一段时间,现在正处于前期的预习阶段。
    2006-04-24 21:15:14