NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:002412

评论

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

8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路

Apache DolphinScheduler

【荣耀智慧服务】快捷服务开发指南

荣耀开发者服务平台

开发者 App 手机 荣耀 honor

常用持续集成工具对比

和牛

软件测试 8月月更

web技术支持| 基于vue3实现自己的组件库第三章:Checkbox组件

anyRTC开发者

Vue Web 音视频 WebRTC Checkbox组件

安克创新每一个“五星好评”背后,有怎样的流程管理?

科技热闻

开源一夏 |Spring MVC深度学习

叶秋学长

spring 开源 8月月更

干货:服务器网卡组技术原理与实践

C++后台开发

服务器 交换机 网卡 C/C++后台开发 C/C++开发

一种新的测试方法:视觉感知测试

和牛

软件测试 8月月更

自助服务知识库是什么?

Geek_da0866

阿里面试官最新分享的Java面试宝典,含8大核心内容讲解

Java工程师

Java 面试 offer

分享几个自动化测试的练手项目

和牛

自动化 软件测试 8月月更

观测云入选 CNCF 云原生全景图

观测云

直播预告|从新手村到魔王城,高效默契的敏捷团队如何炼成

观测云

SpringBoot+Vue+Flowable,模拟一个请假审批流程!

江南一点雨

Java spring springboot flowable

Python命令行输出彩色字符串

和牛

Python 8月月更

不爱生活的段子手不是好设计师|ONES 人物

万事ONES

requests库访问接口

和牛

测试 8月月更

如何搭建知识库,让您的内容更丰富?

Geek_da0866

年薪60万+?这份10万字的面试突击宝典涵盖阿里 P5 工程师~P7 所有技术栈

了不起的程序猿

Java 阿里巴巴 架构 Java 面试 java程序员

聊聊云原生数据平台

观远数据

开源 云原生 8月月更

一文带你了解 HONOR Connect

荣耀开发者服务平台

开发者 教程 荣耀 honor

怎么设计产品手册?用什么设计产品手册?

Baklib

异形屏为led显示行业带来更多希望

Dylan

LED显示屏 led显示屏厂家 异形屏

app自动化测试webview怎么操作

和牛

自动化 软件测试 8月月更

开源生态与AI芯片的碰撞&Dragonfly基于P2P的镜像加速系统 | 第 39-40 期

OpenAnolis小助手

开源 dragonfly p2p 龙蜥社区 AI 芯片

开源一夏 | 使用 JavaScript 和 CSS 的简单图像放大镜

海拥(haiyong.site)

开源 8月月更

怎么学自动化测试

和牛

自动化 软件测试 8月月更

阿里总部最新分享SpringCloud 生态全栈笔记,涵盖了五大核心组件,太强了!

Java工程师

Java spring spring-cloud

Colocate Join :ClickHouse的一种高性能分布式join查询模型

华为云开发者联盟

数据库 后端

接口测试中,应不应该用数据库

和牛

8月月更

烟雾、空气质量、温湿度...自己徒手做个环境检测设备

华为云开发者联盟

开发 传感器 环境监测

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