也说《不要奢望.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 阅读(19772) 评论(83) 编辑 收藏

 回复 引用 查看   
#1楼 2007-04-24 10:14 OOP      
“微软所谓“跨平台”,指的是在各Windows版本之间跨平台”
同感同感。

 回复 引用 查看   
#2楼 2007-04-24 10:41 Amnoh      
除了“嘿嘿,我就想抽他。”这句稍感和被批判对象一样不沉稳之外,楼主的其它话,基本还是赞同的。
.net在windows上是对API的封装,那为什么在Linux上就不行?底层的实现不管多么的不同,但我们封装之后,不也可以用相同的接口表现来么。

计算机的发展史,不就是一个封装的演变史么,从最初的驱动程序都要程序员自己解决,一直发展到了今天的连API都要再封装一遍。

要说Mono的最大问题,倒不是跨不过来,而是微软一贯地作风问题,CLI公开一点,留一点,一些关键的地方让Mono不知道如何去做.否则,只要给点时间,一点问题都没有

 回复 引用   
#3楼 2007-04-24 10:52 阿毅[未注册用户]
呵呵,有人喜欢十个手指一样长嘛,不要理他。
 回复 引用 查看   
#4楼[楼主] 2007-04-24 10:53 Anders Liu      
@Amnoh

这句是故意加上的,要和对谁在同一个高度说话~

-----------

再说一遍,.NET封装windows API给开发者,提供的已经是一个接口了;而对其他平台的API进行封装,提供一样的接口,是别人的事,而不是微软的。

举个例子,System.Drawing命名空间,微软在.NET中通过对GDI和GDI+进行封装,提供了一致的接口(Graphics类、Image类等等);而Mono也通过对Linux中的一些API进行封装,提供了一样的接口(类型的名字同样是Graphics、Image等,方法也都几乎相同)。

这就像Adapter一样,.NET可以认为是Windows和CLI应用程序之间的一个Adapter,而Mono则应该提供Linux和CLI应用之间的同样的Adapter。

你不能指望一个厂商提供面向所有平台的Adapter吧~

---------

另外,CLI可不是公开一点留一点,是完全公开的,只不过,其中只规定了一个很小的“必须实现”的内容,而又大量“可扩展”的东西,微软只是在“可扩展”上面多做了些工作——这才是微软“一贯的作风”。微软从来都是支持标准,但把标准中可扩展的部分搞成特定于平台的。(IE7之前版本除外 -_-)

 回复 引用   
#5楼 2007-04-24 11:05 dizzarz[未注册用户]
您好,我是It168 技术频道的编辑,看到你的文章之后想约你写一篇微软开源方面相关的文章。我的联系方式:
Email:sunpengyang@it168.com
网站地址是:http://tech.it168.com/dotnet/

 回复 引用 查看   
#6楼[楼主] 2007-04-24 11:08 Anders Liu      
@dizzarz
好啊~

 回复 引用   
#7楼 2007-04-24 11:09 Richard[未注册用户]
MVP给我们出了口恶气
 回复 引用 查看   
#8楼 2007-04-24 11:10 有些伤感      
写的不错,感觉那篇文章的作者对很多事的理解都有问题,而且口气非常惹人生厌
 回复 引用 查看   
#9楼 2007-04-24 11:22 T-MAC.NET      
有点搞人生攻击了,呵呵
 回复 引用 查看   
#10楼 2007-04-24 12:27 Vokobo      
冷静!
 回复 引用 查看   
#11楼 2007-04-24 12:35 BoyLee      
我必须要支持LZ一下
 回复 引用   
#12楼 2007-04-24 12:35 航天奇侠

mono做的比我想象的要好。
只是Mono要慢.net一步倒是真的。

 回复 引用   
#13楼 2007-04-24 12:39 abc[未注册用户]
那篇文章文章看了之后就知道,有些人是多么的愚昧,他一来自己没有用过mono,二来不知道什么是CLI,三来不知道现在sf.net上有多少个.net的项目就是在mono下面开发的,就出来大喊大叫,不可一世的样子,真想抽牠一顿!
可笑的是回复的还有不少人同意他的观点,建议那些只懂得做做网页的人多看两本上再上来写blog.

 回复 引用 查看   
#14楼 2007-04-24 12:43 Phinecos(洞庭散人)      
园子里最近火气好大。。。
 回复 引用 查看   
#15楼 2007-04-24 12:55 Cure      
这样的讨论多好啊,希望不要变那个帖子里到处匿名攻击
 回复 引用 查看   
#16楼 2007-04-24 13:00 玉开      
大家讨论问题,没必要说抽谁。
 回复 引用   
#17楼 2007-04-24 13:03 jerry[未注册用户]
MVP就是厉害,还好没有被别人误导。赞一个!!!
 回复 引用 查看   
#18楼 2007-04-24 13:11 极地银狐.NET      
大家吵吧,本人看热闹.
 回复 引用   
#19楼 2007-04-24 13:21 drizzt[未注册用户]
同意~~~~~~~~
 回复 引用 查看   
#20楼 2007-04-24 13:23 灵感之源      
好几年不评论博客园的随笔了,今天并不破例,因为我只评论一些人的评论。

不要开口闭口非得骂人才显得你自以为是有才,还是虚心研究好。

 回复 引用   
#21楼 2007-04-24 13:47 路人[未注册用户]
你似乎没看懂对方文章的意思。

从你博客的文章看来,你的技术水平远差于对方啊。

你还爆粗口了。

怎么说你呢,技术水平低不说,而且个人素质也差。

 回复 引用 查看   
#22楼 2007-04-24 14:11 BoyLee      
@路人
鄙视马甲

 回复 引用 查看   
#23楼 2007-04-24 14:18 生米煮成稀饭      
看戏落
 回复 引用 查看   
#24楼 2007-04-24 14:41 木野狐      
大家都应该谦虚。

 回复 引用   
#25楼 2007-04-24 14:48 luaiping[未注册用户]
吵要吵出技术火花,而不是人身攻击
 回复 引用 查看   
#26楼 2007-04-24 15:01 深蓝      
虽然很佩服你是一个MVP,不过既然在首页上发表文章,就不要说那句话,大家各自有各自的观点,求同存异,以和为贵嘛。
 回复 引用 查看   
#28楼 2007-04-24 15:09 redmoon      
《不要奢望.NET能够跨平台》一文中还有一个重要的问题博主没有提到。这个严重问题就是,一个机顶盒居然用xp,不用xp embeded或者ce。真是匪夷所思。
 回复 引用 查看   
#29楼 2007-04-24 15:18 yunhuasheng      
哈哈,希望我们搞技术的能够冷静下来,仔细想想这些东西。
 回复 引用 查看   
#30楼[楼主] 2007-04-24 15:22 Anders Liu      
@redmoon

机顶盒也可以用XP的,不要一想到小玩意就应该是XPe或CE。
当年我和导师一起给机床作故障预警,用的还是Win98呢,没啥~

 回复 引用 查看   
#31楼 2007-04-24 15:25 非我      
@路人
鄙视马甲

 回复 引用   
#32楼 2007-04-24 15:25 zzz[未注册用户]
...MXP也就这素质?
 回复 引用 查看   
#33楼 2007-04-24 15:27 Muse      
CLI最终必须要和OS底层联系的,比如IO、Thread、Drawing等等,OS管理整个系统,CLI是在OS之上的,不封装OS API很多功能根本无法实现,.NET如此,MONO如此,JavaVM一样如此——Vista上的JavaVM曾经有一个和WDDM冲突的问题,搞的Vista的玻璃效果没了。
 回复 引用 查看   
#34楼 2007-04-24 15:29 Muse      
@zzz
@路人

为什么躲躲藏藏?

 回复 引用 查看   
#35楼 2007-04-24 16:13 非我      
@Muse
我觉得,从开发者的角度来说,.net framework 和 JVM就是对OS API的封装。

 回复 引用 查看   
#36楼 2007-04-24 16:19 Robert Lee      
大家冷静冷静,不要再发生无谓的争论了:)
 回复 引用   
#37楼 2007-04-24 16:29 david.turing[未注册用户]
.net跨平台以后,各位认为MS的windows卖得更多还是Linux、FreeBSD卖的更多?
 回复 引用 查看   
#38楼 2007-04-24 18:19 装配脑袋      
我都有点不敢看评论,万一这是在JAVA社区里……
 回复 引用 查看   
#39楼 2007-04-24 18:36 随风流月      
@装配脑袋
……
还有,你几个月不发 Blog 了?

 回复 引用 查看   
#40楼 2007-04-24 18:38 Sumtec      
@david.turing:
不讨论windows和其他系统之间的直接比较,但就差距而言,这么多年来感觉应该是缩小了的。
我记得几年之前,使用Windows操作系统的“服务器”(貌似还是WinNT),居然传说每个礼拜都得要重启,否则后果就是说不准哪一天自动重启。
现在嘛,个人感觉至少没有那么糟糕了,对吧?
相对于Unix系统来说,单价应该便宜一点。相对Linux来说,支持应该好一点。
至于你要性能,还是要便宜,还是要服务,还是综合考虑,那就是你的事情了。所以每一个人的决定都不一样,不足为奇。

 回复 引用   
#41楼 2007-04-24 19:34 ok[未注册用户]
@david.turing
肯定还是WINDOWS呀
普通用户数量 是远远大于服务器数量的

 回复 引用   
#42楼 2007-04-24 19:55 guest[未注册用户]
.NET中对于部分Windows API进行的封装,是属于对CLI标准的扩充

楼主的这句话是不是说出了.NET所谓的跨平台的软肋?我可以告诉楼主,C#当中最常用的委托到最后不是给C#语言本身所规定的东西去执行,而是借助了外部的东东(这个东西是不是Windows API我就不知道了,但是不是C#本身这点你可以用Reflector去看看)。当然,对微软阵营的人来说跨平台其实没什么意义。因为微软本身就处于垄断地位嘛!(我也是微软阵营的,总体上感觉这个阵营没有Java那边踏实,比较浮躁)

 回复 引用 查看   
#43楼 2007-04-24 20:26 Jeffrey Zhao      
@guest
那是因为微软的东西太容易上手,导致很多人不愿意深入接触。

 回复 引用 查看   
#44楼 2007-04-24 20:38 温少      
"俺的儿是·刘",小孩子,说粗口不好啊!

不过我不是你家长,就不教你啦,我也不喜欢打小孩子屁股的。

http://www.cnblogs.com/jobs/archive/2007/04/24/725766.html

 回复 引用   
#45楼 2007-04-24 20:54 小鬼[未注册用户]
.net,可爱又可恨的东东.
 回复 引用   
#46楼 2007-04-24 21:13 ccBoy[未注册用户]
兄弟们,不要这么激动,搞技术的要有定性也要有激情,但不要别人随便抛个议题大家就真的激动地讨论一番,说到最后就是相互攻击了,沉下心来做一些自己喜欢的技术工作和研究

但赞同Anders Liu发帖的行为,如果没有人表示不爽和意见,不然经常有这样的帖子来迷惑人,没有人发帖说明,不知情的人还以为是真的了,这不误导成真了

无论温少怎样,我们用事实说话,看看他.NET和Java的Blog(Java 分站),人家是用技术的角度和体验写Java Weblog,写.NET Weblog那时看心情,随便写写,你还别当真

什么.NET跨平台,Windows平台安全性,什么.NET没有大型应用的成功案例,.NET平台不具备开放性。。。这些议题多了,一般打单的时候,非微软平台的不都这么挑微软的刺,经验丰富点的IBM, 中兴、华为自己不说而是"恐吓用户"通过用户的口来说,你以为他们真的跟你谈技术,跟你比跨平台和开发性,他是找你的弱点,要赢这个单

降了价赢了单,没准他就用PC Server或在Windows上装个Oracle,还不买License,嘿你还别生气。所以大家别太技术化,另外学会沉住气

技术辩论是需要的,大家不要太技术和居于个人立场,也要了解动机和学会交谈,行为太离谱的,教育一下没什么不可

ccBoy


 回复 引用 查看   
#47楼 2007-04-24 23:16 omnislash      
@guest
.NET中对于部分Windows API进行的封装,是属于对CLI标准的扩充

楼主的这句话是不是说出了.NET所谓的跨平台的软肋?我可以告诉楼主,C#当中最常用的委托到最后不是给C#语言本身所规定的东西去执行,而是借助了外部的东东(这个东西是不是Windows API我就不知道了,但是不是C#本身这点你可以用Reflector去看看) ……

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

本地调用不是问题,java也这么用。一个公开的例子,SWT底层就是native code写的。即使在J2SE里面也不乏这种情况(http://www.cchere.net/article/889635),这并不影响Java的跨平台特性

 回复 引用 查看   
#48楼 2007-04-24 23:43 笨小苏      
忽略了一点,windows moblie
把项目移到手机上的时候你就知道c#的爽了
尤其是用.net cf

 回复 引用 查看   
#49楼 2007-04-25 08:19 小哈      
搬小板凳,邊看邊學。。。
 回复 引用   
#50楼 2007-04-25 08:32 swizard[未注册用户]
微软的windows不支持JVM的话,java跨平台也根本就是在扯淡
 回复 引用 查看   
#51楼 2007-04-25 08:40 随风流月      
@swizard
差不多了,特别反感 Sun Java VM 的常驻程序,占我可怜的512内存..

 回复 引用 查看   
#52楼 2007-04-25 08:40 随风流月      
@guest
自然不是,你能够指望 VM 最终不以本地代码执行吗?

 回复 引用   
#53楼 2007-04-25 09:18 dir[未注册用户]
看楼猪,强压怒火装斯文,我真的想抽你《重申一下,这句话是我故意加上去的,这是我的真实感受,没必要虚伪。
 回复 引用 查看   
#54楼 2007-04-25 09:44 redmoon      
@ Anders Liu
"机顶盒也可以用XP的,不要一想到小玩意就应该是XPe或CE。
当年我和导师一起给机床作故障预警,用的还是Win98呢,没啥~"

我没有说机顶盒不能用XP,只是XP不是很适用于机顶盒这样的硬件环境(非模块化,授权费用昂贵)

 回复 引用   
#55楼 2007-04-25 11:29 小妖[未注册用户]
从机顶盒到跨平台,只是希望大家公正的去看这个问题。谁错了谁对了,我们都以为自己很强,鄙视一切技术。可是你真正的去了解过你所鄙视的那些技术吗,你鄙视。NET那你先该我一个理由。你了解它有多深?!你对他的各个版本有多了解?!在你只是一知半解的情况下,你没有资格去鄙视任何人,任何技术。如果你非要鄙视谁,说怎么怎么样。我无话可说,只能说你还不成熟,还有很长的路要走。同时我支持Anders Liu


希望 对面那位先生能看到我的话!

 回复 引用 查看   
#56楼 2007-04-25 19:38 温少      
@anders
看你所有文章,你技术水平应处于粗浅概念认知阶段。技术水平处于这个阶段也素正常,毕竟人都有成长阶段,偶不和你讨论技术就相安无事。

但是你说粗口,而且一再强调,以为我善良可欺。偶便教训你几句,让你懂得长幼有序。


 回复 引用 查看   
#57楼 2007-04-25 20:54 随风流月      
@温少
Anders Liu 在 Cnblogs 上所发表的,并不代表其真实水平。
就像你本人在 Cnblogs 上发表的关于 .Net 的文章没有多大建树一样。

 回复 引用 查看   
#58楼 2007-04-25 20:54 随风流月      
@温少
您老多少岁了?切勿倚老卖老。

 回复 引用   
#59楼 2007-04-26 00:52 小鬼[未注册用户]
吵吧沙吧,如果大家都在花时间在吵,我可能又能赶上一点点了哦.什么.net也好java也吧,关键的不在于语言而是整个系统的设计思想.用户要求用什么语言就用什么语言,不要求的话,什么方便就用什么.

哈哈,再笑一下.真不知道什么是MVP.

 回复 引用   
#60楼 2007-04-26 01:28 路过[未注册用户]
re: 也说《不要奢望.NET能够跨平台》[未登录] 2007-04-26 00:52 小鬼

......用户要求用什么语言就用什么语言......
-------------------------------
感觉像妓女说,客人要求用什么姿势就用什么姿势,日,这样的人也做程序员?!

 回复 引用   
#61楼 2007-04-26 16:06 tanar'ri[未注册用户]

那个温少,居然举出查拉图斯特拉,你Y是拜火教徒吗?还是明教教徒?张无忌教主近来可好?苏鲁支语录完整的看过吗?看过几页尼采就过来装B,你也得梅毒把脑子烧坏了?
技术社区怎么出来这么个装B的主?好好玩你的技术这个有前途的职业吧,要想买弄哲学来的还真不是地方。

ps:MVP的全称是什么?

 回复 引用   
#62楼 2007-04-26 17:02 jjx[未注册用户]
这人也就那样,无需理他,年轻人狂点不要紧,但首先毫无目标的乱放枪,其次语言是过于刻薄,就不对了,想不到kingdee竟有如此人物,下次凡是项目中遇到有kingdee的,必排斥之

 回复 引用 查看   
#63楼 2007-04-26 17:24 dudu      
请大家争论时要据理力争,对事不对人,千万不要进行人身攻击。
大家在这里讨论是为了通过交流提高自己,如果闹得不愉快那就不值得了。

 回复 引用 查看   
#64楼 2007-04-26 19:19 随风流月      
@tanar'ri
Microsoft Most Valueable Professional.

 回复 引用   
#65楼 2007-04-28 21:00 田武烈[未注册用户]
看来MVP的素质的确比较差,而且技术水平也很一般。听说大部分是通过关系得到,估计楼主也是吧。可惜我们公司和微软关系不够好,否则也可以捞几个回来,吓唬人。
 回复 引用   
#66楼 2007-05-02 08:04 北林老曾[未注册用户]
“微软从来都是支持标准,但把标准中可扩展的部分搞成特定于平台的”
--------------------------------------------------------------
这句欠妥,想当初,vc6.0可是在支持标准上不如c++builder

 回复 引用   
#67楼 2007-05-07 15:04 游荡人[未注册用户]
你和他说得都有道理
真不知道为什么你想pk他
微软要不是整出个c++/cli我会选择java的,另外我喜欢qt..........
我喜欢c++
另外一点:我现在不打算学那些上面那些了....想想龙芯的那帮大哥在干什么事呢...

 回复 引用   
#68楼 2007-05-07 15:06 游荡人[未注册用户]
@Richard
不知道给你出什么气了?

 回复 引用   
#69楼 2007-05-08 13:01 abc[未注册用户]
吵什么吵,.net,java一起用不就行了吗,笨
 回复 引用   
#70楼 2007-05-11 00:45 kabell[未注册用户]
路过,看了贴子和回复,发表下感想。。。

原贴楼主(以下直称温少)也只是从一个具体案例引申出一些个人观点而已,考究其中所谓用词嚣张之处,也不过两点:

一是“竟然有人还把.NET能够跨平台当真一回事,可谓智商无下限”。这句话有其语境,显然是针对“有人”与这个具体案例说的,其实并无不妥,聪明一世的人偶尔也会做点弱智的事。谁知却触动不少.net 程序员敏感的神经,总觉得“智商无下限”是指包括其本人的全体.net程序员了,其实大可不必。

二是“Novell公司的Mono是一个笑话”,这的确只是温少主观的感受。我本人对Mono没有深入了解,但从温少文章与下文回复来看,Mono在移植能力上倒也的确是差强人意。如“有人”在移植过程中频繁出现死机,回复有人提出“个人认为Mono不是把.Net移植到Linux,而是在Linux下开发.NET”,有人提出“也许你研究一下Mono就不会这么浅薄一笑了”。这个“研究一下”到底是指多少工作量?我想回复者的意思是“研究到不死机为止”。总而言之,Mono在提供一般意义上的跨平台能力上,的确是不能寄予厚望的。那么在“跨平台”这个语景来看,说Mono是个笑话,虽然语言刻薄,却也未尝不可。

至于楼主的反击贴,逻辑上却极有问题。首先温少在第一个贴子上已经提出“微软的.NET只有很小一部分提交给了ECMA,而其他部分的API,你可以认为是Windows API高级版。”,他不是说MS没有标准化,而是说MS标准化的部分只占整个API体系的很小部分,而且也没有足够力度去提倡开发人员只使用标准化部分进行开发。楼主的贴子应该从这点去反击,可惜楼主却好象没看完原帖,自说自话地用大段文字说明.NET其实也有标准化,符合标准就能跨平台,不符合就不能跨。给人的感觉,就象温少在用风清扬的独孤九剑,已经预想好对手的出招,摆好了位置等对手往剑尖上撞,观众都在注视对手如何应对时,楼主却应声撞到剑尖之上。。。

其次,楼主提出之“微软之跨平台不同于业界之跨平台”,看到这个连我也觉得有点好笑了。看来MVP之所以能成为MVP,不单是看技术,而且连价值观也向微软看齐了:“业界的标准不合我的心意,我就自己定个标准!”温少所说的“跨平台”,显然是一般意义上的,业界公认的跨平台。他偏偏要自己对“跨平台”进行定义:“所谓平台,就是指windows的不同版本对下兼容”,然后说“微软也是跨平台的”。简直有点强词夺理的感觉了。再说到“这种兼容性谈何容易。跨各种Windows平台也不是一件容易的事。”,就简直给人一种“偶没有功劳也有苦劳”的感觉了。你容不容易关我用户什么事,在这个案例里,我的需求就是要跨到linux上。。。

第三,说到要开发跨平台产品,首先要对技术进行评估。这句说得不错,可惜却放错了地方,楼主要反驳原作者的“不要奢望.net能跨(一般意义上的)平台”,结论却是:.net就是不能跨(一般意义上的)平台,请你自己先对技术进行评估吧。。。

再看了一下原贴的回复,一笑之余,倒也令人不得不对时下论坛的技术讨论气氛感到忧虑。例如有人提出“个人觉得,你的观点正确与否是次要的。但是你不必把所有人都踩到脚下,似乎只有你自己智商高,其他人都是废物。这哪里是什么幽默感,分明是自恋嘛!”,看来现在技术论坛也搞起了办公室政治,要求八面玲珑,人情世故了。一个人在技术论坛就一个案例提出了一点看法,结果最重要是用词造句是否谦虚得体,别人是否中听。。。中听嘛,我就支持。不中听嘛,你的观点正确与否是次要的。。。在我个人看来,一条技术贴,只要言之有物,行文的语气态度倒真的是次要的,如果为求看得舒服,去看武侠或言情会对题得多。

纵观所有回复,唯一从正面去辩论的朋友,只有ccBoy了。可惜却应了楼主所说,过于“谦虚和谨慎”,反而犯了不少逻辑问题。以最长的一条回复为例(在ccBoy博客上有全文):

首先,把跨平台的问题归咎于用户能力。这在前面已经谈过,一般意义上,跨平台至少是指相对重新开发来说,能方便的把在某平台开发的代码在另一个平台正常运行(不用重新编译则更为理想)。那么若Mono只提供“在Linux上开发.NET”,显然不符合跨平台的要求。(若按“一种语言能在多种平台上开发就等于跨平台”的论调,最跨平台的语言是C语言)至于说管理体制云云,根本就是顾左右而言它,就好比一个医生,有病人找他治病,他发现搞不掂,于是一直在说“不是我治不好,而是你十年前就应该戒烟!”。就算真的是管理体制有问题,这跟《不要奢望.net能跨平台》有什么关系?而令我(不知道其他人如何)看着最不爽的是,楼主说“有人”,ccBoy在第一次提到时用“你们/有人公司”,下文却一直在说“你们公司”了。也就是说,ccBoy心里,把楼主代入了那个“智商无下限”的“有人”,把楼主的公司代入了“管理体制有问题”的公司。偏偏出于谦虚和谨慎,又不敢明说,还要先搞个“你们/有人”的过渡,显得有点欲盖弥彰,不伦不类了。

其次说到Consistency,我记忆犹新的是:从windows xp开始,微软完全不支持纯dos环境;不少人的饭碗VB 6.0,微软说不再支持就不再支持了。也许微软这几年是良心发现,也明白了始乱终弃的事做多了名声不好。但若说微软把Consistency放在易用性与先进性之上,至少在我个人看来,倒真如ccBoy所说,有点又要美若天仙,又要立牌坊的嫌疑了,倒不如说,微软认为Consistency体现了易用性,抵消了先进性,毕竟微软拥有对业界术语重新定义的实力。

说起这个ccBoy生造的成语,也有点意思,原文显然是“又要做婊子,又要立牌坊”,但因为“谦虚和谨慎”,ccBoy不敢明说,只好说“又要美若天仙”,可惜因此又犯了逻辑错误。凭什么说美若天仙就不能立牌坊呢?总不见得所有美女都是婊子吧。。。其实我个人觉得探讨一下这个成语本身也很有趣,“又要做婊子又要立牌坊”是让国人鄙视的,趣就在于这个“要”字:一个人,还没做婊子也还没做牌坊,但她两样都想要,这是要鄙视的。但如果“又做婊子又立牌坊”呢?没人会鄙视,相反生意会很好。道理很简单,婊子已经做了,牌坊也已经立起来了。生米反正煮成了熟饭,你是男人,你今晚要去怡红院,你会不会想:找个立了牌坊的比较实在?微软嘛,别的不敢说,牌坊看来是已经立起来了。。。我也不是要诋毁微软,但想想也就是那么回事,.net,java,归根结底是要掏客户兜里的钱,又各自要立个技术领先,架构完善的牌坊。论坛里所做的事,只是站在自己的牌坊脚下,砸对面的牌坊而已。可惜这个贴子里许多回复却搞错了目标,不砸牌坊,却砸起人来了。

ccBoy博客文章里的第3点分5小点谈了自己的观点,对于第一点,跟关于Consistency优先级一样,微软到底是不是没有把先进性放在第一位,就跟男人没讨到老婆前说事业为重一样,到底是不是,天知地知他自己知,你不知我也不知,但肯定他说了我也不会尽信,更别说由你来说了。

第二点是.net API设计模式基础教育,没发现跟跨平台的讨论有什么关系,也没有对楼主提出的类库只是对API进行简单封装的问题(而导致移植困难)作正面回答,略过不谈。

第三点是楼主说过的,原来跨平台就是windows的向下兼容,也许百年以后,微软一统天下之日,我们会对这句话有全新的理解。

第四点写得挺好,没什么逻辑上的问题,至于技术问题就不作评论了,此回复仅对逻辑上的硬伤评论。

第五点关于Consistency与功能的取舍问题的讨论也合情合理,这体现了微软的高度整合体系与开源项目的先进性之间的矛盾,问题是最后一句有点说胡话了,Java类库只要合业界标准,都会有JavaDoc,好端端的干嘛要反编译看代码来使用?反过来说,看(接口)代码就能使用,是编程风格良好的体现。如果“看代码”是看实现代码,那么“新潮Java类库”充其量就是一些开源项目而已,总不能随便找个开源项目去跟.NET的官方类库比较吧?

至于令ccBoy最不爽的“许多”问题,我个人觉得的确是有点较真了。这种文字上数量虚词的东西,充其量就是“没有”,“一个”,“几个”,“许多”这几级,而且“几个”与“许多”的界限也很模糊。作为一个论坛过客,如果看到有人说“有许多问题”就以为是指这个类库20%以上有问题,那倒是真是智商无下限了。反过来说,如果我看一个类库代码,选看10处觉得其中5处可以改进,我就会觉得这个类库有“许多”问题。至于说有10000个类要别人把他全看完然后统计多少个有问题才能用“许多”,我看是有如小孩子吵架:“你说月亮是圆的?把它摘下来量下是不是正圆”一样了。

 回复 引用   
#71楼 2007-05-11 00:56 kabell[未注册用户]
...上面的贴子本来是针对温少的贴子写的,转贴在这里。仓促间“楼主”这个词没全改过来,上文中有些“楼主”是指温少,有些“楼主”是指anders。没想到这里发了就不能修改了。。。好在根据上下文应该不难判断。。。
 回复 引用 查看   
#72楼 2007-05-26 22:00 温少      
@kabell
你太强了,居然来了个巨长回复,word文字统计结果显示,有3500多字。

你的回复很合我意,我为此打开了允许匿名评论,欢迎你补贴其上。

 回复 引用   
#73楼 2007-05-28 09:31 abc[未注册用户]
不用嘈啦,mono都已经应用了N个案例了,silverLight的跨操作系统平台mono也实现了,搞java/c++/c#的人们多点接受新事物吧,有新事物并不是就是砸你饭碗,抵制新事物似乎已经称为一种顽疾了 :(
 回复 引用 查看   
#74楼 2007-06-22 13:38 Gavin.W.Lai(赖文华)      
边看边学。
大家继续。

 回复 引用   
#75楼 2007-07-15 23:03 xinggg[未注册用户]
.net 的跨平台,据我理解,指的是跨硬件平台为主吧
 回复 引用   
#76楼 2007-08-06 09:24 lady[未注册用户]
樓上那個回復很長的,
給人的感覺是有點以前是搞中國漢語言文學的,不是搞計算機的

 回复 引用 查看   
#77楼 2007-08-07 12:14 David      
Microsoft .net Framework 是微软提出的。这个是微软自己的一个Framework。
而Mono是开源的,她是另外一个Framework 只是根据标准的CLI来架构的。

 回复 引用   
#78楼 2008-01-01 10:11 天网IT[未注册用户]
Java社区的人们过来看看,Linux社区的人们过来看看,看看微软帝国造就的迷途羔羊,看看被商业模式愚弄的可怜人儿,看看弄几本满是屏幕截图的MS书籍就自认为是高手的技术天才们,看看自认为最聪明却被一只黑手到处牵着鼻子走的孩子们...来看吧,亲爱的朋友们,来看吧,来自欧洲来自美洲的的同行们,技术的魅力竟是这么无穷。来看吧,来看吧,我是看不下去了,我的走了...
 回复 引用   
#79楼 2008-01-18 16:05 Linxi[未注册用户]
这里好热闹!像.NET教和JAVA教的坐而论道。管他谁好谁坏,用你最拿手的就好。
 回复 引用 查看   
#80楼 2008-02-09 23:29 fox23      
--引用--------------------------------------------------
Linxi: 这里好热闹!像.NET教和JAVA教的坐而论道。管他谁好谁坏,用你最拿手的就好。
--------------------------------------------------------
呵呵,比较赞同,都是工具而已,一切根据需求结合实际来

 回复 引用 查看   
#81楼 2008-08-15 01:26 JimLiu      
我觉得完全不存在不能跨平台这回事。
首先CLI本身就可以跨平台,其跨平台在于把CLI编译成不同平台的程序。
.NET类库也不是不可以跨平台,《XXX》文章所说:“除非你能够在其他平台下实现了一套Windows API”,谁说一定要实现Windows API??Windows下当然是Windows API,那为什么不可以在类Unix系统中实现基于POSIX的.NET类库?就像System.Window,System.Drawing,谁说没有MFC、没有GDI+就不能实现了?反正都是封装,管你封装的是MFC还是GTK还是QT,反正我只管调用.NET类库,具体实现与我无关。
《XXX》文当中的一些我认为是错误的地方,主要是在于对CLI和.NET在系统中定位的错误理解。CLI就像JAVA的字节码,最终编译成什么平台的程序都行。.NET就像JVM。JAVA不是神话,JAVA类库一样是对OS API的封装,只是SUN做了那么多OS的封装,而MS只做了WIN的封装而已,又不是说JAVA的类库都是OS原生支持的,那也太科幻了吧?
.NET针对不同平台重写类库照样可以所有平台通吃,只是MS没这么做,也没公司愿意这么做而已——当然,MONO就是在这么做,只是这是个相当浩大的工程罢了。
再说,C/C++也不是跨平台的啊——GCC/G++还分平台版本呢,在各个平台下的系统调用照样是大相径庭。“跨平台”本来就是挺模糊的一概念,如果你说C++是跨平台的,因为我写的Hello World源代码在各个平台下都能编译执行,那这样说是没错的。但如果我用C++写了个需要调用视频接口,调用网络的程序呢?还不是得基于OS API,这还能跨平台??
所以我认为CLI可以跨平台,CLR可以跨平台,.NET一样可以跨平台。

 回复 引用   
#82楼 2008-10-20 10:21 lcp[未注册用户]
指望mono很好的跨平台至少要等5年,根本跟不上ms的步伐,和sun不是一个级别的公司,5年一代程序员都不做程序或改行了。想跨平台的,趁早转java,薪水也高一大截,岁月不饶人
竟然有人还把.NET能够跨平台当真一回事,可谓智商无下限

这句话要好好理解啊,是可以,但别当一回事 !!

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 724770 zMzp9qsNenY=