也说《不要奢望.NET能够跨平台》

今天一上班就看到这样一篇文章,感觉不爽。且不说有没有什么实质的内容,但是作者那不可一世的口气,嘿嘿,我就想抽他。   (<--于本文发布5小时后重申一下,这句话是我故意加上去的,这是我的真实感受,没必要虚伪。有不服的可以联系我周末找一天PK一下,嘿嘿。)

首先,概念要清楚。CLI是跨平台的,是一个标准,由微软提议,ECMA进行标准化。

而.NET,则是微软在Windows平台上对于CLI的实现。同时微软还实现了一个叫做Rotor的东西,是CLI标准在FreeBSD平台上的实现,同时还将它通过共享源代码计划进行了开源。同样,Mono则是某开源组织在Linux平台上对CLI的实现。

现在情况就很明朗了,不管是.NET也好,Mono也好,还是Rotor也好,都是在特定平台上,对一个统一标准的实现。那么,其中符合标准中强制规定的特定的部分,肯定是跨平台的。而对于标准进行的扩展,就不一定可以跨平台了。

换句话说,.NET中对于部分Windows API进行的封装,是属于对CLI标准的扩充,是有可能不跨平台的,你既然选择使用这些特性,就必须承担不能跨平台的风险。

同样,如果的程序里用到了Mono中对于标准进行扩充的部分,那他同样不一定能在.NET下运行。(此时,你能说Mono跨平台是个笑话吗?你会不会骂开源组织很笨?)

再换言,我敢担保HelloWorld程序编译好以后,肯定能同时在.NET /Mono/Rotor上运行。

------------------

顺便,我不知道是谁第一个开始宣扬.NET是跨平台的(.NET 安装需求中明确写出了只支持Win98以上的Windows系列操作系统)。我猜想个中原因有二。

其一,微软之“跨平台”不同于业界之“跨平台”。

微软所谓“跨平台”,指的是在各Windows版本之间跨平台。不要笑,这是很严肃的,Windows历史上有过16位的、32位的、基于NT的各种版本,而你之所以今天还能在WindowsXP上玩DOS游戏,这离不开微软各操作系统上的兼容性,这种兼容性谈何容易。跨各种Windows平台也不是一件容易的事。

其二,跨平台的是CLI而不是.NET。

本文一开头就明确了这些概念。

------------------------

再说一下,如果要开发跨平台的产品,必须首先对各种技术进行评估。文章开头提到的文章中提到的情况,明显属于项目初期的规划问题。为什么在项目开始不去进行一些评估?
posted @ 2007-04-24 09:52 Anders Liu 阅读(...) 评论(...) 编辑 收藏