Hello World
Spiga

编程语言的发展趋势及未来方向(5):元编程

2010-05-30 17:42 by 老赵, 11618 visits

这是Anders Hejlsberg(不用介绍这是谁了吧)在比利时TechDays 2010所做的开场演讲。由于最近我在博客上关于语言的讨论比较多,出于应景,也打算将Anders的演讲完整地听写出来。在上一部分中,Anders谈及了他眼中编程语言的另一个发展趋势:动态性。在这一部分中,Anders则讨论了动态语言所擅长的“元编程”,并简单介绍了他为静态类型语言所设计的一种改进方案:编译器即服务。

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

(听写开始,接上篇

动态语言的另一个关键和有趣之处在于“元编程”。“元编程”实际上是“代码生成”的一种别称,其实在日常应用中我们也经常依赖这种做法。观察动态语言适合元编程的原因也是件十分有趣的事情。

在这个蓝框中是一段Ruby on Rails代码(见上图)。简单地说,这里定义了一个Order类,继承了ActiveRecord,也定义了一些关系,如belongs_to和has_many关系。Ruby这种动态语言的关键之处,在于一切事物都是通过执行而得到的,包括类型声明。比如这里的类型申明执行了belongs_to和has_many方法的调用,执行belongs_to会截获一对多或一对一关系所需要的信息,因此在这里语言是在运行的时候,动态为自身生成了代码。

实现这点在动态语言里自然会更容易一些,因为它们没有编译期和执行期的区别。静态类型语言在这方面会比较困难。例如在C#或Java里使用ORM时,传统的做法是让代码生成器去观察数据库,生成一大堆代码,然后再编译,有些复杂。不过我时常想着去改善这一点。

其中一种做法,是我们正在努力实现的“编译器即服务”,我现在先对它进行一些简单的介绍。传统的编译器像是一个黑盒,你在一端输入代码,而另一端便会生成.NET程序集或是对象代码等等。而这个黑盒却很神秘,你目前很难参与或理解它的工作。

你可以想象,一些代码往往是不包含在源文件中的。如果你想要交互式编程的体验,例如一个交互式的提示符,那么代码不是保存在源文件中而是由用户输入的。如果您在实现一个DSL,例如Windows Workflow或是Biztalk,则可能用C#或VB实现了一些需要动态执行的规则,它们也不是保存在源文件中,而可能是放在XML属性中的。此时你想编译它们却做不到,你还是要把它们放入源文件,这就变的复杂了。

另一方面,对于编译器来说,我们不一定需要它生成程序集,有时候需要的是一些树状的表现形式。例如一些由用户反射生成的代码,便可能不要程序集而是一个解析树,然后可以对它进行识别和重写。因此,我们可能越来越需要的是一些API,以此开放编译器的功能。

例如,你可以给它一小段代码,让它返回一段可执行的程序,或是一个可以识别或重写的解析树。这么做可以让静态类型语言获得许多有用的功能,例如元编程,以及可操作的完整的对象模型等等。我们正在朝这方面努力,我也会在下午1点的C# 4.0演讲中谈论更多这方面的内容。

(未完待续)

相关文章

Creative Commons License

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

Add your comment

11 条回复

  1. dogstar
    125.122.26.*
    链接

    dogstar 2010-05-30 19:46:16

    赵姐夫,变短了.

  2. 老赵
    admin
    链接

    老赵 2010-05-30 20:32:37

    @dogstar

    这一部分本来就短,不过马上就会有下一部分内容了。

  3. jiangzhen
    120.35.61.*
    链接

    jiangzhen 2010-05-30 20:54:06

    :):):):):):):):):):):)

    (您说哥们字数太少,所以我就多来几个笑脸吧)

  4. 老菜
    60.215.45.*
    链接

    老菜 2010-05-31 08:12:48

    昨天没及时过来看,今天过来时,老赵已经写了两篇文章。两篇一起学习。

  5. zhuisha
    114.250.110.*
    链接

    zhuisha 2010-05-31 15:28:06

    竟然是传说中的两篇,good job.

  6. NeighborWolf
    27.38.53.*
    链接

    NeighborWolf 2011-07-05 20:29:39

    等编译器将元编程能力暴露出来后,用来写动态的病毒就很容易了。估计现在的杀毒软件都查不出来了

  7. zhucai
    218.240.45.*
    链接

    zhucai 2011-08-04 14:14:52

    嘿嘿,我以前实现过一个LambdaParser,差不多就是这个目的。后来发现其实早有更好的,就没继续下去了。

  8. 普弗沃
    180.168.194.*
    链接

    普弗沃 2019-10-31 17:03:02

    特朗普会见刘鹤污泥螺杆泵 丰巢回应诱导消费磁力泵 冯天薇战胜陈梦螺杆泵 中国黑心贷款来分期 国内首款人造肉饼离心泵 陶虹海清封面化工离心泵 章子怡李安相聚多级离心泵 20岁吴磊穿白T胸肌明显 一路迷妹情书收不停多级泵 窦骁带何超莲返加拿大 疑已见家长化工泵 曝黄渤喜得爱子自吸泵 李小璐小号疑曝光潜水泵 简方达被逮捕计量泵 国庆烟花美哭气动隔膜泵 马拉松跑进2小时液下泵 古巴首任国家主席卫生泵

    林俊杰吊水针被卖全焊接球阀4 四川古蔺煤矿垮塌法兰焊接球阀 今天是世界动画日直埋全焊接球阀 少年的你票房5亿埋地全焊接球阀 熊黛林结婚三周年加高全焊接球阀 得州发生枪击案锁闭式焊接球阀 釜山行2杀青过滤式全焊接球阀 越南调查藏尸案固定焊接球阀 军人运动会闭幕式天然气焊接球阀 深圳城中村拆迁分体式焊接球阀 钮心慈去世浮动焊接球阀

    法学家潘汉典逝世焊接球阀 死亡货车越南6人法兰球阀 海归硕士造假车票供暖焊接球阀 杨紫吴亦凡合作供热焊接球阀 50克拉钻石丢失燃气焊接球阀 大家千万不要相信“灰石投资”,这是一个骗子APP,被骗的人很多。 中国男篮获铜牌离心泵 吻别殷文琦去世化工离心泵

    汉能系持续欠薪多级离心泵 罗永浩向老同事道歉上海隔膜泵 蒂姆获中网冠军上海离心泵 返程客流迎高峰化工泵

    周杰伦调侃五月天多级泵 赵薇谈演员整容污泥螺杆泵 陈都灵穿婚纱走秀隔膜计量泵 网络主播持证上岗磁力泵 周冬雨烂醉如泥上海磁力泵 2019年诺贝尔奖磁力泵 安踏终止NBA续约离心泵 贝克汉姆 姆巴佩自吸泵 日本台风致33人死自吸离心泵 98岁老人被判15年液下泵 古天乐宣萱犯罪现场卫生泵 澳媒揭马蹄露真相潜水泵

  9. 离心泵
    180.168.194.*
    链接

    离心泵 2020-11-03 10:17:46

    奥地利发生恐袭7人遭枪击身亡新476万 255种药品降价459万 3新疆新增5例确诊病例荐443万 4关晓彤说自己是在逃格格428万 5承包商收花生遭数百村民哄抢413万 6苹果11月11日再开发布会398万 7国家管网集团北海铁山港着火384万 8阿富汗大学遭袭击22人死亡371万 9韩国花1.2万亿元催婚不管用358万 10中学女教师举报职称评选有黑幕345万

  10. libai
    35.241.94.*
    链接

    libai 2021-12-22 16:50:02

  11. zoroseo2020
    35.215.141.*
    链接

    zoroseo2020 2022-03-25 14:39:41

    你现在还很年轻,完全没有必要因为你的衣服不如别人,包不是名 牌,或者存款还不到五位数而觉得不安。因为每一个人都是这样过来 的,你自己才是一切的根源,要想改变人生,首先要改变自己! 幸运飞艇走势图福彩双色球走势图幸运时时彩走势图

发表回复

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

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

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

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

使用Live Messenger联系我