写点什么

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

评论

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

大数据基石之Hadoop的读写流程与2.X架构

编程江湖

大数据 hadoop

Linux系统学习攻略《Linux一学就会》:Linux系统启动原理及故障排除

侠盗安全

Linux linux运维 运维工程师 云计算架构师 linux电子书

什么是 Java Marker Interface(标记接口)

汪子熙

Java jdk volatile 28天写作 12月日更

TDSQL | ‘‘微盟式’’SaaS,让商业变得更智慧

腾讯云数据库

tdsql 国产数据库

TDSQL | 云原生时代的数据库技术革命

腾讯云数据库

tdsql 国产数据库

Android C++系列:Linux Socket编程(一)预备知识

轻口味

android 28天写作 12月日更

大数据开发之Spark和Flink的对比(转载)

@零度

大数据 flink spark

java开发之Java ORM 框架推荐

@零度

Java Java ORM ​ObjectiveSQL

Linux之pwd命令

入门小站

Linux

在线JSON转GraphQL工具

入门小站

工具

Redis(二):内存模型及回收算法

IT巅峰技术

Java redis 架构师 分布式缓存 redis分布式

权威认可!腾讯云TDSQL通过信通院数据库服务商运维运营服务能力评估

腾讯云数据库

tdsql 国产数据库

京东白条数据架构进化之路:要在数据的不确定性中探索架构的稳定性

SphereEx

数据库 开源 架构 ShardingSphere 京东白条

lancet: 一个全面、高效、可复用的go语言工具函数库

柳叶刀

Go web go modules

智慧园区综合管理平台解决方案,智慧平安社区搭建

电微13828808271

区块链电子合同应用平台开发,区块链电子合同解决方案

电微13828808271

架构实战营-毕业总结

李焕之

详细解读MySQL高性能优化

秋水

MySQL性能优化 内容合集 签约计划第二季

我还是很怀念谷歌

张老蔫

28天写作

TDSQL在核心交易系统领域的联合解决方案

腾讯云数据库

tdsql 国产数据库

前端开发MySQL 数据库之数据引擎

@零度

MySQL 前端

再获信通院权威认证,优等生华为云GaussDB数据库凭什么?

华为云开发者联盟

数据库 opengauss 华为云 GaussDB 信通院

基于SSM+Shiro+Bootstrap实现用户权限管理系统

Bug终结者

Java bootstrap ssm shiro

架构训练营毕业设计-电商秒杀系统

李焕之

使用Git将本地项目添加至Git仓库

Bug终结者

Java 实用工具 gitee git version

如何利用测试自动化,实现 DevOps?

飞算JavaAI开发助手

运营商行业软件开发| 内容合集

鲸品堂

通信 运营商 技术专题合集

Linux之mkdir命令

入门小站

Linux

【SpringCloud技术专题】「Gateway网关系列」(2)微服务网关服务的Gateway功能配置指南分析

码界西柚

api 网关 SpringCloud Gateway netty 12月日更 服务网关

MySQL性能优化:EXPLAIN 执行计划与join

秋水

MySQL性能优化 执行计划 内容合集 签约计划第二季

讨论:低代码集成OA/ERP/MES系统,或将是企业应用生态的重要一环?

优秀

低代码

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