随笔 - 61  文章 - 2 评论 - 1026 trackbacks - 21

我的小工具
.NET正则表达式库

广告


北京狼烟网络科技有限公司
北京市朝阳区曙光西里甲6号 时间国际A座1505&msg=2007101111175778000" frameBorder=0 scrolling=no>
要当爸爸了 6-27 14:20

与我联系

常用链接

留言簿(5)

我参与的团队

我的标签

随笔分类

随笔档案

文章档案

相册

技术社区

搜索

  •  

积分与排名

  • 积分 - 171289
  • 排名 - 177

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

今天一上班就看到这样一篇文章,感觉不爽。且不说有没有什么实质的内容,但是作者那不可一世的口气,嘿嘿,我就想抽他。   (<--于本文发布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 on 2007-04-24 09:52 Anders Liu 阅读(18851) 评论(80)  编辑 收藏

FeedBack:
#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.

  回复  引用  查看    
园子里最近火气好大。。。
  回复  引用  查看    
#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      
大家冷静冷静,不要再发生无谓的争论了:)
  回复  引用  查看    
.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的素质的确比较差,而且技术水平也很一般。听说大部分是通过关系得到,估计楼主也是吧。可惜我们公司和微软关系不够好,否则也可以捞几个回来,吓唬人。
  回复  引用  查看    
“微软从来都是支持标准,但把标准中可扩展的部分搞成特定于平台的”
--------------------------------------------------------------
这句欠妥,想当初,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就是不能跨(一般意义上的)平台,请你自己先对技术进行评估吧。。。

再看了一下原贴的回复,一笑之