10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

28天刷完这份内容多大349页的阿里Java面试通关手册,我成功闯进了字节跳动!

Java架构之路

Java 程序员 架构 面试 编程语言

一周信创舆情观察(11.2~11.8)

统小信uos

区块链技术发展需加强核心技术自主创新

CECBC

区块链技术

数字货币是数字经济发展基石

CECBC

数字货币

16张图带你彻底搞懂基数排序

Java架构师迁哥

“双11”正成为区块链场景应用“练兵场”

CECBC

大数据

架构师训练营第四周作业

李日盛

架构

架构师训练营 1 期 -- 第八周笔记

曾彪彪

极客大学架构师训练营

【涂鸦物联网足迹】涂鸦云平台接口列表—智能门锁

IoT云工坊

人工智能 云计算 物联网 API 智能门锁

【得物技术】机器学习在图形验证码识别上的应用

得物技术

学习 算法 测试 图像识别 验证码

iOS底层系统小结

shirley

ios

Maven 入门

少平

Java

架构师训练营 -week08-作业

大刘

极客大学架构师训练营

如何提升存储性能之IO模型和AIO大揭秘

焱融科技

数据 io 存储 焱融科技 分布式文件存储

Nacos配置中心和服务的注册发现

牛初九

微服务 Spring Cloud nacos spring cloud alibaba

《迅雷链精品课》第四课:区块链技术发展趋势

迅雷链

区块链

linux下定位多线程内存越界问题实践总结

小Q

Java Linux 学习 面试 多线程

如果说数据是推动自动驾驶的原动力,那么存储扮演什么角色?

焱融科技

自动驾驶 数据 存储 文件存储 自动驾驶训练

这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!

MySQL 面试 数据库事务 索引结构

你应该知道的数仓安全——默认权限实现共享schema

华为云开发者联盟

数据库 数据 schema

隧道视野效应 - 认知局限

石云升

教育 认知 隧道视野效应

程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?

小Q

Java 数据库 学习 架构 面试

太牛了,腾讯T4Java技术专家手撸的Redis技术笔记,一周内下载量已突破30W。

Java架构之路

Java 程序员 架构 面试 编程语言

Scala-语法特性(一):类型和变量定义

正向成长

scala

手把手教你使用ModelArts的自动学习识别毒蘑菇分类

华为云开发者联盟

学习 AI 图像识别

“先加密后签名”是不是安全?看完这篇就秒懂!

华为云开发者联盟

安全 加密 签名

解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?

阿里云CloudImagine

58个基础案例+2个综合案例带你探索微服务的神秘世界

小Q

Java 学习 编程 面试 开发

从 Android 到 Java:如何从不同视角解决问题?

Java架构师迁哥

架构师训练营第四周学习笔记

李日盛

笔记

Maven 进阶

少平

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