Meta Programming
通过宏、反射、元类、装饰器、模板和 AST 等示例,介绍代码生成与元编程的常见方式及其维护成本。
通过宏、反射、元类、装饰器、模板和 AST 等示例,介绍代码生成与元编程的常见方式及其维护成本。
剖析从高层框架到硬件的GPU计算技术栈,理解其组件与协作机制。
梳理 Clang PGO 的插桩、运行数据采集与反馈编译流程,结合示例说明 LLVM 如何利用 profile 优化代码。
通过 C 内存泄漏示例介绍 Valgrind Memcheck 的使用,说明如何阅读泄漏报告、定位分配点并修复问题。
通过结构体字段求和示例,理解 Zig comptime 的编译期计算、反射与代码生成能力。
梳理 LLVM IR 中栈、全局与堆内存的生命周期,以及 SSA 值和 lifetime intrinsics 的作用。
LLVM And Popular Compilers 大多数人印象中的的程序典型编译流程: 预处理 ( Preprocessing ) 编译 ( Compilation ) 汇编 ( Assemble ) 链接 ( Linking ) 这也是 Unix 操作系统上 GCC 编译器编译 C 代码的编译流程。 LLVM LLVM 则是一个 modulized 的编译器基础设施,提供了编译器开发所需的各种工具和库。 LLVM 有自己的语言,LLVM assembly language,有自己的一套语法和结构,是一个静态单赋值的代码表示(code representation),同时提供了类型安全、接近于汇编(low level)的运算操作,还有很强的灵活性,几乎可以表示一切其他语言。 设计成三种等价的不同形式来使用。 LLVM assembly language 是文件文本存储格式。文件后缀是 .ll。 示例 LLVM bitcode LLVM bitcode 是文件二进制存储格式,文件后缀是 .bc。 LLVM IR (Intermediate Representation) LLVM IR 是代码表示在内存中的表示。因为通常用作其他语言实现的中间表示,所以被称作 IR ,官方设计目标是成为 universal IR。 下面统一称作 LLVM IR。 LLVM 项目提供了完善的工具链,提供以下编译能力: AOT(Ahead of Time) 静态编译器,提前把 LLVM IR 编译到可执行文件,直接运行 JIT(Just in Time) 动态解释器,运行时先编译,再执行 Interpreter 动态解释器,运行时直接解释执行 LLVM IR ...