可移植性(2009-09-15)
台风“巨爵”离去后,今晚又恢复如常的看书计划。《高质量程序设计艺术》来到第6章了,本章主要探讨程序的可移植性问题。
可移植性主要面对的几个难题是:操作系统、处理器体系结构、编译器与语言特性、图形界面环境、区域(如:显示多语言)、硬件设备与平台等方面的差异。提高程序的可移植性,主要就是解决以上几个难题。
解决可移植性的常用方法是使用一个代码层来对功能进行抽象,这实际上将差异性用一部分代码隔离了。例如:JavaScript的话,可以编写通用方法来获取屏幕大小,而该方法是通过判断不同浏览来调用不同的方法来实现。又例如:C/C++可以使用预处理。
本章用了较大的篇幅探讨了图形界面的问题。值得注意的有以下几点:
1)字符编码应该采用更通用、兼容性更高的UTF-8,而不是特定于某个区域的编码。虽然GB1080已经提高了其兼容性,但面向国际的话,还是很勉强。
2)程序/软件中的消息,应该与代码分离,作为独立的、容易替换的资源来处理,以简化其本地化的工作。
3)可移植GUI(图形用户界面)除了可以考虑建立可移植层(如建立统一的API,分别在Windows和X上封装实现该API,程序便可该API)、采用仿真层(好象就是WINE的做法)、基于可移植层的平台(如Java的Swing、SWT等)以外,还可以考虑使用HTTP/HTML或AJAX层来提供用户界面。