Hello World
Spiga

PDC 2010:C#与Visual Basic的未来(下)

2010-11-15 17:47 by 老赵, 5239 visits

前几天在PDC 2010会议上Anders Hejlsberg发表了一场名为“The Future of C# and Visual Basic”的演说,谈论了未来C#和VB中最为重要的两个特性:“异步(Async)”及“编译器即服务(Compiler as a Service)”。我现在对这场演讲进行总结,但不会像上次《编程语言的发展趋势及未来方向》那样逐句翻译,而是以Anders的角度使用一种简捷合适的方式表述其完整内容。上一篇Anders对async和await的的实现及效果作更进一步的解释,本篇则是对“编译器即服务”做了些最表面的尝试。

你们某些人可能参加了PDC 2008,那时我谈到了“编译器即服务(Compier as a Service)”,也作了点演示。现在我来演示一点这方面的进展。

编译器即服务的关键,在于目前的编译器是个黑盒,输入源文件,输出.NET程序集。至于它是如何工作的,你不能参与进去。

为了打造更灵活工作过程,我们把编译器展开,把其中的信息展示出来并加以利用,这样就能做到实现元编程、REPL,把C#和VB作为内嵌的DSL,或是根据语言对象模型实现重构,代码生成器等语义相关的工作。

我最后的示例便是些这方面的展示。(译注:这个示例展示的代码非常复杂,但并不重要,它的主要目的便是根据编译器提供的语言对象模型,判断其中的if/else逻辑,并在Visual Studio中显示出轮廓(就像方法的折叠功能一样)。有趣的是,这个演示失败了……)

这里的语言对象模型,就是C#和VB编译器内部所使用的,包含了完整的语义,可用于理解代码的工作目的。有了这些数据,我们就能作一些非常有趣的事情了。例如,我们有两个语言,它们的语法非常接近,不是吗?那么我们理解了其中一个语言,把它转化成另外一个应该也不太困难。

这里还有一个简单的C#到VB的代码转换器(译注:又一个演示),你可以把C#代码复制到剪贴板里,然后粘贴成VB代码。在实现时,只不过遍历了C#语法树,生成另一个对象模型。当然,这个程序也不是太简单,实际上还是要有几千行代码的,这里只是个最简单的实现。那么我这里来试着把那段没法工作的代码,粘贴到VB文件中……砰,这就出现了功能一致的VB代码(掌声)。这就是利用这种技术可以做到的事情。我们也已经发布了CTP版本的编译器,也包含了这些示例。

我答应过,这里是Visual Studio Async CTP的下载地址,它基于Visual Studio 2010安装。其中包含了所有我演示过的示例,有C#也有VB。此外还有一些相关的讲座,例如LINQ,我也会参加下午的语言话题讨论。接下来还有点时间,可以回答一两个问题。

提问:除了这里您提到的这些,C#和VB还会包含其他功能吗?

Anders:呃,现在说起C#和VB最终是什么样的为时尚早,不过的确还有些其他的功能。

提问:我想知道您对于数据并发和数据共享的看法。

Anders:并发有许多令人头痛的地方,你说的就是其中之一。我们在内部有些研究是关于不可变性,状态隔离,纯函数式编程,还有其他一些编译器方面的工作。现在还没有准备好公开,不过我们正在取得些不错的进展。我相信接下来的几十年间并发会一直是个课题,这里的异步功能是其中的一小步,我肯定还会有更多进展。

提问:从反射的视角来说,异步方法和普通方法有什么区别?

Anders:对于反射来说,异步方法就是普通的方法,调用方法也一样。不过它会在第一个await的地方返回,等异步任务完成之后,它再继续执行下去。所以它其实和普通方法没有任何区别,但如果你要知道它什么时候结束,那么就必须去关注它返回的Task对象了。你还看到我写过一些void方法,可能你根本不会在乎它什么时候结束,不过原理上它还是一样的。

就到这里,非常感谢各位参与。

相关文章

Creative Commons License

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

Add your comment

9 条回复

  1. 老赵
    admin
    链接

    老赵 2010-11-15 17:48:58

    这篇不给力,所以我一直懒得听写出来。不过好像为了内容的完整性,还是写了算了……

  2. infinte
    218.104.71.*
    链接

    infinte 2010-11-15 18:13:20

    终于补完了,typeof.net全文转……

  3. Duron800
    220.113.18.*
    链接

    Duron800 2010-11-15 22:43:37

    不烂尾好。字数补丁。

  4. luotong
    115.50.159.*
    链接

    luotong 2010-11-17 19:50:36

    编译器的下载链接呢?前两篇不是说最后会提供嘛

  5. luotong
    115.50.159.*
    链接

    luotong 2010-11-17 20:10:44

    我搜了一下,不知是不是这个。编译后的程序在没装Visual Studio Async CTP的机器上运行会不会有兼容问题?

  6. 老赵
    admin
    链接

    老赵 2010-11-17 20:52:27

    @luotong

    幻灯片上都那么大的字了……

  7. abc
    61.135.195.*
    链接

    abc 2010-11-30 15:14:18

    Compiler as a Service 实在是太不给力了

  8. 链接

    shuozi 2010-12-17 09:00:52

    c#的发展真"给力"(没有更好的词了吗) 谁再说语言不重要,我跟谁急!

  9. 贝壳里的海
    202.103.241.*
    链接

    贝壳里的海 2011-01-01 20:35:54

    技术牛人,给力。顶の~-

发表回复

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

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

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

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

使用Live Messenger联系我