Hello World
Spiga

分类:语言编程

挖坟鞭尸:当年Sun公司的白皮书《About Microsoft “Delegates”》

2011-11-09 01:07 by 老赵, 6828 visits
摘要:这是一桩当年的Sun公司与Java的旧事,还要追溯到C#还没出现,微软还在搞J++的时代。这篇著名的白皮书便是《About Microsoft “Delegates”》,其中列出了Sun眼中的Delegate的多个缺点。最后,在白皮书里信誓旦旦地写到:“Bound Method Reference并不是语言发展的正确道路”。我的感觉是:不谈Java语言设计者的水平如何,至少这篇白皮书的作者,在语言设计的能力或品味上几乎落后了Anders Hejlsberg十年。从我之前翻译过的一篇文章来看,Anders一直扮演着指引语言发展方向的作用,这也是为什么C#在这十年的发展能比Java要健康得多的主要原因之一。 阅读全文

谈谈年度最佳代码“不管你们信不信,反正我信了”

2011-08-05 23:15 by 老赵, 21665 visits
摘要:最近有段十分流行的代码,是从江湖传闻“身怀八蛋”的铁道部发言人王勇平同志的一句名言:“不管你们信不信,反正我信了……这是生命的奇迹……它就是发生了”所引申出来的。这段代码虽然只是在调侃,但是围绕这段代码也产生了一些讨论(如代码风格,编程规范等等),在此顺手记录一下,就当无聊罢。 阅读全文

匿名类型的硬伤:围绕this的成员捕获策略

2011-06-15 17:27 by 老赵, 7507 visits
摘要:时不时听到一些C#程序员说,希望在C#里出现像Java匿名类一样的特性。以前我也觉得Java里的匿名类是个不错的特性,C#应该吸取进来。不过前段时间我仔细地理解了Java语言规范中关于内部类、匿名类的部分之后,一下子就被恶心到了。恶心过后,我忽然也意识到有些问题的确也是硬伤,也不能指责Java设计者的“品位”。例如,现在我想要谈的关于匿名类中this使用的问题——如果C#没法漂亮地实现这个特性,我宁愿它继续保持现状。 阅读全文

Jscex使用BSD授权协议正式发布

2011-04-22 00:15 by 老赵, 1887 visits
摘要:这次打算把Jscex好好搞一下了,其实很少会有技术方面的障碍能“轮到”我们去突破,但我觉得Jscex的确有机会,HTML 5、Node.js各个都是红火的玩意儿。前几天我花了两个晚上用半生不熟的中式英语写了一篇自认为比较完整的说明文字放到了Github上的项目首页上,没想到几个小时后便收到了StratifiedJS(一个与Jscex目标有些类似的项目)作者的邮件,提到了一些关于StratifiedJS的事情。我向他咨询了StratifiedJS的某些细节问题,也向他简单介绍了Jscex的实现原理。如今Jscex已经使用BSD授权协议正式发布(中文站也会在近期推出),再进行一些细节上的优化便要开始作推广了。 阅读全文

Jscex项目现状:UglifyJS解析器及AOT编译器

2011-04-15 02:04 by 老赵, 2790 visits
摘要:Jscex项目是我为了简化JavaScript异步的一个类库,支持任意JavaScript(ECMASCript 3)引擎。Jscex小巧而强大,可以极大地改善前端的AJAX及动画等场景的编程体验,同样也可以用在node.js进行服务器开发。从产生Jscex的想法到现在也有几个月的时间了,也一直想设法进行推广。在思考过程也发现了它在实际生产中可能会遇到的问题,于是前两个星期的主要工作,便是针对这些问题进行优化。首先我将Jscex的JavaScript分析器从Narcissus换成了UglifyJS,并基于node.js开发了一个简单的AOT编译器。接下来我也打算写个稍微详细一点的介绍,然后在国外社区看看反响如何。 阅读全文

使用Jscex实现排序算法动画

2011-03-10 23:35 by 老赵, 3760 visits
摘要:用动画来观察排序算法是一件很酷的事情,例如有人便为各种排序算法提供了动画效果。只可惜这些效果都是实现准备好的gif图片,并非由代码写成。在大部分平台上编写这样的程序并没有太大困难,只要在绘制出图形之后短暂地阻塞线程就行了。可惜,在JavaScript中我们只能“一蹴而就”,要暂停的话,只能使用setTimeout进行回调了。不过,这也正是Jscex的用武之地,用Jscex编写的代码需要“暂停”,只需要简单地调用sleep异步方法,一切都很直接。 阅读全文

我在面试.NET/C#程序员时会提出的问题

2011-03-03 15:38 by 老赵, 43122 visits
摘要:说起来我也面试过相当数量的.NET(包括C#,后文不重复)程序员了,有的通过电话,有的面谈。后来发现,其实提的问题来来回回也就那么几个。这些问题有的已经有十年历史了,至少也有三年。我想对于一个“不错”的.NET程序员来说,在简单的提示下绝大部分问题应该可以“对答如流”。可能您也会觉得这些太细节,真要追究起来似乎也大都不是必须的,无视这些照样可以写程序,做网站,赚工资,但是我不会满足于成为(包括招聘)这样的程序员,暂时也懒得解释掌握这些东西的益处和重要性。 每个人都有自己的看法, 一切就看您自己的选择了。 阅读全文

基于Jscex.Async的JavaScript动画/游戏

2010-12-16 01:03 by 老赵, 3316 visits
摘要:首先和大家宣布一个消息,Jscex的代码已经提交至Github上了,感兴趣的朋友下载来Dog Fooding一把,并欢迎提出反馈意见。Jscex受到F#计算表达式的启发,是一个面向JavaScript语言的monadic扩展,最常见的用途便是编写异步程序,尤其是逻辑复杂的异步程序。不过除此之外,使用这套异步库来编写动画或是游戏也是十分容易的事情。例如,一个人物的走动或是爆炸效果,其实可以视为一个贴图随时间不断变化的过程。这个变化的过程是异步的,但是有了Jscex.Async,我们只需使用最直接的同步形式编写代码就行了。 阅读全文

演出季上“异步编程模型的演变”幻灯片

2010-12-11 22:01 by 老赵, 3312 visits
摘要:演出季终于过去了,现在就来做一个收尾吧。这次的主题是“异步编程模型的演变”,主要回顾了微软在.NET平台上异步编程上的进化:基于回调,基于迭代生成器,基于类库,基于语言。不过这样的编程模型其实并非微软独有,而是一些运用比较广泛的异步编程方式,因此在SD 2.0大会上我其实完全用JavaScript进行演示。从结果上来看,除了最早的TUP,其他两场演讲(.NET技术大会和SD 2.0)的反响都不错。 阅读全文

适合JavaScript 1.7中迭代生成器的异步编程机制

2010-12-03 19:09 by 老赵, 2263 visits
摘要:上篇文章我提出了一种基于JavaScript 1.7中迭代生成器(yield)的异步编程方式,它可以让混乱的异步代码逻辑变得清晰一些。不过之前的AsyncIterator其实是对基于C# 2.0的AsyncEnumerator的仿制品,在公司的分享会上进行交流以后,同事hax提出其实可以实现地更漂亮一些。在他的提示下,我了解到JavaScript 1.7中不同于C# 2.0里的特性,因而对这种异步编程机制提出了改进。只可惜yield特性被ECMAScript 5排除了,这实在可以说是委员会设计模式的又一次伟大胜利。 阅读全文

JavaScript版本的AsyncEnumerator

2010-11-29 22:25 by 老赵, 3095 visits
摘要:地球人都知道,在C# 2.0里提供了yield关键字,可以方便好用地生成一个迭代器,更可以简化异步操作——这是因为有了Jeffrey Richter开发的AsyncEnumerator。在接下来的某些演讲中我准备的主题是“异步编程模型”的演变,自然少不了这非常重要的一环。为了便于广大人民群众更好地接受,我决定使用JavaScript来进行说明。为此,我用JavaScript实现了一个AsyncEnumerator。 阅读全文

关于即将到来的“演出季”以及Jscex类库

2010-11-22 20:30 by 老赵, 2666 visits
摘要:又到了一年一度的“演出季”,接下来将是各式会议扑面而来的一个月。作为“与会爱好者”我自然也进入了繁忙的准备工作。接下来我将在TUP(11月27日)、2010年第二届.NET技术大会(12月4~5日)以及CSDN软件开发2.0大会(12月9~10日)上与大家分享四场演讲。不过除了一场是关于Windows并发编程的基础以外,其余三场的话题都是围绕“微软在异步编程方面的演变”。在这场演讲中,我还会引入一个与该话题密切相关的JavaScript类库:Jscex。 阅读全文

使用Narcissus解析JavaScript代码

2010-11-17 18:08 by 老赵, 3283 visits
摘要:最近在做一个有关JavaScript的实验,需要在客户端将JavaScript代码解析为一棵语法树。换句话说,就是一个用JavaScript实现的JavaScript解析器。这方面的选择有很多,常见的yacc、lex或是bison等等都有JavaScript的版本,使用ANTLR也可以将生成目标设为JavaScript。不过我不想在这方面耗费太多时间,自然想找个现成的工具,于是最终我将目标放在了Narcissus上。 阅读全文

异步编程与响应式框架

2010-09-14 20:14 by 老赵, 13463 visits
摘要:异步操作是强大的,它是许多高伸缩性架构的基石。异步操作在许多情况下是必须的,例如在客户端保持用户界面的响应能力,以及在日益兴起的云计算场景中。但是,异步编程又是十分困难的,它让这让许多程序员敬而远之。因此,越来越多的编程语言都对异步编程提供了相当程度的支持,其中的典型代表便是F#中的异步工作流以及Scala的Actor模型。不过目前的一些主流编程语言,如C#或是JavaScript,它们在设计之时并没有在异步编程上考虑太多,我们便会根据它们的语言特性,提供合适的异步编程模型及其实现。而本文介绍的便是其中一例:响应式编程模型及响应式框架。 阅读全文

程序员的档次?有没有搞错?!

2010-08-28 02:43 by 老赵, 6247 visits
摘要:最近有一幅老图很火,很多人说这是“从语言来区分程序员的高低”。很多人说这幅图有问题,我说是你们的理解有问题,类似这样的对话在推特上面出现过多次,一般说着说着也就过了。不过突然发现,在CSDN——这个中国最大、最权威的IT类网站上居然发布了一篇名为“程序员的档次”的新闻,让我有些愤慨。CSDN首页是我常去的地方,在我印象中以前最令人不满的也最多是技术方面的硬伤吧,但这次就不明白了,这是故意的还是怎么的?我已经很难相信这是“无心之失”了。如果不是故意的,那么某些编辑同志的业务水平的确需要提高了。 阅读全文

读完《Scala程序设计》,随便谈一些想法吧

2010-08-15 23:13 by 老赵, 15325 visits
摘要:虽然我对Scala还算熟悉,但还是在china-pub上订阅了一本图灵引进的《Scala程序设计》。上上周五在公司收到了这本书,顺手带回家,在路上简单翻了翻。周六用来欢乐,周日懒觉睡觉中午,直到下午才又拿起这本书,不过加上周一上班途中的工夫也算将这本不到200页的小册子浏览完了。这本书的内容本身并没有给我留下太深刻的印象,但我也想谈一些有关Scala语言和其他一些方面的想法。 阅读全文

关于DLR及.NET版本的问题

2010-07-26 21:12 by 老赵, 3739 visits
摘要:动态语言运行时(Dynamic Language Runtime,DLR)是一套基于.NET的类库,它的作用是简化在CLR上开发动态语言的工作,例如DLR中提供了表达式树的创建,代码生成、优化及调试等实现动态语言的常见功能,而语言的编写者则着重关注解析器等方面的工作。不过最近接触了观察了DLR代码之后,却发现它和各版本.NET中BCL的协作还真是件不容易理清的事情。 阅读全文

Why Java Sucks and C# Rocks(6):yield及其作用

2010-07-18 21:26 by 老赵, 10239 visits
摘要:C# 2.0新增了yield关键字,其初衷是简化迭代器的生成,这可以说是现代语言的标配。只可惜Java历经数次升级,从数量上来说也算增加了不少语言特性了,却还是将这个功能拒之门外,让人费解。除了用于生成迭代器之外,yield还可用于其它一些场景,颇为奇妙。这些场景都是在生产过程中常用的开发模式,只可惜对于使用Java语言的程序员来说都只能望而兴叹了。 阅读全文

NDC 2010视频下载:看看其他微软平台程序员们都在做什么

2010-07-13 15:13 by 老赵, 4281 visits
摘要:NDC(Norwegian Developers Conference,挪威开发者大会)是一年一度的挪威最大的微软平台开发者大会,内容丰富,讲师阵容强大。NDC与PDC同为高端技术会议,但NDC与PDC的不同之处在于,PDC是微软官方会议,主要是面向微软资深产品的深入探讨。而NDC涉及的内容则广泛的多,包括了我所感兴趣的Java、Mono、IronRuby/Ruby on Rails、NoSQL方面的内容。这也就像我一直强调的那样,微软技术社区非常开放,微软平台上的太多程序员都能够非常热情地拥抱其他平台的技术。那些认为微软技术社区是井底之蛙的兄弟,殊不知你们的嘲笑只能体现出自身的狭隘。 阅读全文

Why Java Sucks and C# Rocks(补2):标准事件模型

2010-07-13 09:17 by 老赵, 4749 visits
摘要:这又是一篇“补”,本来并不想写这方面的内容,因为这并非完全是“语言”相关。打个比方,如果您觉得.NET中的事件模型不友好,那么就按Java的做法去做咯(反之就做不到了)。不过既然正好看到有些涉及到这方面的讨论,那么我也趁此机会发表一下自己的看法吧。这次谈的是两种语言(其实在这个话题上也是平台)下“标准”的事件模型。“标准”二字意味着是被双方社区各自接受的模型,而不仅仅是为了实现“事件”这一理念而使用的任意做法。 阅读全文
使用Live Messenger联系我