Spiga

[置顶]Q & A专用文章

2009-12-21 18:18 by Jeffrey Zhao, 1477 visits, 网摘, 收藏, 编辑
摘要:有不少朋友反映原来的Q & A专用文章时不时无法显示评论,与博客园联系之后得知这是评论太多,导致容易超时。因此,我现在重新准备一篇文章,如果您有什么问题我们不妨一起讨论一下。当然,您也可以发Email给我,但是尽量不要使用右下方的Web IM和我联系。:)Hello World! 阅读全文

总结:史上第一混乱、程序员的爱情、Nobody & Sorry Sorry

2010-02-07 21:19 by Jeffrey Zhao, 4302 visits, 网摘, 收藏, 编辑
摘要:星期六是我的休息日,这天一般我不安排自己做什么和工作有关的事情,一般就是去看看电影,出去逛逛,或者在家上上网吹吹牛。昨天总结了一部分由推特上的讨论,现在继续剩下的一部分。不过,这次的内容可能就要和技术或产业略远一些了,其中大部分是我自己的一些体会和感想。现在我打算谈三个东西,一是《史上第一混乱》这部话剧,《程序员的爱情》这本小说,以及Nobody和Sorry Sorry(您不知道这是啥?你成奥特曼啦!)。 阅读全文

总结:0 bug事件、交大ACM夺冠

2010-02-07 03:51 by Jeffrey Zhao, 7711 visits, 网摘, 收藏, 编辑
摘要:如果您还没有上推特(或是还没有想到办法上),那您失去的不光是一个风靡世界的网络应用,您同时还失去了一个优秀的信息获取平台及讨论环境。目前国内大部分靠谱的技术专家都在推特上有帐号,您几乎不会错失任何有价值的信息,更可以参与一些有价值讨论。周六是休息日,因此也在推特上和大家聊得不亦乐乎。不过推特的一个缺陷可能便是难以留住有价值的信息,它们会随着时间推移渐渐消失,因此还是及时记录一下吧。 阅读全文

李笑来激起千层浪,赵姐夫力拒众强敌

2010-02-03 00:49 by Jeffrey Zhao, 7539 visits, 网摘, 收藏, 编辑
摘要:昨天晚上,李笑来(@xiaolai)老师的无心之语却引起了推特上一次前后长达1个多小时的讨论——当时他似乎只是随手发了一句“Apple告诉我们的铁律是:表面功夫一定要做足”便不见了踪影,但是这句话立即引起了众果粉的共鸣。此后,我(@jeffz_cn)的一句评论又引起了众人对微软开发平台的批判之声。在这次讨论中,几乎只有我孤军奋战为.NET平台进行辩解。因此事后有人给出一副对联为此次争论作出总结:李笑来激起千层浪,赵姐夫力拒众强敌。 阅读全文

从今日起正式加入水果党

2010-02-02 00:08 by Jeffrey Zhao, 4153 visits, 网摘, 收藏, 编辑
摘要:想来我现在的笔记本也用了将近3年,虽然至今没有出现过任何问题,但更新换代似乎也不是件让人无法接受的事情——再加上老爸正好也需要一台笔记本,于是我想,不如就乘此机会升一下级吧。不过其实我本没有打算那么着急,只是两天前忽然出现了一个千载难逢的机会,一台十分便宜的MBP放在我面前,于是我当机立断,即刻入手。因此我在此庄严宣布:从今日起,我正式加入水果党。 阅读全文

光有逻辑也是万万不能的

2010-02-01 00:14 by Jeffrey Zhao, 6200 visits, 网摘, 收藏, 编辑
摘要:之前我多次强调“逻辑”在讨论问题时的重要性,我也多次表示说,如果大家都运用合适的逻辑思维来讨论问题,那么论坛上8成吵架可以避免。现在我也想再次探讨一下这个话题,只不过这次我想反过来说:光有逻辑也是万万不能的。除了“逻辑”这个东西之外,讨论问题时还有很多其他东西值得注意。 阅读全文

数组排序方法的性能比较(5):对象大小与排序性能

2010-01-29 00:09 by Jeffrey Zhao, 3153 visits, 网摘, 收藏, 编辑
摘要:在我公开测试结果之后,有朋友也进行了其他测试。在测试中我使用的是int数组,经过分析之后我们了解到Array.Sort对于int数组有特殊的优化。于是,某些朋友使用了一些引用类型的数组进行排序,得到Array.Sort方法的性能落后于LINQ排序——虽然由于测试方式的问题,这个结果和结论都不太妥当。不过在讨论的过程中,我们都意识到了一个问题:在其他条件不变的情况下,引用类型的字段越多,Array.Sort方法所需时间就越久。这次我们就来讨论一下这个问题。 阅读全文

数组排序方法的性能比较(4):LINQ方式的Array排序

2010-01-28 00:06 by Jeffrey Zhao, 3276 visits, 网摘, 收藏, 编辑
摘要:经过前两篇文章的分析,我们已经了解了Array.Sort与LINQ排序两种实现方式的差别:前者直接比较两个元素的大小,而后者先选出每个元素的“排序依据”再进行比较。因此,虽然后者需要相对较多的“周边工作”,但由于每次比较时都可以仅仅使用高效的基础类型(如int),因此从整体来看,两者的性能高低难以辨别。不过,既然我们已经了解LINQ排序“高效”的原因,又能否将其利用在数组排序上呢?程序是人写的,此类问题大都有肯定的答案。那么我们现在就来实现一下。 阅读全文

数组排序方法的性能比较(3):LINQ排序实现分析

2010-01-27 00:02 by Jeffrey Zhao, 3996 visits, 网摘, 收藏, 编辑
摘要:上次我们分析了Array.Sort方法的实现方式,并了解到类库会为一些特例而使用高性能的排序方式——int数组便是这样一例,因此从测试结果上来看其性能特别高。不过从数据上看,即便是在普通的情况下,Array.Sort的性能也比LINQ排序要高。不过也有朋友从测试中得出的结论正好相反,这又是为什么呢?那么现在,我们再来分析一下LINQ排序的实现方式吧,希望这样可以了解到两者性能差别的秘密。 阅读全文

人肉反编译使用yield关键字的方法

2010-01-26 00:06 by Jeffrey Zhao, 5343 visits, 网摘, 收藏, 编辑
摘要:我认为这是一个真命题:“没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员”。.NET Reflector强大的地方就在于可以把IL代码反编译成可读性颇高的高级语言代码,并且能够支持相当多的“模式”,根据这些模式它可以在一定程度上把某些语法糖给还原,甚至可以支持简单的Lambda表达式和LINQ。只可惜,.NET Reflector还是无法做到极致,某些情况下生成的代码还是无法还原到易于理解——yield关键字便是这样一个典型的情况。不过还行,对于不复杂的逻辑,我们可以通过人肉来“整理”个大概。 阅读全文

昨日搬至办公室的书籍

2010-01-25 12:00 by Jeffrey Zhao, 4978 visits, 网摘, 收藏, 编辑
摘要:由于家里地方小,总有一部分书籍需要跟着我辗转至各公司。其中一些公司只能让我放抽屉(地方小)甚至地板上,而有一些公司就能让我把书都摞桌子上。昨天下午我特地来了一次办公室搬运书籍。灭霍霍,可真是一个体力活。 阅读全文

土人眼中的差距:That’s Why I Chose Yale

2010-01-24 22:10 by Jeffrey Zhao, 6642 visits, 网摘, 收藏, 编辑
摘要:上周五中午我看了一个视频:That's Why I Chose Yale(我选择耶鲁大学的原因),是由耶鲁大学的学生自导自演自己拍摄、剪辑的短片。这部短片直接就把我看哭了——好吧,还差一点点,但是其中的震撼是难以描绘的,建议您一定要自己体会一下。震撼源于各方面的差距,同样是大学,同样是大学生,为什么差距就那么大呢?而且,这几乎已经是我无法去弥补的差距了,因此遗憾,因此震撼。 阅读全文

数组排序方法的性能比较(2):Array.Sort<T>实现分析

2010-01-22 00:06 by Jeffrey Zhao, 4400 visits, 网摘, 收藏, 编辑
摘要:昨天我们比较了Array.Sort方法与LINQ排序的性能,知道了LINQ排序的性能以较大幅度落后于Array.Sort方法。而对于Array.Sort来说,性能最高的是其中使用Comparer.Default作为比较器的重载方法。在前文的末尾我们做出了推测:由于排序算法已经近乎一个标准了(快速排序),因此从算法角度来说,Array.Sort方法和LINQ排序上不应该有那么大的差距,因此造成两者性能差异的原因,应该是具体实现方式上的问题。 阅读全文

数组排序方法的性能比较(1):注意事项及试验

2010-01-21 00:11 by Jeffrey Zhao, 4855 visits, 网摘, 收藏, 编辑
摘要:昨天有朋友写了一篇文章,其中比较了List的Sort方法与LINQ中排序方法的性能,而最终得到的结果是“LINQ排序方法性能高于List.Sort方法”。这个结果不禁让我很疑惑。因为List.Sort方法是改变容器内部元素的顺序,而LINQ排序后得到的是一个新的序列。假如两个排序方法的算法完全一致,LINQ排序也比对方多出元素复制的开销,为什么性能反而会高?如果LINQ排序的算法/实现更为优秀,那为什么.NET Fx不将List.Sort也一并优化一下呢?于是今天我也对这个问题进行了简单的试验。 阅读全文

今日入职盛大创新院

2010-01-19 19:07 by Jeffrey Zhao, 6753 visits, 网摘, 收藏, 编辑
摘要:在去年年底的总结中,我谈到放弃所谓的创业,想要加入一家国内的大公司安心发展技术,正所谓“打怪升级”。不过,其实在写完文章不久之后(大约数个小时),我就收到了盛大创新院给我的offer。在家休息了整整两周时间后,今天我终于入职了,因此我现在终于有了个颇为响亮的头衔。好吧,当然这不是关键,当然这终究让我梦想中“搞研究”的心理小小地满足了一把。 阅读全文

浅谈代码的执行效率(4):汇编优化

2010-01-14 00:08 by Jeffrey Zhao, 5303 visits, 网摘, 收藏, 编辑
摘要:终于谈到这个话题了,首先声明我不是汇编优化的高手,甚至于我知道的所有关于汇编优化的内容,仅仅来自于学校的课程、书本及当年做过的一些简单练习。换句话说,我了解的东西只能算是一些原则,甚至也有一些“陈旧”了——不过我想既然是一些原则性的东西,还是能够用它来做一定程度的判断。至少我认为,我在博客园里看到的许多关于“汇编优化”也好,“内嵌汇编”也罢的说法,经常是有些问题的。 阅读全文

京沪两地Scrum实战营(免费,上海1月23日,北京1月30日)

2010-01-13 18:26 by Jeffrey Zhao, 3565 visits, 网摘, 收藏, 编辑
摘要:种种迹象表明,Scrum已经在很多公司得到实施。同时,不争的事实是很多开发人员和团队在实施过程中也遇到了各种各样的问题,包括对Scrum方法本身的认识、辅助实施工具的使用等等。有关Scrum应用和实施的各种问题也在InfoQ网站和其他网站上被广泛讨论和争论。等等这些,组成了我们要举办这次Scrum实战营的基础。我们希望通过这次活动帮助正在进行敏捷实施、Scrum实施的团队更加清晰地理解Scrum,并将其他人的有效经验借鉴到自己的团队中来。本次活动由InfoQ中文站、雅各布森软件(北京)有限公司、微软中国有限公司共同举办,我们期待您的参与! 阅读全文

浅谈代码的执行效率(3):缓存与局部性

2010-01-12 00:03 by Jeffrey Zhao, 6017 visits, 网摘, 收藏, 编辑
摘要:在前两篇文章里,我们讨论了程序性能的两个方面,一是算法(广义的算法,即解决问题的方法),二是编译器。通过这两个方面,我想表达的意思是,一段程序的执行效率,是很难从表面现象得出结论的,至少从一些简单的层面,如代码的长度是几乎难以说明任何问题——因此一定要进行Profiling才能做到有效的优化。而现在,我们假设两段程序算法基本相同,编译器也只是进行简单的“翻译”,那么……我们能从“表面”看出性能高下吗? 阅读全文

按月统计博客园单个用户的发文数量

2010-01-11 00:07 by Jeffrey Zhao, 5130 visits, 网摘, 收藏, 编辑
摘要:这几天在家闲着,便试着写一些小程序。之前有朋友问到“F#能不能写Web”,于是我也就打算这么一试。虽然我能肯定,用F#写Web应用程序不会是问题,不过倒真还没有做过这方面的尝试。我想,如果用F#写Web应用程序,那么它很重要的一点,应该是利用其在异步编程方面的强大特性。最后我决定,使用F#编写一个按月统计博客园单个用户发文数量的简单服务。尝试的结果是——还有些问题没有解决。不管怎么样,我先把其主体逻辑描述一下吧。 阅读全文

浅谈代码的执行效率(2):编译器的威力

2010-01-08 00:06 by Jeffrey Zhao, 6042 visits, 网摘, 收藏, 编辑
摘要:在上一篇文章中,我主要表达了这样一个观点:影响程序效率的关键之一是算法,而算法的选择与优化,和是否多一个赋值少一个判断的关系不大。关于算法的选择,我谈到其理论上的复杂度,并不直接反映出效率。因为在实际运用时,数据的规模,形式等等都会涉及到算法的实际效用。一个时间复杂度低的算法并不代表任何情况下的效率都高。这是“实际”和“理论”的区别之一。现在我打算来谈一下另一个比较“实际”的东西:编译器对于程序效率的影响。 阅读全文

浅谈代码的执行效率(1):算法是关键

2010-01-07 17:14 by Jeffrey Zhao, 6759 visits, 网摘, 收藏, 编辑
摘要:前一段时间在博客园里看到这样一篇文章,那位兄弟谈到程序效率的关键是“简短”。他说,“程序越简短,其可执行代码就越少,就越有效率”,而在编写程序的时候,“要尽量改进我们的算法,而改进算法中最重要的一条,就是减少语句”。这句话从表面上似乎正确,但我认为性能这问题不能用“简短”这种方式去思考,否则会进入一些误区。我整理了一下思路,希望可以从几个方面把详细谈一下这个问题。首先我想说的是:“简短”不是关键,“算法”更加重要。 阅读全文

AV不识爱卖克,便看三弟也枉然

2010-01-07 10:39 by Jeffrey Zhao, 5704 visits, 网摘, 收藏, 编辑
摘要:阿凡达,已然无人不知无人不晓。江湖流传:“AV不识爱卖克,就看三弟也枉然”。此处AV自然指的就是Avatar,这句话意思是说,如果你没有看iMax的阿凡达,就算是看了3D版也等于没看过。因此,对于全国只有11块的iMax屏幕,大家自然就是疯抢了。而上海这边,只有位于人民广场的和平影都有这条件,试想全上海有这想法的人都涌到同一个地方,抢这个每日一千多(350 * 4场)人次的机会……是什么景象。 阅读全文

一次批量修改博客文章的经验(下):操作过程

2010-01-05 19:40 by Jeffrey Zhao, 3746 visits, 网摘, 收藏, 编辑
摘要:上一篇文章中我们进行了一些预备工作,主要是了解了该如何使用MetaWeblog API读取和修改博客园的文章——包括同步和异步两种调用方式。此外,由于F#在异步调用方面的优势,我决定使用F#来完成批量修改文章任务。这个任务并不困难,但很“危险”,一旦出错可能之前的文章就无法恢复了。因此,我把这个任务拆成多个步骤,每个步骤都会将数据保存在硬盘上。由此,即便出错,还是有挽回的余地。 阅读全文

一次批量修改博客文章的经验(上):准备工作

2010-01-04 18:57 by Jeffrey Zhao, 4601 visits, 网摘, 收藏, 编辑
摘要:这几天赋闲在家,除了看书和还债(如RSS订阅),终于把一直以来想做却拖着的事情完成了:批量去除博客文章段首的空格。这个过程并不难,只需要按部就班地去做就行了,一切资料都可以在互联网上搜索到。不过我还是打算记录一下,也是为了今后再做类似工作时有个参考,少走一些弯路。 阅读全文

F#中的XML序列化

2010-01-03 21:24 by Jeffrey Zhao, 4301 visits, 网摘, 收藏, 编辑
摘要:这两天在用F#写一小段代码,需要把一些对象存到外部文件中去。这个功能很容易,因为.NET本身就内置了序列化功能。方便起见,我打算将这个对象序列化成XML而不是二进制数据流。这意味着我需要使用XmlSerializer而不是BinaryFormatter。这本应没有问题,但是在使用时候还是发生了一些小插曲。 阅读全文

2009年末,多少进行一些总结和展望吧

2009-12-31 00:11 by Jeffrey Zhao, 9151 visits, 网摘, 收藏, 编辑
摘要:时间就这样悄无声息地到了2009年的最后一天,回首我这过去的一整年,可以用一句废话来总结,那就是“既有遗憾,也有收获”。不管怎么样,多少也应该总结一下吧——尤其是此时此刻,对我来说可谓是一个新的起点。自然,在技术博客上,终究还是围绕着“事业”谈谈吧。 阅读全文

使用Fiddler辅助观看InfoQ的视频

2009-12-29 12:04 by Jeffrey Zhao, 4793 visits, 网摘, 收藏, 编辑
摘要:InfoQ是一个好地方,而我认为其中最有价值的资源,便是其中的演讲视频。InfoQ在这方面有个特点:在演讲视频下方提供了清晰的幻灯片,而在播放的同时,还会根据进度进行切换。这观看体验自然比单纯的演讲录像要高出许多。可惜的是,时不时有朋友会向我反馈说,InfoQ实在是太慢,几乎无法流畅地观看视频。由于一时半会儿InfoQ也不会在中国放CDN,因此视频加载速度这问题……几乎无法解决。还好,如果我们退而求其次,至少可以使用Fiddler等工具来“缓解”这个问题。 阅读全文

计算机(及其他)书籍赠送

2009-12-28 14:45 by Jeffrey Zhao, 8172 visits, 网摘, 收藏, 编辑
摘要:由于即将转移工作阵地,因此要把所有的书都整理清点一遍。整理过程中发现有些书……还是不要让它占用宝贵的存储资源比较好,于是打算处理掉。其中一部分书是别人送的,另一部分是有年头的,还有一部分是一时兴起买的。它们大都价值不大,因此我是“赠送”而不是卖掉。当然还有一些书也并非如此不堪,只不过我不需要而已——这类书也麻烦兄弟们写写书评罢。:) 阅读全文

五十种语言的“圣诞快乐”(下):F#实现

2009-12-28 11:18 by Jeffrey Zhao, 4960 visits, 网摘, 收藏, 编辑
摘要:不知道大家的圣诞节过的如何?有没有玩点啥有趣的东西?上次的文章中我们主要分析了使用Google Translate进行文字翻译的方式,并使用C#写了一个简单的的翻译程序,效果良好。不过,在平时开发过程中,对于此类问题我常用F#来解决这样的问题。那么使用F#来实现此类任务有什么优势吗?不错,我们现在便来看看这个问题。 阅读全文

推荐内容索引

2009-12-27 17:30 by Jeffrey Zhao, 6394 visits, 网摘, 收藏, 编辑
摘要:写了不少文章,其中有不少比较用心的系列。积累了那么久,我在博客上也已经讨论过了各种问题。许多人提问的时候,我会说我写过某某文章,可以搜一下,但得到的反馈经常是找不到。其中一个原因是那些弟兄还不太会用搜索引擎——或是懒,但也有可能是以前的文章的确是“沉没”了。无论是博客园还是独立博客,对于内容的组织和管理还做得不够好,所以在这方面有所突破之前,还是通过手动整理的方式来保留重点内容吧。 阅读全文

五十种语言的“圣诞快乐”(上):分析与实现

2009-12-25 11:17 by Jeffrey Zhao, 4976 visits, 网摘, 收藏, 编辑
摘要:您知道“圣诞快乐”在不同语言中的写法吗?Google Translate知道。不过Google Translate好像并不希望我们可以直接获得这些内容——但这并不能阻止我们这些光荣的程序员来获得这些信息。 阅读全文

老赵谈IL(4):什么时候应该学IL,该怎么学IL

2009-12-25 00:08 by Jeffrey Zhao, 6286 visits, 网摘, 收藏, 编辑
摘要:又是一个拖了半年的系列,可能是前几篇主要以事实为准,举例子的文章总是比较容易写的,因此十分顺畅。而最后一篇打算做一个总结,以讲道理为主——却发现该将的似乎都已经讲完了。不过做事要有始有终,该完成的也必须要完成。那么现在就来谈谈我的一些个人看法:什么时候应该学IL,以及应该怎么学IL。 阅读全文

重谈字符串连接性能(下):分析优化

2009-12-23 14:03 by Jeffrey Zhao, 4026 visits, 网摘, 收藏, 编辑
摘要:经过之间的性能比较,我们得知StringBuilder的性能并非时时最优,再经过实现分析,我们大致了解了StringBuilder的实现方式。虽然在此之前,大家也基本已经了解StringBuilder的实现原理,也有不少朋友指出了它性能缺陷的原因。不过“严谨”起见,寻找性能问题的方式应该是进行Profiling,然后找出性能关键再进行优化——而不是纯粹进行“阅读”这种静态分析方式。 阅读全文

使用Profiler分析程序性能

2009-12-22 11:37 by Jeffrey Zhao, 5380 visits, 网摘, 收藏, 编辑
摘要:三个星期之前我向大家求助说,VS的Profiler分析程序性能时无法跟踪框架内部的方法调用。当时我做了不少尝试,例如下载并配置了.NET Framework的symbol文件和源代码,还尝试使用了ANTS Profiler和CLR Profiler等其他工具,最终还是没有成功。Ivony...老大在评论中告诉我说Sampling方式可以获得比Instrumentation更多的信息,不过我觉得Sampling得到的结果并不像我的目标那样干净,因此还是在寻找Instrumentation的方式。不过最终耗费了一个GTSC的支持点数,才被告知——的确应该使用Sampling。 阅读全文

在.NET平台上使用Scala语言(下):分析

2009-12-21 00:30 by Jeffrey Zhao, 3487 visits, 网摘, 收藏, 编辑
摘要:上一篇文章里我们简单尝试了在Scala里编写.NET应用程序。这个过程并不困难,因为似乎Scala官方已经对此已经有较好的支持了。我们要做的只是“获取工具”,“编译成IL”,最后再“生成程序集”即可。那么,这些工具究竟做了些什么,Scala究竟又是如何支持.NET平台的,它的可用性究竟如何,我们还需要进一步的分析及尝试。 阅读全文

在.NET平台上使用Scala语言(上):初尝

2009-12-18 12:47 by Jeffrey Zhao, 4989 visits, 网摘, 收藏, 编辑
摘要:Scala是Java平台上的一门新兴起的语言,我也不止一次在博客上提到它。我非常希望它可以取代Java这种劣质语言,让Java平台的生产力上一个台阶。事实上,Scala从一开始——或者说“很早”就对生成.NET程序集提供了支持。只可惜,毕竟还是Java平台的东西,.NET方面的资源少之又少,不过我们还是可以进行一番尝试的。 阅读全文

定制Paste from Visual Studio插件(下)

2009-12-16 14:27 by Jeffrey Zhao, 3891 visits, 网摘, 收藏, 编辑
摘要:上一篇文章里我们进行了简单的实验,验证了通过修改IL生成新插件的可行性,不过我们要做的事情还有很多,因为我们实际要做的事情其实是……插入行号。这需要我们补充新的逻辑,并且对CreateContent进行修改。那么我们又该如何写这大段大段的IL呢?没关系,其实这些事情不懂IL也可以做。 阅读全文

定制Paste from Visual Studio插件(上)

2009-12-16 10:56 by Jeffrey Zhao, 3675 visits, 网摘, 收藏, 编辑
摘要:我在上一篇文章里谈了我常用Paste from Visual Studio(下文称VSPaste)的插件,这大大方便了我写博客时贴代码的工作。不过今天早上有朋友在我博客后面留言说:“VSPaste没法显示行号,不知大家有没有办法解决?”其实这点很容易,写个小程序,把VSPaste生成的HTML再进行一番处理不就可以了嘛。不过最方便的做法还是让VSPaste直接生成带行号的代码块,不是吗?那么,我们就来自己动手丰衣足食解决这个问题吧。 阅读全文

浅谈代码着色(下):服务器端着色

2009-12-15 15:38 by Jeffrey Zhao, 4688 visits, 网摘, 收藏, 编辑
摘要:上篇文章谈了客户端着色,而现在自然就来讨论服务器端着色了。先下个定义:我在这里谈的“服务器端着色”,是指直接从服务器端输出着色效果的做法(与“客户端着色时”输出纯代码文本相对)。至于这个着色效果是如何获得的,例如是由另一个用户直接提供的,还是用户提供纯代码文本,而用服务器端逻辑“着色”,在这里就统称为“服务器端”着色了。不过接下去的讨论,我们还是会作一些区分。 阅读全文

浅谈代码着色(上):客户端着色

2009-12-14 19:53 by Jeffrey Zhao, 4888 visits, 网摘, 收藏, 编辑
摘要:作为程序员,写文章时总免不了插入代码,而对代码进行着色几乎已经成为一个基础,一个事实标准。代码着色的确可以大大加强代码的可读性,因此即便是再不待见IDE的朋友,代码着色永远是必不可少的。不过在网页中进行代码着色的方式有很多,现在我们就来对比一下。记得之前也有朋友写过,但我总觉得不够完整,于是还是自己写一下吧。我们先来看客户端的着色方式。 阅读全文

总结一下F#中运算符的定义规则

2009-12-14 01:46 by Jeffrey Zhao, 3526 visits, 网摘, 收藏, 编辑
摘要:F#允许开发人员定义或重载各类运算符,合理利用这一规则可以让编程变得方便,让代码更容易阅读。例如,在使用F#的MailboxProcessor的时候,我会习惯于定义一个运算符来代替显式的Post操作。不过,F#的运算符定义规则较为复杂,要搞清楚编译器的整体处理方式着实花费了一番功夫。比较奇怪的是,即便是《Expert F#》中对于这个话题也没有详细的叙述——更夸张的是MSDN的文档也相当马虎,甚至有代码缺失以及与试验不符情况(因为还没有正式发布?)。于是我连看带试,最终打算总结一番,作为备忘的同时也算是补充互联网资源。 阅读全文