代码生成

在计算机科学中，代码生成是计算机根据规则和算法生成特定的代码，主要分为编译过程代码生成（Compile）、开发过程代码生成（Low code）。

编译过程代码生成（Compile）
代码生成是代码编译过程中的其中一个环节。在这个环节中，代码生成器会将某中间语言（IR）转换为机器可以执行的形式如机器码，或者另一门语言，如C语言代码。

工业级的编译器一般存在多个编译环节（Compiler pass）。第一个环节通常会将源代码转换成抽象语法树，而抽象语法树随后又会被转换成某种中间语言（IR）。编译器的中间环节会对这门中间语言进行各种变换以优化程序的性能。这种具有阶段性的编译方式，其优势在于允许编译器开发者复用前段和中端的代码，同时也降低了编译器的开发难度，因为一些优化算法的执行条件需要由其他优化算法完成，也因为一些算法需要一次次地重复执行。由于以上原因，复用性以及重复性都相对较低的代码生成器，一般位于编译过程中的最后几个环节。

主要工作
除了将中间语言转换成线性的机器码序列这项基本工作，典型的代码生成器也会试图优化生成出来的代码。

工业级编译器的代码生成阶段一般包括了：
 指令选择：决定了编译器使用哪些指令来表达中间语言中的某一操作。
 指令调度：决定了编译器以何种顺序放置这些选择好的指令。对于有流水线的目标机器，这个阶段有着关键影响。
 寄存器分配：目的是将每个变量与处理器上的寄存器一一对应。
 如果有相关需求，生成调试数据并且将其嵌入二进制文件中，以方便程序员调试程序。

运行时编译（JIT） 
在即时编译（JIT）等场景下，会要求程序在运行时生成代码，而生成代码的时间和空间效率在这种情况下都极其重要。例如说，当有程序在运行时解释正则表达式，并根据该正则表达式生成代码时，通常该程序会先生成非确定有限状态自动机而不是确定有限状态自动机，因为通常前者的创建速度以及占用的内存空间等属性往往会比后者更为优秀。

开发过程代码生成（Low code） 
在软件工程中，对于重复编码，可以利用模板技术或者AI实现代码生成，减少开发工作量。例如，在WEB开发领域，CRUD一般都是重复的、机械的劳动，利用拖拽式、配置式等方式可以近乎0代码实现功能，低代码开发平台逐渐在市场上流行起来。

AI 代码生成 
GitHub Copilot 是一个基于 OpenAI 的 GPT-3 模型开发的代码生成工具。它在 Visual Studio Code中作为一个插件提供，并能够生成包括 Python、JavaScript、Java、C++、Go、TypeScript、Ruby和其他语言在内的代码建议。

元数据代码生成器

元数据（Metadata）， 又称中介数据、中继数据，为描述数据的数据（data about data）。fieldmeta是基于springboot的字段元数据管理，通用代码生成框架。通过配置元数据，描述数据库字段、实体字段、页面字段的属性和关系的数据，以及配置字段映射规则、约束校验规则、显示查询规则等，再配合模板技术，实现代码生成。可以作为一个通用代码生成的框架，适应与任何框架和语言，比如经典技术选型：springboot+ mybaits+ ant-design，亦或是ruby、C++等语言，然后制订相关程序代码的模板和生成规则，就可方便的生成CRUD代码。 可以作为一个快速开发平台的引擎，通过对字段的配置，自动实现CRUD功能。 可以作为一个模板超市，包括admin UI模板和服务器后端模板，定位于amdin系统的快速开发。

参考文

编译原理
机器码
編譯器最佳化