您的位置 首页 培训

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

这是AndersHejlsberg(不用介绍这是谁了吧)在比利时TechDays2010所做的开场演讲。由于最近我在博客上关于语言的讨论比较多,出于应景,也打算将Anders的演讲完整地听写出来。

  这是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会截获一对多或1对1联系所需求的信息,因而在这儿言语是在运转的时分,动态为本身生成了代码。

  完成这点在动态言语里天然会更简略一些,由于它们没有编译期和履行期的差异。静态类型言语在这方面会比较困难。例如在C#或Java里运用ORM时,传统的做法是让代码生成器去调查数据库,生成一大堆代码,然后再编译,有些杂乱。不过我经常想着去改进这一点。

    

 

  其间一种做法,是咱们正在尽力完成的“编译器即服务”,我现在先对它进行一些简略的介绍。传统的编译器像是一个黑盒,你在一端输入代码,而另一端便会生成.NET程序集或是目标代码等等。而这个黑盒却很奥秘,你现在很难参加或了解它的作业。

  你能够幻想,一些代码往往是不包含在源文件中的。假如你想要交互式编程的体会,例如一个交互式的提示符,那么代码不是保存在源文件中而是由用户输入的。假如您在完成一个DSL,例如Windows Workflow或是Biztalk,则或许用C#或VB完成了一些需求动态履行的规矩,它们也不是保存在源文件中,而或许是放在XML特点中的。此刻你想编译它们却做不到,你仍是要把它们放入源文件,这就变的杂乱了。

    

 

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

  例如,你能够给它一小段代码,让它回来一段可履行的程序,或是一个能够辨认或重写的解析树。这么做能够让静态类型言语取得许多有用的功用,例如元编程,以及可操作的完好的目标模型等等。咱们正执政这方面尽力,我也会在下午1点的C# 4.0讲演中议论更多这方面的内容。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/114861.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部