设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

.NET编译器(”Roslyn“)介绍

2014-11-12 10:25| 发布者: joejoe0332| 查看: 3184| 评论: 0|原作者: 开源中国七里香, 白文|来自: oschina

摘要: 一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集。编译器施展它们的魔法,它们必须对所 处理的代码进行深入的理解,不过相关知识不是每个人都需要 ...

介绍

  一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集。编译器施展它们的魔法,它们必须对所处理的代码进行深入的理解,不过相关知识不是每个人都需要知道,除了实现编译器的大法师。因此在转换输出完成后相关的信息就会被遗忘。


  对编译器来说,几十年来一直很好地为我们所用,但只是会用编译器已经不够。我们越来越依赖于集成开发环境(IDE)的特性,比如智能感知、重构、智能重命名、“查找所有引用”和“转到定义”来提高我们的生产率。我们依赖于代码分析工具来提高我们的代码质量,使用代码生成器来帮助构造程序。这些工具变得越聪明,他们需要了解越来越多的深入代码知识,但是这些知识只有编译器知道。这是.NET编译器平台得核心任务(“Roslyn”):打开黑箱,让工具和终端用户共享编译器掌握的关于我们代码的丰富信息。取代不透明的源代码入和对象出的转换器,通过.NET编译器平台(“Roslyn”),编译器变成你可以使用的平台API,以用于你的工具和应用的编码相关的工作。


  让编译器作为平台的过渡,为集中创建代码工具和应用程序大大降低了进入门槛。它创造了许多革新,如:meta-Programming、代码生成和转换,交互使用C#和VB语言,和某些特殊领域的嵌入式C#和VB语言。


  .NET编译器平台(“Roslyn”)SDK预览版包含了最新的新语言对象模型草案,以用于代码生成、分析以及重构。在将来的预览版中,我们希望包含用于脚本以及交互式使用C#和Visual Basic的API支持草案。本文档提供了.NET编译器平台(“Roslyn”)概念上的概览。更多的细节可以在SDK预览版的演练及例子中找到。


揭示编译器API

编译器管道功能区

.NET编译器平台(“Roslyn”)通过提供一个API层,是一个传统编译器管道镜像,向你这样的消费者揭示了C#和Visual Basic编译器的代码分析。


  这条管道的每一部分,现在都是单独的组件。首先,在解析阶段,其中原始码被记号化和解析成不同语言的句法。第二,声明阶段,即从源代码和输入的metadata进行分析,以形成命名符号。下一个阶段,原始码中的标示符(identifier)被匹配成符号(symbol)。最后发布(emit)阶段,所有编译器构建的信息作为一个程序集被发布。





  对应每一个阶段都会有一个对象模型,它允许在该阶段访问相关信息。解析阶段表现为句法树(syntax tree),声明阶段则是分层语法表(hierarchical symbol table),绑定阶段作为一个模型,用以展现编译器进行语义分析后的结果,发布阶段则作为API以产生IL字节码。

  每个编译器将这些组件组合在一起,作为一个单一的端到端的(end-to-end)整体。



  为了保证公开的编译器 API 足以创建世界一流的 IDE 功能,下一代 Visual Studio 将会使用这些增强 C#/VB 体验的语言服务来重建。举个例子,通过句法树来实现代码大纲和格式化功能、通过符号表实现对象浏览器和导航功能、通过语义模型实现重构和“转到定义”,以及使用上述所有模型(包括 emit API) 实现的“编辑”和“Continue” 功能。通过  “Rosyln” 最终用户体验版,这些体验可以在 Visual Studio 2013中感受到。该体验版是为了构建并测试基于.NET编译器平台( “Roslyn”) SDK 开发的应用,并将应用集成到 Visual Studio 中。你也可以用.NET编译器平台( “Roslyn”) API 创建独立于 Visual Studio 的应用,此类应用无需安装最终用户体验版。

API 层

  .NET 编译器平台(“Roslyn”)由两个主要的API层组成,分别是编译器API和工作区API。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部