Electronic Joint Business

Solution for E-Business

.NET 编译平台 (Roslyn) 概述

文章评价: 一直以来,编译器都按黑盒的方式运作 — 这头放入源代码,中间部分施展魔法,在另一头就会生成目标文件或程序集。当编译器施展魔法时,它建立了对代码的深刻理解,但这些知识除了实现编译器的巫师外,旁人无法掌握。一旦生成编译输出,这些信息就被彻底忘却。几十年来,这种方式一直运作良好,但现在却不能满足需要了。 如今为了提高生产力, 人们越来越依赖于集成开发环境(IDE)所提供的智能感知、重构、智能重命名、 “查找所有引用” 和 “转到定义” 等功能。我们用代码分析工具来改善代码质量,用代码生成器来协助代码构建。想要让这些工具更聪明,就需要它们能更多地访问编译器,同时也需要对编译器中深厚的代码处理知识有更多的了解。 这就是 .NET 编译器平台(“Roslyn”)的核心使命:打开黑盒让工具和用户可以分享编译器处理代码时的大量信息。与 “源代码—目标文件”的直译方式不同,Roslyn 使编译器成为平台,这意味着工具和应用程序可以通过 API 来处理代码相关的任务。 将编译器过渡到平台,这大大降低了构建代码相关(code focused)工具与程序的门槛,在许多方面推动了创新,包括:元编程、代码生成、代码转化、C#\VB 的交互式使用、领域特定语言内嵌 C#\VB 等等。 在 .NET 编译器平台 (“Roslyn”) SDK 预览版中包括了最新的语言对象模型,可用于代码生成、代码分析与重构。我们还包括了一些 API 草稿,以便在后续的版本中实现支持脚本、C#\VB的交互式使用。本文是对 .NET 编译器平台(“Roslyn”)的概念性描述,更多情况可以参考预览版 SDK 中的演示与示例。 探索编译器 API .NET 编译器平台提供了与传统的编译器管线一一对应的 API 层,从而使用户可以使用 C# 和 VB 编译器的代码分析功能。 编译器管线功能区 现在编译器管线的每个阶段都是一个独立的组件。首先是解析(parse)阶段,在这儿源代码被标记化并被解析成遵循语法(grammar)规则的句法(synatx)。第二阶段是声明(declaration)阶段,源代码中的声明和导入的元数据在这进行分析以形成命名符号。接下来是绑定(bind)阶段,代码中的标识符在这与符号进行匹配。最后是发布(emit)阶段,编译器所建立的所有信息在发布成为程序集。 每个阶段都有相对应的对象模型,通过这些模型可以访问每个阶段的信息。解析阶段公开的是句法树(Syntax Tree),声明阶段则是层级符号表,绑定阶段则是反应编译器语义分析结果的模型,而发布阶段,则有相应的 API 来生成 IL 字节码。 每种语言编译器都将这些组件从端到端作为整体组合起来。为了保证公开的编译器 API 足以创建世界一流的 […]

, , , , , , , ,

Comments are currently closed.