Table of Contents

编译原理 Compilers

关于编程语言的想法

LLVM的内容会让你对编译器有更深的理解


编译时机

1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。
2、JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。
3、自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比JIT编译迟,先让程序“以某种式”先运行起来,收集一些信息之后再做动态编译。这样的编译可以更加优化。

交叉编译

交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。交叉编译器在目标系统平台(开发出来的应用程序序所运行的平台)难以或不容易编译时非常有用。

代码规范 Code Style

命名规范

Pascal 命名法每一个单词首字母都采用大写字母的命名格式,也有人称之为“大驼峰式命名法”(Upper Camel Case),为驼峰式命名法的子集。例如:FirstName、LastName、CamelCase

骆驼命名法(小驼峰):第一个单字以小写字母开始;第二个单字的首字母大写,例如:firstName、lastName。

某些语言,命名方式竟然会影响到逻辑(命名大小写影响可见性)

代码自动格式化

  1. Go: 自带
  2. C/C++: clang-format
  3. Python 3: black

数值编码

代码分析

  1. lint:在计算机科学中,lint是一种(所以是一种统称,不是某一个特定的程序)工具程序的名称,它用来标记源代码中,某些可疑的、不具结构性(可能造成bug)的段落。它是一种静态程序分析工具,最早适用于C语言,在UNIX平台上开发出来。后来它成为通用术语,可用于描述在任何一种计算机程序语言中,用来标记源代码中有疑义段落的工具。Wikipedia

编译阶段

预处理

汇编代码

目标机器代码

  1. obj文件(Windows)
  2. o文件(Linux)

链接

Misc