CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

微软架构师谈编程语言发展(三)

作者: 匿名,  出处:天极Yesky, 责任编辑: 叶江, 
2007-08-10 08:00
  本文是来自微软设计编程语言大师们围绕编程语言发起精彩讨论的第三部分……

  Charles:你这么一说,关于“函数型”编程,我马上想到一个问题是:在现有基础上再加一层必须考虑的抽象,实际上能不能增加程序员的生产率,是否真的有帮助?作为程序员,现在还要考虑“副作用”的问题。反正我现在用C#还是其他语言编程的时候,是不会像一个“函数型”程序员那样考虑副作用的。

  Herb:往一个语言上增加更多的特性无法使其变简单,这是个我们面临的基本难题。

  Anders:作为一个语言设计师,对于编程语言,我们所能做的是——减缓新特性不断累积的速度,从而避免最终的倒塌。我想说的是,你永远不能收回某个特性。理论上,你可以收回某个特性,实际中,你不能这样做,因为后果是若干代码的崩溃,这行不通。

  Brian:是的,在从VB6到VB.NET的过程中,很多人已经感到饱受折磨了。是的,(微软的)解决方案是说那(VB.NET)是个完全不同的语言。但是,我认为,“函数型”编程的概念已经出现了不短的时间,新毕业的程序员至少听说过这个概念。他们在Python、JavaScript或者其他什么地方见过lambda表达式,或者他们学过Scheme,总之这不是个没听说过的东西,因此,当他们在C#或其他的更传统的编程语言,如VB或C++中看到这些概念的时候,他们并不会感到畏惧,因为他们了解这些概念的优点,他们知道这些东西如果用得正确,可以增加代码的可组合性。你知道,传统语言的可组合性靠的是程序员的自觉。在某些方面,Haskell编程比“命令型”编程要痛苦得多,然而反过来说,它也比“命令型”编程要简单些,因为你不会把事情弄得一团糟。呵呵呵。

  Anders:这里我想插一句。我认为,在很大程度上,我希望我们在C#或VB上做的工作至少是——在很大程度上对“函数型”编程进行“去神秘化”。学院式的人总是倾向于让事情听起来比实际的要复杂,因为这样一来就显得他们自己比较聪明。“呃,我并不是针对任何人,但是,这里有不少符号代数和其他东西呢!(译者注:音频提高了,似乎在学某些人的语气)”。当我向人们解释lambda表示式时,大家是另一种感觉:“你的意思是他们就是函数?这有什么新鲜的?我们早就有函数了,lambda表达式只是些语法糖衣外壳吧?”是的,lambda表达式确实只是语法糖衣外壳,但这是种强有力的语法糖衣外壳,它使你能按照一种新的方式去思考问题,以前总是存在的一些语法噪音——必须声明函数,进行委托,等等——就会逐渐减少,最终,一个全新层次的表达式列表会产生出来。这才是关键所在!围绕着“函数型”编程还有非常多神秘,我希望我们能够(在打破神秘上)有所突破……

  Herb:关于(Brian)说的教育问题,就是关于人们能够在学校中学到的东西的说法,我不太同意。我真的希望情况确实如此,但是我认为缺乏证据,或者说除了 “Pascal熟悉者”之外,我们无法获得更多。不管是在学校还是在今后的职业生涯中,人们都认为自己接触了多种语言,因为他们用过C、C#、C++、VB以及Pascal。但是,这些语言本质上是一样的,是同一族的语言。人们并没有接触过APL——编程就象在解释器外壳(译者注:可以想象DOS的命令行)上敲东西;不熟悉Prolog——任何东西都是规则;不知道Lisp——所有的都是链表。只有当你深入了2到3种这些东西后,你才知道,并不是所有的东西都是命令。也许在你今后的职业生涯中用的都是命令型语言,正如我们大多数人一样,但是,你不会对其他看待世界的观点一无所知。某人从小到大,如果没有离开过成长的城市,如纽约,超过一英里的话,会错过不少有趣的地方,不管你是否想在其他地方住下来,你应该知道它们,体验它们。

  Brian:呃,我觉得这是个渐变的过程,当然,我确实观察到年轻一代程序员对于“函数型”编程有更好的认识了。你知道,10年,15年之前,如果你和人们谈起Scheme时,人们会感到不解地看着你,“什么?你在说什么?”。现在,人们听说过了,他们见过“函数型”编程的关键字。而且,通过JavaScript和Python,人们尝试了“函数型”编程,也使得这些东西更加流行。我并不是说已经出现了巨大的变化,我是说逐渐的变化和更多的认知,人们不再象以前那样看到这些东西就害怕了。

  Erik:也许JavaScript是这个世界上最……(译者注:Brian一阵激动的插嘴,搞得Erik的话听不清了)。我不确定当人们使用JavaScript时,他们是否意识到了这是一种把“函数”当作第一要素的语言。

  Brian:你可以在运行的时候创造它们(函数)……

  Charles:所有的东西都是一种类型,所有的东西都是对象,是吧?这是个有趣的语言。随着整个互联网的发展,你认为这种语言也应该有所进化……?

  Brian:这里的“所有的东西都是对象”,不是面向对象的意义。这里是从“任何东西都是关联链表”的角度来说。现在我听起来像一个老Lisp编程者(译者注:Lisp基于链表),是吧?一个JavaScript的对象不像一个C#对象那样——所有的内存排列都决定了,什么东西都静态地决定了。这意味着所有的东西都可以添加、拿走,可以违反规则,它确实只意味着一个关联链表。

  Anders:属性包(我得意地笑)……

共5页。 1 2 3 4 5 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i