Hello World
Spiga

分类:语言编程

谈谈我对《ThoughtWorks文集》中多语言开发部分的看法

2009-09-26 17:44 by 老赵, 12109 visits
摘要:一早看怪怪同学评论《ThoughtWorks文集》公开的样章,一谈多语言开发(第5章),二谈测试(第13章)。怪怪同学的看法是贬前者而捧后者,并提出“同样一个包装下、同一个公司不同的作者,差异如此之大,那么在我们的学习过程中,就要注意去芜存菁了”。说实话,我没有理解他对第5章的评价,如在“抽象方式”方面的说法我没有太深的理解。不过现在我也谈谈我对书中所写多语言开发的看法。用一句话概括的话就是:赞同结论,不赞同论据。的确如怪怪同学所言,即使是有“大师”称号的作者,其内容也该去芜存菁。 阅读全文

幻灯片:LINQ Inside, Part 1

2009-09-26 13:06 by 老赵, 11660 visits
摘要:整理电脑时整理发现一个幻灯片,修改日期是去年年底,当时不知道为了什么,对方是谁讲一次LINQ。这次讲座是入门型的,主要讲了讲什么是LINQ,什么是表达式,表达式树等等。不过这第一部分似乎……还没有提到LINQ,更那个什么的是,我已经找不到第二部分了……因此,大家可以随意看看。目前脑袋写了几篇相当不错的,可作为入门的LINQ相关文章。以后我再提到这部分内容时终于也有东西可以引用了…… 阅读全文

语言特性与API设计

2009-09-25 17:12 by 老赵, 11856 visits
摘要:我平时的主要工作之一,便是编写一些基础及通用的类库,能够在项目中大量复用。换句话说,我的工作目的,是让其他开发人员可以更好地完成工作。因此,如何设计更容易使用的API是我经常要考虑的东西,偶尔也会有一些体会。而现在这些内容,是我在为Functional Reactive Programing写“参考答案”的时候忽然“总结”出来的想法。可能比较简单,但我想也是设计API是需要考虑的一些内容。 阅读全文

趣味编程:Functional Reactive Programming(参考答案)

2009-09-23 10:45 by 老赵, 12039 visits
摘要:初见Functinal Reactive Programming时,它的编程方式让我大开了眼界,居然可以用这种方式来操作和控制事件。虽然从技术角度来说,要实现这种方式并不是非常困难,甚至颇为有趣。因此我把它当作一次“趣味编程”。不过,这次的结果似乎让我对API设计有了一些新的体会,我打算明天再来总结一下。今天,我们先关注原题的解决方式。 阅读全文

趣味编程:将事件视为对象(参考答案)

2009-09-17 09:48 by 老赵, 11748 visits
摘要:这次我们是要编写一个DelegateEvent对象,提供它AddHandler和RemoveHandler的实现。事实上,在之前还有一篇文章中,我们搞了一个人模狗样的构造方式,但是它往往不适合用于实际使用过程中。因此,其实DelegateEvent最关键的地方还是各种不同的“构造方式”,使它可以用于各种情况。 阅读全文

趣味编程:C#中Specification模式的实现

2009-09-15 20:15 by 老赵, 13619 visits
摘要:Specification模式的作用是构建可以自由组装的业务逻辑元素。多个Specification对象可以组装起来,并生成新Specification对象,这便可以形成高度可定制的业务逻辑。例如,我们可以使用依赖注入(控制反转)的方式来配置这个业务逻辑,以此保证系统的灵活性。但是Wikipedia上提供了非常旧的内容,很可能是在C#只是1.0版本的时候编写的代码(或者说它为了“兼容”Java那种语言的实现方式)。那么在实际开发过程中,我们又该如何利用C#如今的强大特性来实现出更容易使用,甚至是更为“轻量级”的Specification模式呢? 阅读全文

基于DelegateEvent创建第一个IEvent对象

2009-09-11 13:47 by 老赵, 11369 visits
摘要:继续和“事件即对象”打交道。我们之前提到过两个“趣味编程”:DelegateEvent与Functional Reactive Programming,现在我们在它们两者之间架起一座桥梁。也就是说,我们要从一个DelegateEvent对象创建一个IEvent对象出来。这样,您就可以把它作为第一个IEvent对象,继续尝试Functional Reactive Programming了。 阅读全文

趣味编程:Functional Reactive Programming

2009-09-10 12:26 by 老赵, 15314 visits
摘要:基于事件的编程再常见不过了,尤其是在和UI相关的WinForm,WPF,Silverlight开发方面。把事件作为一等公民看待之后,我们可以实现一些较为“特别”的编程模型,例如Functional Reactive Programming。这是一种较为优雅的基于事件的处理方式,适合一些如交互式动画,自动控制方面的工作。即使平时不太常见,我想作为一个“尝试”或“练习”也是非常合适的。那么我们就学习F#的类库,为C#也设计一套这样的功能吧。 阅读全文

趣味编程:将事件视为对象

2009-09-09 13:11 by 老赵, 12866 visits
摘要:如果一个语言(平台)把事件视为对象,则表明它把“事件”作为了语言的一等公民来对待。这可以有效地提高语言的抽象能力,由于.NET本身无法将事件作为单个对象处理,因此在某些时候就会束手束脚,也难以引入一些特别的编程模型。前一篇文章中我们提出了一个糊弄人的解决方案。而这次,不妨由您来试试看如何给出一个更好的实现。 阅读全文

把事件当作对象进行传递

2009-09-07 17:20 by 老赵, 6225 visits
摘要:最近在琢磨一些事情,和API设计有关。API设计在很多时候是和语言特性有关的,因此如Java这样的语言,在API设计时会处处受到压抑。而C#就能够出现如Moq或Fluent NHIbernate这样的项目。同样,F#能够开发出FsTest,Scala号称Scalable Language,都是依靠着丰富的语言特性。不过,最近在使用C#的时候鼻子上也碰了一点灰,这是因为我发现“事件”这个东西没法作为对象进行传递。 阅读全文

您能看出这个Double Check里的问题吗?(解答)

2009-09-02 17:16 by 老赵, 7565 visits
摘要:已经很有很多朋友得到了结果,是由于m_categories过早初始化,而导致double check的验证条件被破坏(或者说,满足)。不过,这里我们可以再谈一些更深入地内容,例如Memory Consistency Model。 阅读全文

您能看出这个Double Check里的问题吗?

2009-09-02 15:11 by 老赵, 7571 visits
摘要:昨天在做code review时看到一位同事写了这样的代码。这段代码的目的使用Double Check的做法来保证线程安全的延迟加载。但是我看到这代码之后发现了一个问题,这个问题不是第一次出现。因此,我打算在博客上记录一笔,希望可以给更多人提个醒吧。 阅读全文

趣味编程:函数式链表的快速排序(参考答案)

2009-09-02 10:58 by 老赵, 5049 visits
摘要:之前我提出了一个“趣味编程”,模仿Haskell的方式对一个链表进行快速排序。在那篇文章中我解释了Haskell列表的结构,并给出了ImmutableList的基础实现。快速排序的例子很多,多做也没有意思。这题虽然打着“快速排序”的旗帜,但事实上这里的关键在于实现ImmutableList数据结构的相关操作——否则为什么叫“函数式链表”的快速排序呢?。 阅读全文

使用Lambda表达式编写递归函数

2009-08-31 01:40 by 老赵, 11489 visits
摘要:其实这从来不是一个很简单的事情,虽然有些朋友认为这很简单。如果您把委托变量的声明和Lambda表达式分开写为两行,那么其实这已经是一中“伪”递归了。可能已经有朋友知道“标准”的做法是什么样的,不过我这里还想谈一下我当时遇到这个问题时想到的一个做法。比较笨(非常符合我的特点),但是可以解决问题。但是装配脑袋很早给了我们更好的解决方法,希望在以后的某一天,我可以把这部分内容融会贯通地理解下来,并且可以详细地解释给大家听。在这之前,我还是听脑袋的话,把Fix强行记在脑袋里吧。 阅读全文

趣味编程:函数式链表的快速排序

2009-08-27 17:50 by 老赵, 7530 visits
摘要:前一段时间有朋友问我,Haskell快速排序的代码,是否可以转化成C#中等价的Lambda表达式实现。我当时回答,C#中缺少一些基础的数据结构,因此不行。经过补充之后,就没有任何问题了。后来,我觉得这个问题挺有意思,难度适中,也挺考察“基础编程”能力的,于是就自己写了一个。如果您感兴趣的话,也不妨一试。 阅读全文

C#编译器对泛型方法调用作类型推断的奇怪问题

2009-08-20 16:50 by 老赵, 6298 visits
摘要:范型是.NET平台上重要的功能,范型即为一个“不确定”的类型。C# 3.0中加强了对于类型推断的力度。但是C#的代码推断作的相当不完整,刚才我又遇上了一个奇怪的问题。 阅读全文

从.NET中委托写法的演变谈开去(下):性能相关

2009-08-10 00:44 by 老赵, 11099 visits
摘要:在上一篇文章中,我们详细讲述了C# 3.0中Lambda表达式(构造委托)的使用方式,它在语义上的优势及对编程的简化——这些内容已经属于委托的“扩展内容”。不如这次谈得更远一些,就来讨论一下上文中“编程方式”的性能相关话题。 阅读全文

从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势

2009-08-07 08:24 by 老赵, 17841 visits
摘要:在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势、目的及注意事项。那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的表现形式又演变成了什么样子,还有什么特点和作用。 阅读全文

从.NET中委托写法的演变谈开去(上):委托与匿名方法

2009-08-05 12:50 by 老赵, 17746 visits
摘要:在《关于最近面试的一点感想》一文中,Michael同学谈到他在面试时询问对方“delegate在.net framework1.1,2.0,3.5各可以怎么写”这个问题。我也问过,那么我就先单独针对这个问题进行解释,然后谈谈自己为什么会提出这个问题吧。 阅读全文

适合C# Actor的消息执行方式(6):协变与逆变

2009-08-03 09:19 by 老赵, 6927 visits
摘要:在上一篇文章中,我们实现了一个简单的爬虫,并指出了这种方式的缺陷。现在,我们就来看一下,如何使用C# 4.0中所引入的“协变和逆变”特性来改进这种消息执行方式,这也是我认为在“普适Actor模型”中最合适的做法。这次,我们动真格的了,我们会一条一条地改进前文提出的缺陷。 阅读全文
使用Live Messenger联系我