跟我一起自己写编译器-123.引言

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 1. 引言想做编译器很久了,大学期间留下了不少遗憾,没有实现自己的编译器,没有实现自己的JVM,没有实现自己的数据库,当然这其中有很多原因,比如学院的要求太松,比如自己也不够主动,经过两个多月的学习,笔者的Pava1.0以及Pava编译器已经发布,这篇Blog主要介绍理论,将引导读者一步一步构建一个自己的编译器。 2. 学习重点开发编译器我能学到什么?编译器本身吗?其实不对,我们设计编译器的时候,会遇到很多问题,解决这些问题的方法才是最终重要的东西。 3. 编译器的流程从头开发一个编译器是非常困难的,这涉及到很多知识点,这一部分主要介绍现代编译器的架构。 龙书上把编译器分为前端和后端两个部分,源代码首先经过前端转化为中间代码,中间代码经过后端转化为汇编文件。此后的工作就不是编译器的管理范围了,接下来由汇编器和链接器将汇编文件转化为可执行文件。 12graph LR 源代码 --编译器前端--> 中间代码 --编译器后端--> 汇编文件 --汇编器和链接器--> 可执行文件 为什么编译器要分为两个部分?为什么要分出前端和后端?实际上这样的架构做好以后,只要我们为$m$种源代码编写一个前端,为$n$种架构的机器编写后端,则我们可以组成$n*m$种编译器。当一个新类型的源代码或者新架构的机器出现时,我们可以以更快的速度对编译器进行更新,从而支持这些源代码或机器。另一方面,如果想要对源程序进行优化,编译器前端负责优化吗?还是编译器后端负责优化?这其实是优化器的工作,优化器的输入是中间代码,输出也是中间代码。     阅读全文
fightinggg's avatar
fightinggg 6月 24, 2021

自己动手写Docker

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 容器与开发语言容器随着云计算领域的兴起,容器这个词出现了,但是什么是容器? 容器英文名Container,是基于Linux Namespace以及Cgroups技术实现的具备隔离特性的一组进程。 OK,他是一组具备隔离特性的进程。 虚拟机虚拟机是使用Hypervisor技术提供的虚拟化硬件的操作系统。 OK,虚拟机是一个操作系统。     阅读全文
fightinggg's avatar
fightinggg 4月 16, 2021

HTTP权威指南

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial HTTP权威指南 第一章: HTTP概述媒体类型 因特上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型( MIME type)的数据格式标签。最初设计MIME( Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。 Page: 6     阅读全文
fightinggg's avatar
fightinggg 4月 03, 2021

TCP-IP详解-卷一-协议

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial TCP-IP详解 慎重这是一本工具书!!!!!!!!!! 这本书和我想象中的不太一样,他不偏向于技术,他更加注重细节,更像是一本工具书,先到这里了,不细看了,有需要再补充 21/4/2 新建 ARP协议、IP协议 21/4/4 补充 DNS协议     阅读全文
fightinggg's avatar
fightinggg 4月 02, 2021

计算机网络-自顶向下方法

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 第一章 计算机网络和因特网网络边缘 端系统: 通常把与因特网相连的计算机和其他设备称为端系,因为它们位于因特网的边缘, 故而被称为端系统 ,端系统也称为主机 host , 因为它们容纳(即运行)应用程序,如 Web 浏览器程序、 Web 服务器程序、电子邮件客户程序或电子邮件服务器程序等。 Page: 7 当你理解了端系统中端的意思以后,端到端,点到点的名词就不会搞混了     阅读全文
fightinggg's avatar
fightinggg 3月 31, 2021

设计模式Java版

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 设计模式(JAVA版) 第四章 结构型模式代理模式 在spring中,我们常用的动态代理就是代理模式,代理模式目的是代理对象,增强其原有的功能,例如日志打印,数据库事务等     阅读全文
fightinggg's avatar
fightinggg 1月 20, 2021

深入浅出HTTPS从原理到实战

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial 深入浅出HTTPS从原理到实战     阅读全文
fightinggg's avatar
fightinggg 10月 15, 2020