Hello World
Spiga

编程语言的发展趋势及未来方向(1):历史回顾及趋势概述

2010-04-13 00:52 by 老赵, 21714 visits

这是Anders Hejlsberg(不用介绍这是谁了吧)在比利时TechDays 2010所做的开场演讲。由于最近我在博客上关于语言的讨论比较多,出于应景,也打算将Anders的演讲完整地听写出来。我希望这个讲座可以从侧面回答某些朋友关于“语言讨论是否有价值”的疑问,并且展示出目前语言的发展状况以及微软在这方面的努力。完整内容将分为多次发表,每次一小部分,包含大约10分钟的演讲内容。等不及的朋友也和可以下载演讲视频一睹为快。现在的第1部分则包含Anders对编程语言发展的历史回顾,以及对趋势简单概述。

如果没有特别说明,所有的文字都直接翻译自Anders的演讲,并使用我自己的口语习惯表达出来,对于Anders的口误及反复等情况,必要时在译文中自然也会进行忽略。为了方便理解,我也会将视频中关键部分进行截图,而某些代码演示则会直接作为文章内容发表。

(听写开始)

大家好,我是Anders Hejlsberg,现在是微软的Technical Fellow,担任C#编程语言的首席架构师,也参与并领导.NET Framework以及各种语言的开发。我现在打算谈一下……实际上是我脑海中一些影响未来5到10年编程语言设计的内容。比如C#或VB该怎么走,F#该怎么办,这次演讲主要就是讨论这些影响我们的东西。

虽然主要内容是谈论未来的,但是我还是想先回顾一下历史。你们有些人可能对这个产品有印象,这是我大约27年前的工作内容,Turbo Pascal,这也是我进入这个领域的起点。我先在拿出这个东西是想展示当年写程序的情况,然后可以讨论目前究竟的发展到哪儿了。

事实上,我现在的机器里正好有TURBO.COM文件,大约39K,嘿,现在还可以运行。我们现在来试着写一点程序。先来创建的程序叫做Hello.pas……(开始写代码)……一个Pascal小程序写好了,我们来运行一下……(出现编译错误)啊噢,有地方我写错了……这个特性在当年是个创新,它会自动打开编辑器,直接把我们带去出错的地方。嗯,我们现在来纠正语法错误,把双引号改成单引号。

再运行一下,现在成功了,(观众掌声)呵呵,谢谢,谢谢。事实上,在27年后这个程序还能在这台机器上运行还真是挺神奇的。

现在,我们来看一下,从那时算起硬件已经发展了……嗯,我那时写Pascal的机器是Z-80,拥有48K内存。从那时算起,我现在这台机器已经有大约10万倍的外部存储容量,1万倍的内存大小,CPU速度也有大约1000倍的提高。

但是如果你关注一下目前的软件……过去27年里编程语言到底进步了多少?呵呵,有趣的是如果你仔细观察这些代码,会发现C#还比Turbo Pascal的版本多一行。这也给我们带来了一些值得关注的东西。

首先,编程语言的发展非常缓慢。期间当然出现了一些东西,例如面向对象等等,但是远没有好上1000倍。另一方面,你可能会想,那么这些努力都到哪里去了呢?事实上这些努力没有体现在编程语言上,而是出现在框架及工具等方面了。如果你关注如今我们使用的框架,它们的体积的确有1000倍的增长。例如当年Turbo Pascal所带的框架大约有,比如说100个功能,而现在的.NET Framework里则有一万个类,十万个方法,的确有1000倍的增长。与此类似,如果你观察现在的IDE,我们现在已经有了无数强大的功能,例如语法提示,重构,调试器,探测器等等,这方面的新东西有很多。与此相比,编程语言的改进的确很不明显。

另一方面,如.NET,Java等框架的重要性提高了许多。而编程语言往往都倾向于构建于现有的工具上,而不会从头写起。现在出现的编程语言,例如F#,如果你关注Java领域那么还有ScalaClojure等等,它们都是基于现有框架构建的。现在已经有太多东西可以直接利用了,每次从头开始的代价实在太高。

还有件事,便是在过去5、60年的编程历史中,我们都不断地提高抽象级别,我们都在不断地让编程语言更有表现力,让我们可以用更少的代码完成更多的工作。我们一开始先使用汇编,然后使用面向过程的语言,例如Pascal和C,然后便是面向对象语言,如C++,随后就进入了托管时代──受托管的执行环境,例如.NET,Java,它们的主要特性有自动的垃圾收集,类型安全等等。我目前还没有看出这样的趋势有停止的迹象,因此我们还会看到抽象级别越来越高的语言,而语言的设计者则必须理解并预测下一个抽象级别是什么样子的。

我认为,现在影响力较大的趋势主要有3种。首先,我们会越来越多地使用声明式的编程风格。这里我主要会提到例如DSL(Domain Specific Language,领域特定语言)以及函数式编程。然后在过去的五年里,我发现对于动态语言的研究变得非常火热,其中对我们产生重大影响的无疑是动态语言所拥有的良好的元编程能力,还有一些非常有趣的东西,例如JavaScript引擎的发展。然后便是并发编程,无论我们愿不愿意,多核的产生都在迫使我们不得不重视并发编程。

有一点值得一提,那便是随着语言的发展,原本的编程语言分类方式也要有所改变了。以前我们经常说面向对象语言,动态语言或是函数式语言。但是我们现在发现,这些边界变得越来越模糊,经常会互相学习各自的范式。静态语言中出现了动态类型,动态语言里也出现了静态能力,而如今所有主要的编程语言都受到函数式语言的影响。因此,一个越来越明显的趋势是“多范式程序设计语言”。

在接下来的部分中,我将深入讨论以上提到的这些内容。

(未完待续)

相关文章

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

60 条回复

  1. Gsanidt
    119.6.11.*
    链接

    Gsanidt 2010-04-13 01:06:41

    老赵果然睡得很晚,难得抢个沙发,然后看看...

  2. shihao
    58.221.182.*
    链接

    shihao 2010-04-13 01:51:36

    哎,没抢着。

  3. 0
    221.122.63.*
    链接

    0 2010-04-13 08:14:34

    多谢老赵,我正需要呢

  4. fuxy
    112.66.79.*
    链接

    fuxy 2010-04-13 08:49:38

    希望在翻译的过程中,能加上老赵对某些观点的看法,或某些背景的解释,或者某些牛人不同的观点。这会让我们看得更过瘾。

    老赵辛苦了,都毕业N年了,还得练习听力。

  5. Kollin
    221.235.58.*
    链接

    Kollin 2010-04-13 08:56:11

    多谢老赵! 真是勤奋啊!

  6. killkill
    61.142.239.*
    链接

    killkill 2010-04-13 09:00:47

    谢谢老赵的分享

  7. 1-2-3
    123.191.106.*
    链接

    1-2-3 2010-04-13 09:02:29

    非常精彩。非常感谢老赵的介绍和听写。那个“接下来的部分”呢?

  8. 老赵
    admin
    链接

    老赵 2010-04-13 09:05:48

    @1-2-3

    别急啊,要分好多次呢。这次大约2000字,才9分钟。视频长度的1/7。

  9. 链接

    鼠标也飞扬 2010-04-13 09:06:54

    谢谢分享~~

  10. joylee
    113.92.95.*
    链接

    joylee 2010-04-13 09:08:07

    果然很勤奋,这是个辛苦的事情,呵呵,等待下文

  11. 链接

    clk_z 2010-04-13 09:12:30

    期待下文,谢谢老赵!

  12. 链接

    leellyp 2010-04-13 09:21:53

    讲的很好很生动。

  13. driedbeef
    113.106.106.*
    链接

    driedbeef 2010-04-13 09:22:29

    看过不少Anders的视频。

    其实这个TechDays2010的Session属于Anders的老生常谈了。他在很多采访或者演讲里都表达过类似的观点。对于我来说,他最震撼的视频还是PDC2008上的"The Future of C#"。呵呵。

  14. chenkai
    123.6.112.*
    链接

    chenkai 2010-04-13 09:29:14

    图片点击后 自动获取显示在屏幕中央. 赵改了不少东西.

  15. 1-2-3
    123.191.106.*
    链接

    1-2-3 2010-04-13 09:34:40

    @老赵

    啊,太好了。对你的感谢之情有如滔滔江水……

  16. 链接

    Terry Sun 2010-04-13 09:35:20

    这一系列还真不错

  17. 老赵
    admin
    链接

    老赵 2010-04-13 09:36:00

    @driedbeef

    是的,我也觉得,虽然想不起来在哪里看过,但是Anders的这些说法我也大都听过。

    其实在最近他还有一个和PDC 2008差不多的演讲C# 4.0 and beyond。不过这些东西感觉也在现在的听写里面也包括了。

  18. 链接

    onlytiancai 2010-04-13 09:39:28

    微软架构师谈编程语言发展(一) - 51CTO.COM http://sinaurl.cn/hYNmq

  19. 10010101
    158.132.122.*
    链接

    10010101 2010-04-13 09:59:04

    多谢老赵提供这么好的分享,我是跟着Anders一直从pascal-->Delphi-->.net的。

  20. Gsanidt
    119.6.11.*
    链接

    Gsanidt 2010-04-13 10:02:48

    呵呵呵,看了一节之后,跑去把视频看了一遍!

  21. wuxiaoqqqq
    218.241.192.*
    链接

    wuxiaoqqqq 2010-04-13 10:03:13

    老赵辛苦了,期待剩余文章

  22. xiaoetmac
    222.66.14.*
    链接

    xiaoetmac 2010-04-13 10:07:26

    严重支持这一系列~~

  23. 链接

    zhiyuanfirst@qq.com 2010-04-13 10:18:59

    不错,学习了!

  24. Zoom.Quiet
    113.106.106.*
    链接

    Zoom.Quiet 2010-04-13 10:28:00

    是也乎,是也乎,最近开发语言一直爆发式的出现; 到底应该钻研什么样的开发语言才可以受用一生? 是得有靠谱的人给个靠谱的思路了...

  25. 老赵
    admin
    链接

    老赵 2010-04-13 10:33:36

    @Zoom.Quiet: 到底应该钻研什么样的开发语言才可以受用一生? 是得有靠谱的人给个靠谱的思路了...

    怎么可能有这种语言,语言设计者也不会想着一劳永逸吧。

  26. 随口一说
    117.15.170.*
    链接

    随口一说 2010-04-13 10:35:05

    我也讲不出什么大的道理,只是觉得老语言,大家常用同一种方法来解决某个问题;而新语言则不同,我们就可以有多种方法来解决某个问题。

  27. 链接

    quhui13 2010-04-13 10:36:17

    谢谢,可以解决很多人的困惑!

  28. 老赵
    admin
    链接

    老赵 2010-04-13 10:46:24

    @随口一说

    一定程度上我同意你的看法,就是说新语言往往有足够的灵活性,可以让开发人员有能力自己定制出最合适的做法。其实开发人员需要的语言也不是“特性多”,而是真正能改变编程思维,改善编程生活的语言。

    这也是我反感Java的原因,它实在有些固步自封了。

  29. 老赵的粉丝
    60.183.67.*
    链接

    老赵的粉丝 2010-04-13 11:29:29

    期待下文!好文啊!

  30. 随口一说
    117.15.170.*
    链接

    随口一说 2010-04-13 11:32:19

    是这样,“特性多”让我们很茫然,也感到无所适从!更要命的是造成开发团队中的分歧,也越来越多,有时很难协调。

  31. go
    220.188.215.*
    链接

    go 2010-04-13 11:35:52

    delphi 之父!

  32. 鬼画符未登录版
    86.96.226.*
    链接

    鬼画符未登录版 2010-04-13 12:27:59

    老赵 我想请教一下 你的英语是咋学的 这么强呢。

    我想园子里的朋友可能有很多像我一样有这样的疑问。啥时候发个专帖。谈谈我们搞技术的如何学习专业英语哈。期待中。。。。。。。

  33. 老赵
    admin
    链接

    老赵 2010-04-13 12:37:31

    @鬼画符未登录版

    强吗?大学英语四级而已。

  34. 鬼画符未登录版
    86.96.229.*
    链接

    鬼画符未登录版 2010-04-13 13:33:31

    @老赵

    相当强了。。。

  35. Duron800
    207.46.92.*
    链接

    Duron800 2010-04-13 13:40:58

    挑错: 首先,编程语言的发展非常缓慢。期间当然出现了一些东西,例如面向对象等等,但是远没有好上1000倍。另一方面,你可能回想,那么这些努力都到哪里去了呢?事实上这些努力没有体现在编程语言上,而是出现在框架及工具等方面了。

  36. Rwing
    121.34.8.*
    链接

    Rwing 2010-04-13 14:01:03

    多谢,很不错,不过我想知道有后面吗?

  37. 链接

    高歌 2010-04-13 16:28:49

    听原声太累,期待后续博文

  38. abc
    117.84.77.*
    链接

    abc 2010-04-13 16:37:55

    好文, 不错。

  39. Mvc2发布了
    113.97.86.*
    链接

    Mvc2发布了 2010-04-13 22:32:46

    老赵,Mvc2发布了,最近有打算写关于Mvc2的文章没?很期待哦!!!

  40. Mvc2发布了
    113.97.86.*
    链接

    Mvc2发布了 2010-04-13 22:40:48

    有空把MvcPatch更新到Mvc2呀~~~~

  41. 老赵
    admin
    链接

    老赵 2010-04-13 22:48:57

    @Mvc2发布了

    自己想自己写吧,我的所有代码和设计都是公开的,不要老是依赖我啊。

  42. tt
    59.40.235.*
    链接

    tt 2010-04-13 23:56:21

    看看看看看看

  43. 链接

    driedbeef 2010-04-14 00:00:48

    @老赵

    啊,当时看Trends and future directions in programming languages的时候C# 4.0 and beyond还没发布到Channel9上。这两天抽空看一下。

    问个问题,平常你写Native Code不?有没有遇到啥Managed Code不好解决的问题?

  44. 老赵
    admin
    链接

    老赵 2010-04-14 00:04:53

    @driedbeef

    C# 4.0 and beyond其实也是老生常谈了。

    我基本不写Native Code,最近几个月更是一行都没写过了,目前情绪稳定感觉良好……

  45. 链接

    driedbeef 2010-04-14 00:33:55

    @老赵

    呵呵,回头你可以再弄个 Why Native Code Sucks and Managed Code Rocks 的演讲。

    其实在应用层上开发的话,从 C++ 到 C# 远比从 Java 到 C# 带来的生产力提升要巨大。现在看到有人用 MFC 写只在 Windows 上跑的工具就想吐血。

  46. 小羊肖恩
    218.106.184.*
    链接

    小羊肖恩 2010-04-14 07:55:37

    老赵你也太敬业了!英语听写+PPT+相关链接,你是超人么?:o)

  47. 老赵
    admin
    链接

    老赵 2010-04-14 09:06:33

    @driedbeef: 呵呵,回头你可以再弄个 Why Native Code Sucks and Managed Code Rocks 的演讲。

    我不了解这些啊,不一定能找到充分的理由,经不起Challenge。Java我很了解,所以能说它Sucks。关键还有就是,说Java Sucks,也能有合适的解决方案。

  48. 熊鹰
    59.41.47.*
    链接

    熊鹰 2010-04-14 09:50:19

    感谢老赵,持续关注中……

  49. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-14 17:28:53

    “Why Native Code Not Sucks & Managed Code (maybe) Not Rocks”倒是个好话题。拿用户界面来说,微软自己的东东,Windows,Office,IE...都是native code的——有点神秘的DirectUI。我的主观臆断是DirectUI能做的WPF都能做,并且后者的生产力更高,Vista开发八卦里也说盖子主张拥抱WPF,但是,现在是2010年春天,Managed Code似乎还未怒放,灰常有意思。

    我觉得这是平均硬件水平拖后腿的缘故,稍微老点的机器,跑Native Code做的VS08还能做到流畅,跑WPF做的VS10就比较磨练耐性了,因为开发人员的机器一般都不错,所以VS10才敢吃螃蟹。如果windows,office也吃螃蟹的话,那不被低配置的用户骂死!m$是商业公司。

    另一个原因是历史遗留,那么多代码,要转型也要时间。

    盖子语录:我们经常高估了今后一、两年内将发生的变革,但又常常低估了今后十年内将要发生的变化。所以我们不要整天无所事事。

  50. 老赵
    admin
    链接

    老赵 2010-04-14 17:35:06

    @zzfff

    但我真觉得VS 2010比2008跑起来要顺畅呢,呵呵。

  51. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-14 17:56:26

    @老赵

    在AMD Althon 3000+,2G内存,用virtual pc 2007跑VS08及VS10,后者的延迟是肉体可测的,前者基本不会影响情绪。

    重温免费午餐已经结束——软件历史性地向并发靠拢雄文,让人不禁遐想如何提高诸如WPF这样本质上是单线程的程序在多核硬件下的性能的问题。

    (不懂硬件,但我觉得“免费午餐已经结束”这样的说法太煽情了点,主频大战已经结束,硬件“算法”还可以优化吧[不是加核]?尽管优化空间越来越有限)

  52. 老赵
    admin
    链接

    老赵 2010-04-14 18:04:44

    @zzfff

    会不会是虚拟机里跑WPF没法利用到DirectX所以显的慢啊?

  53. zzfff
    222.53.140.*
    链接

    zzfff 2010-04-14 18:26:36

    @老赵

    不知道,Managed Code平均比Native Code慢是我的主观臆断,是不严谨的,不知有没有有大量数据支撑的、科学的Managed Code与Native Code性能pk的profile。

  54. driedbeef
    113.106.106.*
    链接

    driedbeef 2010-04-14 19:02:13

    关于性能比较,这里倒是有一篇文章 Is Managed Code Slower Than Unmanaged Code?,用的是傅立叶变换的计算。

    不过这篇文章的比较方法貌似有些特殊,因为在这样密集数值计算的情况下,JIT和GC所占的时间几乎可以忽略不计。

  55. zzfff
    222.53.141.*
    链接

    zzfff 2010-04-14 21:54:36

    @driedbeef

    嗯,我想说却没说的是喜欢看到real-world的profile:) 那样的比较太象牙塔了。

    即便Managed Code在技术性能上完全领先,在现实中,像微软这样的巨型公司,保守是最好的商业策略,WASP本性是保守的,我喜欢这种守中带攻的性格,perfect!

  56. zzfff
    222.53.141.*
    链接

    zzfff 2010-04-14 22:14:57

    没踏足米国,更没亲手摸过微软,WASP是我臆想的,盖子从83年开始开发windows,到95年大放异彩,没精英意识、没信仰是很难坚持下去的,我认为。呵呵,跑题

  57. syan
    221.223.46.*
    链接

    syan 2010-08-07 20:08:39

    如果把您的这篇文章被转载到renren.com,不知道你意下如何?如果可以,我会把地址详细写清楚的。

    你的文章都很精彩的说 呵呵

  58. 老赵
    admin
    链接

    老赵 2010-08-08 13:35:47

    @syan

    没问题。

  59. parsifal
    123.157.153.*
    链接

    parsifal 2011-05-17 10:22:42

    多谢老赵的经验分享!

  60. sokoban
    113.108.133.*
    链接

    sokoban 2012-04-29 19:38:06

    学习了,很有意思。

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我