这个周末闲来无事, 于是在VMware Workstation 5。5。1 Linux版本上安装了一个Mac OS X 10。4。3, 也就是Drawin 8。3。1。 整个安装过程的确碰到些小的问题, 主要的两个”不可能”的问题是:
1. 必须要将ISO刻录成DVD来安装, VMware 5。5的虚拟光驱不兼容Mac OS X的安装。
2. VMware的光驱需要安装在IDE 0:1的位置上, 和硬盘同一个IDE口。
其他需要注意的是Guest OS需要选择FreeBSD, 在安装过程中先删除网卡, 声卡, USB这些模块, 等系统安装完成后再加载。 这样可以让整个安装过程非常顺利。
不过我在这里要谈的一个重点是我之后安装了DVD盘自带的X11, 以及XCode中的GCC和DevSDK。 非常有趣的是我将一个在Linux上基于XLIB开发的程序在Drawin上重新编译, 一切出奇地顺利, 然后就能运行了。
我从来不知道C和XLIB写出来的程序具有如此高的可移植性。 这让我回想到前几周我运行一个JAVA程序所碰到经历, 这个JAVA程序对运行环境的版本出奇地敏感, 这导致了超过半数的机器无法运行。 这不得不让我重新思考一下中低级语言和高级语言之间在可移植性上的问题。
高级语言因为面临其功能的扩充与频繁的升级, 反而导致了开发上的复杂度(最极端的或许就是HTML, JS这样的表层语言)。 那些所谓的低成本维护和高移植性的神话正在被其自身的剧烈变化所击破。 而相比较人们不再去触碰像C这样构筑的中低层结构, 这让程序开发环境变得非常稳定, 而这种稳定也带来了出乎意料的高可移植性与性能。
下图就是我测试的 一个程序, 我拿我所有在Linux用C开发的程序在 FreeBSD, NetBSD, Cygwin 以及 Drawin 上均编译运行通过, 并且性能良好。 这或许应该让我们重新思考一下, 我们应该在哪个层次编写代码? 我的观点是: “一个稳定的层次“, 而从物理角度来看待这个问题同样显而易见: 这个最甜的层次通常就是结构的中下层。
那个写这篇博客的人,所写的C程序能有良好的移植性,是因为Unix类的系统都是遵循一个统一的标准,POSIX。说白了,就是C语言和系统POSIX系统调用的行为应该一致的。C语言较为简单,有良好的移植性,标准化时间长,实现之间的不兼容性问题较少。而POSIX标准,是根据现行的类Unix系统共同制定。这些层次,属于中低层,变化较小,但不兼容性问题依然存在。因为,中低层以上有大量的上层应用,如果一点轻微的改变都会使上层的应用软件无法运行或者是运行不正常。Vista不兼容,以前的很多软件就是典型的例子。
中低层不是绝对的稳定层,应该是在软件开发中尽量保持稳定的层次。