计算机语言的灵魂:范式
本文转自:http://blog.zhenghui.org/2009/09/17/colon-class-4_3/如转发,请注明出处。!预览
?提问
:讲解稍事休整后,大家重新团结在以冒号为中心的周围。 问号再度发问:“编程范式与设计模式都是一种抽象的软件思想,都有一套具体的实现方法。单从字面上看,‘编程’与‘设计’、‘范式’与‘模式’的区别似乎也不太大。它们究竟有什么不同呢?” “这个问题有点意思。”冒号颔言,“设计模式一般针对某一特定场景的问题,而编程范式针对的是广泛得多的问题领域,通常有一整套的思想和理论体系,具有全局性、系统性和渗透性,这一点在五大重要范式中显得尤为突出。因此,编程范式更普适更抽象,涉及的深度和广度也是设计模式难以比拟的。” 引号不免有些疑问:“但事件驱动式不是也能作为设计模式吗?” 冒号解疑:“这倒并不矛盾。同样的思想用在整体系统的结构设计上,则称为架构模式;用在局部模块的细节实现上,则称为设计模式[1];用在引导编程实践上,则称为编程范式。” 句号的武侠瘾又犯了:“设计模式好比组合套路,能在一些特定场合下克敌制胜;编程范式则好比武功门派,博大精深且自成体系。” “很形象的比喻。”冒号赞赏道,“设计模式是遵循设计原则的一些具体技巧,以保证代码的可维护性、可扩展性和可重用性为目的。它重在设计,对编程语言一般没有要求[2]。编程范式则不同,对编程语言往往有专门的要求。通常所说的某某范式的语言,即指该语言对该范式在语法上有明确充分的支持,不需要借助其他的范式或工具。事实上,语言本来就是围绕其所倡导的核心范式来设计的[3]。” 逗号询问:“如果一种语言不支持某种范式,那么还能用这种范式编程吗?” “语言不直接支持范式,只是说明它不属于该范式的语言,但还是可能求助工具来应用该范式。比如元编程可以借助Yacc或ANTLR来完成,AOP可以借助一些库或框架来实现。”冒号道,“正是依靠语言和工具的支持,编程范式得以建立起一套独特而完善的抽象机制和方法体系,从而为所倡导的世界观与方法论奠定基石。” 叹号请求:“能不能帮我们理清一下思路,把学过的范式一并汇总比较?” 不一会儿,众人面前呈现出一张表格,地毯似的覆盖了整个投影屏(如表4-1所示)—— 表4-1.常见的编程范式
叹号怔了怔,好似被一张巨大的烙饼给噎住了。 冒号并不急于讲解,欲以静制动。 果然,逗号沉不住气了,问道:“在第一栏的编程范式及其代表语言中,为什么并发式的代表语言没有Java和C#,只有Erlang和Oz?” “Java和C#虽然在语法和核心库中为并发编程提供了不少支持,但真正将并发范式融入基本设计理念的语言还得数Erlang、Oz这些较为冷门的语言。”冒号解释,“类似地,比起Java、JavaScript等语言来,C#和VB.NET在语言设计上对事件驱动式编程给予了更多的关注[4],因而更具代表性。” 问号发现:“第三栏‘关键突破’的提法很特别啊。” 冒号轻捶桌面以示强调:“一种编程范式之所以能独树一帜,关键在于它突破了原有的编程方式的某些限制,带来革命性的新思维和新方法,进一步解放了程序员的劳动力。这便是范式的核心价值所在。” 引号如获至宝:“这张表格浓缩了范式的精华,既是对此前知识的总结,也是对今后编程的指导,实在太有用了!” 句号显得更为冷静:“有其长必有其短。我们了解了每种范式的长处,是不是还应该了解它们各自的短处?” 冒号开始对各个范式逐一数落:“过程式编程的数据与代码脱节,不方便维护;函数式和逻辑式的开发效率一般比过程式高,但运行效率和语言表现力则有所不如;对象式编程用于数学计算、符号处理等对象特征淡薄的领域,在心理上缺乏认知基础,在运行效率上不如纯过程式,在开发效率上不如函数式;并发式编程增加了代码的复杂度,加重了程序员的负担;泛型式编程影响了代码的可读性,过度使用模块还可能造成代码膨胀(code bloat)[5];元编程过于强大,运用不当会超出程序员的控制,宜谨慎使用;切面式编程减少了程序的可预测性和可控性,同时给代码的跟踪调试带来一定困难,还可能造成性能上的损失;事件驱动式编程虽然也能用于同步的流程应用,但毕竟机制更复杂,没有普通的流程式编程那么自然易懂。” 叹号看上去有点泄气:“您可真够绝的,先把这些编程范式一个个捧到天上,又几杆子它们一个个打下云端。” “因其长而容己,因其短而容他,此万物之理也。”冒号忽然惜言如金,一番之乎者也地予以回应。 句号借用了一句俗话:“不怕有缺点,就怕没特点。” 冒号本欲多言,却恐众人食多伤胃,遂作结案陈词:“尽管只是管中窥豹,相信大家多少见识了编程范式的魅力之处。它们各擅胜场,有风格之别而无高下之分。作文绘画讲究形神兼备,编程也不例外。语言为形,范式为神。若能以神导形、以形传神,则看似平白无趣的程序也能写出诗画般的意境。” 一席话说得众人皆觉虽不能至,然心向往之。 ,插语
。总结
“”参考
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |