阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

评论

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

小程序生成App:可跨平台开发的移动应用开发框架

没有用户名丶

Falco操作系统安全威胁监测利器

统信软件

安全 操作系统

瓴羊Quick BI报表工具助企业洞察市场趋势,让数据说话

对不起该用户已成仙‖

SpringBoot3分库分表

Java 架构 springboot SpringBoot3

Downie 4.6.24 支持多网站视频下载工具for Mac ,一键直装永久使用

晴雯哥

基金公司数据治理实践,打造“点线面体”的数据治理体系

袋鼠云数栈

数据中台 数字化转型 数据治理 基金 数据中台数据治理

山东布谷科技直播平台搭建游戏开发技术分享:数据存储的重要意义

山东布谷科技

软件开发 游戏 数据存储 源码搭建 直播平台搭建

资讯速递 | ArkUI-X 预览版已正式开源!

OpenHarmony开发者

OpenHarmony

揭秘华为云GaussDB(for Redis)丨大key治理

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

Programming abstractions in C阅读笔记:p91-p106

codists

新利好带动 POSE 持续上扬,月内几近翻倍

大瞿科技

Hutool:一行代码搞定数据脱敏 | 京东云技术团队

京东科技开发者

Jackson hutool 数据脱敏 企业号 8 月 PK 榜

倒计时 1 天!浙江大学、乘云数字、阿里云等多位技术专家教授解读最新运维技术

OpenAnolis小助手

Meetup 龙蜥活动

Spring 架构

小万哥

Java spring 后端 springboot SpringCloud

新利好带动 POSE 持续上扬,月内几近翻倍

股市老人

新利好带动 POSE 持续上扬,月内几近翻倍

EOSdreamer111

苹果Mac软件KeyShot 2023.2 Pro 高级渲染和动画制作,KeyShot 2023.2 Pro最新激活完整版教程

晴雯哥

为MySQL新增一张performance_schema表 | StoneDB 技术分享会 #4

StoneDB

MySQL 数据库 HTAP StoneDB

字节跳动基于火山引擎DataLeap的一站式数据治理架构实践

字节跳动数据平台

大数据 数据中台 企业号 8 月 PK 榜

2023 年最新、最全、最实用的 Java 岗面试真题,已收录 GitHub

采菊东篱下

程序员 java面试

Royal TSX for Mac(远程管理软件) v5.1.2激活版

mac

苹果mac Windows软件 Royal TSX 远程连接管理工具

百度刘林:渗透深层企业经营 AIGC将为千行百业带来变革机会

百度Geek说

人工智能 百度 AIGC 企业号 8 月 PK 榜

全彩LED电子屏的驱动器有哪几种?

Dylan

电压电流 驱动 恒流源输出电路 LED显示屏 全彩LED显示屏

14. 练习:登录注册系统

茶桁

Python 练习 登录注册

陪跑多年,Postgres终崛起封王!

这我可不懂

数据库 postgresql postgres

麒麟云体验优化之Pod列表展示优化

麒麟云

Kubernetes 云原生 容器云 银河麒麟 云原生操作系统

功能更新 | FinClip 7月产品大事记

FinClip

储能pcb的布局注意事项与制造难点

华秋电子

CI+JUnit5并发单测机制创新实践 | 京东物流技术团队

京东科技开发者

测试 高并发 单元测试 并发测试 企业号 8 月 PK 榜

文盘Rust -- Mutex解决并发写文件乱序问题 | 京东云技术团队

京东科技开发者

rust mutex 高并发读,高并发写 企业号 8 月 PK 榜

OpenHarmony社区运营报告(2023年7月)

OpenHarmony开发者

OpenHarmony

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