RSS 2.0 Feed
2006-09 Entries
摘要:Anonymous Method - Lambda Expression Lambda表达式是C# 3.0的新特性之一,最简单的Lambda表达式,像这样的: Func<int,int> f = x => x + 1; 会被编译为一个方法: int f(int x){return x + 1;} 所以它和匿名方法的实现很类似,可以说是匿名方法的带类型推导的精简版本。和匿名方法一样,这是一种编译器行为;但是除了更“甜”的语法之外,C# 3.0进一步表现出了不少Functional Programming的特性,虽然还不是很“纯”(大概是受到强类型语言总思路的制约吧)。 和Lambda Expression相关的,C# 3.0还有个叫作Expression Tree的概念。这是它和Anonymous Method所不同的地方,Expression Tree不会被直接编译成一个实际的方法,而是编译成一个类似CodeDOM的语法树。比如: Expression<Func<int, bool>> exprLambda = x => (x & 1) == 0;// 请对比:Func<int, bool> nonExprLambda = x => (x & 1) == 0; 会被编译为: ParameterExpression xParam = Expression.Parameter(typeof(int), "x");Expression<Func<int, bool>> exprLambda = Expression.Lambda<Func<int, bool>>(    Expression.EQ(        Expression.BitAnd(xParam, Expression.Constant(1)),        Expression.Constant(0)),    xParam); 这个变量exprLambda是一个真正的方法,而不是一个方法指针(delegate/代理)。C# 3.0 Specification:“Following these assignments, the delegate f references a method that returns x + 1, and the expression tree e references a data structure that describes the expression x + 1.”它是方法体本身的描述,就像CodeDOM那样,通过代码描述代码,并且可以被编译、执行(不过这些动作都是透明的)。显然,和CodeDOM一样,你也可以遍历这个树,修改树结点,或者做一些别的特别的事情。这将使C#变得更加动态化(当然cost就是性能低一点点)。 *LINQ LINQ/DLINQ/XLINQ(以及YLINQ、ZLINQ等等什么LINQ)是基于Lambda语法的。不过这里也存在着大量的语法糖(OK,只要没有带来负面作用那这个词也不是贬义词),比如这句: from c in customersjoin o in orders on c.CustomerID equals......[阅读全文]

posted @ | Feedback (13) | Filed Under [ Inside CLR ]

摘要:经过数个CTP后,Visual Studio 2005 SDK的3.0版本终于release了。最值得注意的大概是其中的Domain-specific Language Tools v1.0 — 这个应该是DSL的第一个正式版本。毫无疑问,DSL是微软在软件架构领域的重要作品。 DSL不同于UML,它也不是用来和UML竞争的,也许可以把它理解为meta-UML更合适,也就是UML的UML。此外,DSL是可编译的,如同编译器可以把代码编译为机器码一样,DSL模型可以被编译为代码;而UML只能用来写设计文档(并且UML 2.0似乎依然没有精确到足够支持MDA的地步)。 下载...[阅读全文]

posted @ | Feedback (4) | Filed Under [ Patterns and Practice ]

摘要:引:要不是TechEd,还真不知道微软出了Compute Cluster Pack这么个东西。 微软在群集/分布式领域已经做了大量的工作,在Windows 2000发布时,它就已经支持了四种分布式模型,分别对应于不用的应用场合。他们是:Microsoft群集服务(MSCS)、网络负载平衡(NLB)、组件负载平衡(CLB)和Application Center 2000。详情见:http://www.microsoft.com/china/technet/archives/columns/tips/w2kclust.asp 我对分布式计算一直比较有兴趣,今年在上海TechEd听了一个讲Windows Compute Cluster Server(CCS)的Session,才知道有这么个东西存在。MSDN上已经有下载了,发布日期是2006/07/17。但不知何故微软似乎没有怎么给这个产品作市场宣传嗯。 Product Overview:http://www.microsoft.com/windowsserver2003/ccs/overview.mspx 我在TechEd会后和微软的工作人员(来自开发团队)小聊了一会儿,得知这个产品最佳的应用领域在于那些“Task的数量很少,但每个Task都需要很长时间计算”的问题,比如Pi的计算。实际上这个产品是为科学计算准备的,比如气象模拟、地质勘探等领域。 CCS基于MPI 2.0标准,所以它可以和其他基于MPI 2.0栈的服务器协同工作。CCS目前可以安装在Windows Server 2003/R2 64bit版本上。32-bit对于高性能计算(HPC)可能确实字长太短了,所以微软的方案也根本没有打算支持。 这里有个从微软网站copy过来的table,我在最右边加了一列,来描述CCS和它们的不同之处: MSCS NLB CLB Application Center CCS 用途 应用程序故障恢复与故障返回 IP通信负载平衡 COM+对象负载平衡 创建并管理Web区 高性能计算(High Performance Computing/HPC) 优势 可用性与可管理能力 可用性与可伸缩性 可用性与可伸缩性 可用性、可伸缩性与可管理能力 可伸缩性与可管理能力 每个群集中的最大节点数量 2个(针对Win2k AS)或4个(针对Datacenter) 32 16 16 无限制 群集类型 共享存储机制 无共享资源 无共享资源 无共享资源 N/A 状态信息 有状态 无状态(如果需要的话,可以支持有状态连接) 无状态 无状态 N/A 是否需要对服务器应用程序进行修改 需要 不需要 不需要 不需要 需要(使用MPI 2.0库,只支持Fortran77、Fortran90和C语言) 是否需要使用专用硬件设备 需要 不需要 不需要 不需要 64-bit CPU from Intel or AMD ... 是否独立 是 是 否(需要使用AppCenter) 是 否(需要使用Compute Cluster Pack) 分布式计算可以让你的程序或者服务拥有更好的可靠性,或更高的可伸缩性。CCS是为性能而生的产品,它可以以高度scalable的方式增强群集的性能。微软在多CPU/多核方面已经提供了对了SMP的支持(通过VC2005的OpenMP 2.0支持 — 同时支持Managed和Unmanaged代码!),在多机并行运算方面又实现了MPI 2.0,它的计算机群集方面的产品线应该已经相当完善了。 以上信息来自网上资料汇总(大部分来自官方),有不对之处请指正。...[阅读全文]

posted @ | Feedback (19) | Filed Under [ Distributed Application ]

摘要:电信的官方流氓软件 周六听TechEd的一个session时,把手机设置成了静音,结果课间发现了个未接电话,看号码像小灵通用户,不知道是谁,也没有留言,我就给打了回去。阿哦,子曰是电信的工作人员,核对了我住处地址后,说: “您家里用ADSL拨号上网的对吧,电信需要升级一下您的客户端拨号软件。” 我说我直接用Windows拨号工具就行了,免了。结果他说: “是的,但是我们现在要给这个软件进行升级。” 我晕倒,我的Windows Update每天都开着的,怎么就没看到有这个升级,而且要工作人员上门升级?正郁闷,电话里没多想,实际上家里有个无线路由器,是路由直接拨号的,所以他不管给我装什么软件都根本没用。于是告诉了他。他回: “哦,你装了路由的啊,那算了。” 我倒塌了,算了?真的就这么算了吗?电信打来的电话,一般都是因为有重要事情的 — 比如欠费了。真是莫名其妙。 我是觉得不太对劲,结果今天在网上发现了这个帖子:终极流氓软件出现了?关注电信星空极速 阿门,不想引用其中的内容了,有兴趣的自己点开链接来看。 相关链接: 新华网:报料:电信即将可能对用户强制安装"星空极速"搜狐IT:电信转型 推“星空极速”意在占领用户端桌面cnBeta.COM:中国电信新闻主题 暂时的解决办法 据我所知“星空急速”还只有Windows版本,所以你在电话里说“我是Macintosh用户”就行了(或者Linux/Unix等等)。也可以说你买了无线路由器,路由直接拨号的。不过不能说是普通路由,因为那个不是家用设备。。。电信没准会找你麻烦。或者说你在外头出差,等等。。。反正总而言之,目前不装“星空急速”还是可以上网,但你要是装了就卸不掉了(不是说软件卸不掉,而是密码将永远不再被你掌握,你必须通过这个软件拨号。具体缘由看cnBeta的帖子)。 关于密码,目前倒还不是绝对没办法,有人居然给做了个算号器。。。因为算法很简单,就是简单的MD5 Hash了一下而已。Hash数据来源用户名、密码、MAC地址。那里面谈到MAC地址获取问题,这实在是有意思,100%可以确定的是Windows内置的大量的虚拟网卡都有各自的MAC的,“星空急速”是不是搞错了(比如就获取了枚举得到的第一个网卡的MAC),导致那位仁兄的郁闷。此外,这个方案绝对不会长久,电信那边只要稍微动一下算法,你就没辙了。比如先MD5再SHA512再SHA256,你怎么知道他们会怎么整?现在的算法完全是猜出来的。 下一步怎么办 现在不装“星空急速”还能上网,是因为电信的这个计划还在过渡期;但以后出什么新招,谁也不知道。反正假如电信打算“封掉所有没装星空急速的客户端”,在技术上是可行的;在法律上,也是一切皆有可能。 一切皆有可能 既然他们是你的ISP提供商,那从技术角度来说,想玩什么都可以。何况又不是没玩过,比如上次google.com被解析到“买卖网”的不了了之的案子,实在是不可思议。...[阅读全文]

posted @ | Feedback (7) |