写点什么

Anders Hejlsberg 讲解现代编译器结构

  • 2016-06-28
  • 本文字数:873 字

    阅读完需:约 3 分钟

《编译原理》又名龙书,是编译器结构的主要参考书,首次出版于 1986 年。 Anders Hejlsberg,以从事 Turbo Pascal,Delphi,C#和 TypeScript 的开发而闻名,在 Channel 9 的采访中讲解当前的编译器结构和 30 年前的不同。

经典编译器的主要特征是顺序处理输入,各个阶段都可以看作是管道的组件。

复制代码
词法分析 -> 语法分析 -> 类型检查 -> 代码生成 -> Emitter

在过去的十年里,需要 IDE 和工具来提供诸如自动完成,重构,代码导航和静态分析等等功能的需求逐渐增强。微软的用户研究表明这些特性必须低于 100ms 的延迟,否则的话就会被认为太慢。这和编译一个中型解决方案的项目时间可能会花费超过 1 分钟不一样。

为了在 IDE 里提供快速的反馈,编译器必须尽可能的限制实时处理的量。这意味着在每次键入的时候编译整个程序是不可行的。相反,编辑器仅仅构建足够给用户提供答案的信息量。

快速响应不仅仅是通过限制处理内容,还通过尽可能的重用老的数据结构。每当用户键入一个新的字符,内存中的所有数据结构可以认为是抹去的。然后,为了提高响应时间,所有没有修改的东西都可以重用。诸如抽象语法树(AST),如果其所代表的源文件没有被修改就可以被重用。

即使数据结构被修改了,重用也是可以的。持久化的数据结构是不可变的,通过创建和返回新的实例来实现修改,从而保持底层的部分不被修改。以抽象语法树为例,意味着修改当前的节点和该节点对应的父节点直到根节点为止。树的其他部分,保持原状并在创建新的实例的时候被重用。

回到几年前,IDE 中的实时特性需求导致C#编译器和IDE 特性实现中的代码重复。这也是创建Roslyn 背后的主要原因之一。Roslyn 的设计出发点就是能在IDE 和命令行中同样使用。

Roslyn 和 Seth 在最后讨论了学习现代编译器结构的资源, Roslyn TypeScript 项目是很好的实例,且都在 Github 上开源。

查看英文原文: Anders Hejlsberg Explains Modern Compiler Construction


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-28 19:002824

评论

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

HarmonyOS NEXT 基于原生能力获取视频缩略图

威哥爱编程

HarmonyOS ArkTS HarmonyOS框架 HarmonyOS NEXT

《Operating System Concepts》阅读笔记:p473-p480

codists

操作系统

HarmonyOS NEXT 实现拖动卡片背景模糊效果

威哥爱编程

HarmonyOS HarmonyOS框架 HarmonyOS NEXT

YashanDB健康检查

YashanDB

数据库 yashandb

YashanDB dump

YashanDB

数据库 yashandb

08.面向对象的特性

杨充

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

KaiwuDB

数据库 KaiwuDB

SvelteKit 最新中文文档教程(9)—— 部署静态站点与单页应用

冴羽

vue.js 前端 React Svelte SvelteKit

AI招聘APP的技术难点

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

AI智能体 AI招聘 软件外包公司

如何在云效中使用 DeepSeek 等大模型实现 AI 智能评审

阿里云云效

阿里云 云原生 云效

YashanDB巡检

YashanDB

数据库 yashandb

低代码实验案例设计图文操作指南!4C大赛 AI 通识教育实验创新微课赛道火热报名中

ModelWhale

#人工智能 中国大学生计算机设计大赛 4C大赛 #微课 #教育

2025杭州国际安防产品博览会(浙江安博会)

AIOTE智博会

安博会 浙江安博会

AI招聘APP的上线

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

AI智能体 AI招聘 软件外包公司

P6户外LED显示屏的特点有哪些?

Dylan

广告 LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

金三银四真实面经分享

王中阳Go

Go 面试 后端

淘宝商品SKU信息抓取实战:5步搞定API封装(附代码)

代码忍者

淘宝API接口

如何在IDEA中借助深度思考模型 QwQ 提高编码效率?

阿里云云效

阿里云 云原生 通义灵码

哈尔滨网络安全等级保护测评

黑龙江陆陆信息测评部

AI招聘APP的技术框架

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

AI应用 AI招聘 软件外包公司

北京国家会计学院“数智财务高端人才”培养项目启动报名!

用友智能财务

财务 会计

AI招聘APP的核心功能

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

AI智能体 AI招聘 软件外包公司

Rust 开发者必备:三分钟搞定视频缩略图生成

Yeauty

rust ffmpeg Video media audio

广告发布平台(源码+文档+讲解+演示)

深圳亥时科技

HarmonyOS:@AnimatableExtend 装饰器自学指南

李游Leo

HarmonyOS HarmonyOS NEXT

Apache SeaTunnel同步MySQL到Doris的优化策略

Apache SeaTunnel

年薪50W+的测试开发工程师,都在偷偷学这些技能

测试人

软件测试

如何在IDEA中借助深度思考模型 QwQ 提高编码效率?

阿里巴巴云原生

阿里云 云原生 通义灵码

FeedbackStream:8 分钟创建 AI 面试智能体;Moshi 开源图像理解实时语音模型 MoshiVis 丨日报

声网

最佳实践 | 在 EMR Serverless Spark 中实现 Doris 读写操作

阿里云大数据AI技术

大数据 spark Serverless 云原生 EMR

Anders Hejlsberg讲解现代编译器结构_.NET_Pierre-Luc Maheu_InfoQ精选文章