AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

微软将编译器作为服务公诸于众

  • 2011-11-03
  • 本文字数:1678 字

    阅读完需:约 6 分钟

早先的报道认为 Roslyn 项目只是更好的运行时能够访问的编译器以及 REPL 样式的解释器,但是现在看来它的目的远不止如此。微软公开了整个编译器产品线,期望开发者能够在各个层次上创建出更多类型的工具。

在 Roslyn 项目中有四个“API 层”。微软将其总结如下:

编译器 APIs

编译器层中包含了一些对象模型,这些模型与编译器管道的各个阶段暴露出来的信息——包括句法和语义上的信息——相关。编译器层还包含了对编译器单独调用的展现,其中包括集成的引用、编译器选项以及源代码文件。针对 C#和 Visual Basic 语言有两种不同的 API,但大小差不多。

脚本 APIs

脚本层代表的是 C#或者 Visual Basic 代码片段的运行时执行上下文(runtime execution context)。它包含了一种脚本引擎,这让我们可以把声明和对表达式的求值作为程序中的顶级结构。

工作空间 API

工作空间层是对整个解决方案执行代码分析和重构的起点。它会帮助你把解决方案中所有关于项目的信息组织到一个对象模型中,这让你可以直接访问编译器层的对象模型,而不需要对文件进行解析、配置选项或者管理项目之间的依赖关系。

服务 APIs

服务层中包含了所有 Visual Studio IDE 特性,像智能感知、重构以及代码格式化等。它还包含了各种服务 API,这让用户可以轻松地扩展 Visual Studio。

在四种层中,只有服务 API 对 Visual Studio 组件有很强的依赖关系。其它层都可以在任何一种应用程序中使用,但是工作空间 API 在 Visual Studio 中会更有效地工作。

大多数与代码打交道的开发者——或者是分析代码,或者是重新编写代码——都需要从工作空间层开始。工作空间或者是由宿主(host)提供(像一种 IDE),或者是通过载入解决方案文件手动创建。如果是由宿主提供,那么当解决方案中的项目发生变化时,就会触发事件并通知开发者。

从 ISolution 开始,所有工作空间层下的内容都会表现为一种不变的快照。这让我们可以用线程安全的方式来访问所有包含在解决方案中的项目、文档、语法和符号树。想要做出改变,我们需要复制语法树,并替换需要变更的部分。因为它们都是不可变的,所以我们还可以安全地重用那些没有做出改变的分支。

如果树表现为文本形式,那么在最底层就是源代码本身。编译器的首个编译过程会将其编译成 _ 语法树 _。我们可以从完整的文件创建语法树,也可以从松散的声明或者表达式生成它。在 Roslyn 中,语法树有一种有趣的特性,它完全忠实于最初的源代码,包括所有的注释和空格。这意味着所有语法树都能够转换回源代码,这对于代码生成器和重构工具都是非常重要的功能。

语法树是由语法节点、令牌和一些琐碎的内容(trivia)组成的。语法节点总会是包含其它节点、令牌和琐碎内容的组合。NamespaceDeclarationSyntax、ForStatementSyntax 和 BinaryExpressionSyntax 都是这样的例证。令牌是单独的关键字、符号和标识符。琐碎内容包括空格和注释,这些都是编译器不需要的信息,但是对于重新创建出最初的源代码展现是非常重要的。

变更是针对语法树做出的,变更时会使用了构造器和 ReplaceNode 方法的组合。这个方法让我们不需要手动复制语法树中没有变更的部分。

语法树只能够表现出源代码的词法和句法结构。想要看到它的语义内容,我们需要创建 _ 编译集(compilation)_。编译集是基于一个或多个语法树、一组引用的集合以及所有编译器标识创建的。编译集的主要功能就是要保存符号列表,像命名空间、类型、方法、字段、事件、局部变量以及标签等等。

开发者通常会使用语义模型。他们可以通过把语法树回馈给编译集来创建语义模型,从而用符号数据对其进行注解。然后我们可以对语义模型进行查询,以获得以下信息:

  • 源代码中特定位置引用的符号
  • 所有表达式的结果类型
  • 所有诊断信息,包括错误和警告
  • 变量是如何进入源代码区域,以及如何从其中传出的
  • 对更多不确定问题的答案

在语义模型之上是“控制和数据流分析 API”。这让我们可以迅速获得信息,像在区域中为哪个变量赋值、引用了哪个变量以及该变量是否包含在某个跳转和返回的声明中。

Roslyn CPT 已经提供下载。它需要 Visual Studio 2010 SP 1。

查看英文原文: Microsoft Unveils its Compiler as a Service

2011-11-03 02:232692
用户头像

发布了 340 篇内容, 共 139.2 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

必看!人工智能通识课怎么上?解答你最关心这 6 个问题!(1)

ModelWhale

人工智能 大数据 人工智能通识课

Eon Timer for Mac(好用的时间跟踪定时器)v2.9.15中文激活版

小玖_苹果Mac软件

PullTube for Mac(在线视频下载器)v1.8.5.52中文激活版

小玖_苹果Mac软件

车路云网图安全风险复杂交织

芯盾时代

车联网 物联网 智能汽车

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS Huawei (华为) 定制版

sysin

esxi

MES系统在肉制品加工行业解决方案

万界星空科技

mes 万界星空科技mes 食品MES 食品行业 肉制品加工

转载:GaussDB TPOPS搭建流程

炸鸡配冰淇淋

GaussDB TPOPS

触目惊心,部分行业POI减少超百万!2025年选址挖掘分析建议更新至2024年12月31日最新全国所有类别POI,共6721万个

Geek_f9782a

GIS POI数据

AI算力开足马力,吉林万业智能飞驰

脑极体

AI

商会信息化管理系统(源码+文档+部署+讲解)

深圳亥时科技

天谋科技获授 2024 小米 Vela 全球生态合作伙伴

Apache IoTDB

2024 年度时序数据库 IoTDB 论文总结

Apache IoTDB

必看!人工智能通识课怎么上?解答你最关心这 6 个问题!(3)

ModelWhale

Python 人工智能 大数据

Topaz Photo AI for Mac(人工智能降噪软件)v3.4.3 激活版

小玖_苹果Mac软件

Karmada v1.12 版本发布!单集群应用迁移可维护性增强

华为云原生团队

云计算 容器 云原生

拼多多根据ID取商品详情原数据API接口的开发、运用与收益

科普小能手

数据挖掘 电商 API 接口 API 测试 拼多多API

第81期 | GPTSecurity周报

云起无垠

Data Guardian for Mac(数据加密保护工具)v7.6.9激活版

小玖_苹果Mac软件

探析同济医院科研一体化平台建设(三):科研人才分层培养

ModelWhale

人工智能 大数据 医疗

谜局剧本杀系统(源码+文档+部署+讲解)

深圳亥时科技

解密人工智能:如何改变我们的工作与生活

天津汇柏科技有限公司

AI 人工智能

WebGL在医学领域的应用

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

PowerPhotos for Mac(mac专用图片管理工具)v2.7.2直装版

小玖_苹果Mac软件

CBO 优化的基石——Apache Calcite 统计信息和代价模型详解

端小强

Calcite #Calcite

Apache Calcite Catalog 拾遗之 UDF 函数实现和扩展

端小强

#Calcite

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS NVMe 驱动特殊定制版 (集成驱动版)

sysin

esxi

必看!人工智能通识课怎么上?解答你最关心这 6 个问题!(2)

ModelWhale

人工智能 大数据 教改

MacMagic for Mac(系统垃圾清理软件)v1.2.5激活版

小玖_苹果Mac软件

从企业级 RAG 到 AI Assistant,阿里云 Elasticsearch AI 搜索技术实践

阿里云大数据AI技术

elasticsearch 阿里云 Ops rag AI搜索

【完全免费】开源零代码平台,敲敲云 v2.0 首版本发布

JEECG低代码

零代码 低代码平台 零代码平台

行政审批远程勘验管理系统(源码+文档+部署+讲解)

深圳亥时科技

微软将编译器作为服务公诸于众_.NET_Jonathan Allen_InfoQ精选文章