核心研究方向

编程语言与编译器

🎯

研究方向概览

编程语言理论与编译器优化是计算机科学中兼具理论深度与工程挑战的研究方向。我们关注现代类型系统(Hindley-Milner、依赖类型、线性类型)对程序正确性的保障机制,探索 Rust 所有权模型在系统软件开发中的安全性与性能权衡,并深入研究 LLVM/MLIR 编译框架的中间表示优化与领域特定编译器(DSL Compiler)的设计方法论。编程语言研究位于计算机科学的核心——它既是形式逻辑与证明论的应用领域,也是连接人类思维与机器执行的最关键抽象层。

近年来,编程语言领域正经历一个「类型系统复兴」——越来越多的工业级语言(Rust、Swift、Kotlin、TypeScript)将曾经仅限于学术界的高级类型系统特性纳入主流,这标志着软件工程行业对「正确性优先于开发速度」理念的集体认同。与此同时,AI辅助编程(如GitHub Copilot)的兴起为编程语言研究带来了全新的问题域:如何设计类型系统以更好地支持AI生成的代码验证?如何利用编译器静态分析为AI代码生成提供更精确的上下文?这些问题正在重新定义编程语言研究的边界。

核心技术领域

  • Rust
  • LLVM
  • MLIR
  • 类型系统
  • Go
  • Haskell
  • OCaml
  • JIT编译
  • 程序分析
  • 形式化验证

研究子方向

  • 类型系统与程序正确性 — 系统性地研究了 Hindley-Milner 类型推导算法及其扩展(如 GHC 的 OutsideIn(X) 约束求解器)。深入分析了依赖类型(Dependent Types)在 Idris/Agda 等语言中的表达能力与类型检查的可判定性边界。探索了 Refinement Types(Liquid Haskell)在实用程序验证中的应用,通过类型级别的精化谓词在编译期排除除零错误、数组越界等运行时异常。在工业场景中,使用 Rust 的类型系统实现了零成本抽象的网络协议栈,通过 Phantom Type 与 Type State 模式在类型层面编码了协议状态机。
  • Rust 所有权模型研究 — 深入研究了 Rust 所有权(Ownership)、借用(Borrowing)与生命周期(Lifetime)三大核心机制的语义模型。从分离逻辑(Separation Logic)的视角形式化了 Rust 的借用检查器(Borrow Checker)所执行的别名分析(Alias Analysis),证明了在当前规则下 Rust 程序不存在数据竞争(Data Race)的性质。探索了 Rust 的 Unsafe Rust 边界对安全性的影响,并提出了基于 Miri 动态检测与 Prusti 静态验证的多层防护方案。
  • LLVM 中间表示优化 — 深入研究了 LLVM IR 的优化 Pass Pipeline 设计,包括 GVN(Global Value Numbering)、LICM(Loop Invariant Code Motion)与 SLP(Superword Level Parallelism)自动向量化等关键优化 Pass 的内部实现。分析了 ThinLTO(Link Time Optimization)在跨模块内联与死代码消除方面的性能收益与编译时间开销。针对数据库查询引擎场景,提出了基于 Profile-Guided Optimization(PGO)的 JIT 编译优化策略。
  • MLIR 编译器基础设施 — 系统性地研究了 MLIR(Multi-Level Intermediate Representation)的 Dialect 扩展机制与渐进式 lowering 管线。探索了 MLIR 在领域特定加速器(如 NPU/TPU)编译栈中的应用,包括从高级 Tensor Dialect 到低级 Affine/SCF Dialect 的多层中间表示转换。在 Apache TVM 与 IREE 编译器中实践了 MLIR 驱动的端到端编译优化流程。
  • JIT 编译与查询引擎 — 研究了 JIT(Just-In-Time)编译技术在数据库查询引擎中的应用。深入分析了 Hyper、Umbra 等系统中基于 LLVM 的查询编译策略,比较了 Transpilation(SQL→C++→LLVM IR)与直接生成 LLVM IR 两种路径的编译时间与执行效率。在 PostgreSQL 上实现了基于 LLVM JIT 的表达式求值加速模块,将复杂分析查询的执行时间缩短了 35%。

理论基础与类型论分析

类型系统的理论基础根植于数理逻辑与λ演算。Curry-Howard同构(Curry-Howard Isomorphism)揭示了编程语言的类型系统与直觉主义逻辑的证明系统之间的深刻对应关系:类型对应于命题,程序对应于证明,程序类型检查对应于证明验证。这一同构不仅是理论上的优雅发现,更直接指导了依赖类型(Dependent Types)语言的设计——在Coq/Agda/Idris等语言中,类型可以依赖于值,从而能够在类型层面表达任意精度的规约,实现「程序即证明」的范式。

线性类型(Linear Types)和仿射类型(Affine Types)是Rust所有权模型的逻辑基础。在线性逻辑(Linear Logic)中,每个假设恰好被使用一次——这直接对应了Rust的所有权规则:每个值恰好有一个所有者。通过将线性逻辑的「使用恰好一次」弱化为仿射逻辑的「使用最多一次」,Rust在保持内存安全的同时允许了更灵活的资源管理模式。从分离逻辑(Separation Logic)的视角,Rust的借用检查器本质上是在执行一种受限的别名分析——通过静态地追踪每个引用的生命周期与可变性,确保在任何程序点,一个内存位置要么有多个不可变引用,要么有唯一一个可变引用。

工程挑战与优化策略

编译器优化在工程实践中面临「优化效果-编译时间」的经典权衡。LLVM的优化Pass Pipeline包含了数百个Pass,在-O3级别下编译大型C++项目可能需要数十分钟。我们的优化策略包括:(1) ThinLTO的增量编译优化——通过将全程序优化(Whole-Program Optimization)拆分为模块内优化与跨模块摘要优化两个阶段,在保留大部分跨模块优化收益的同时大幅缩短编译时间;(2) PGO(Profile-Guided Optimization)——利用生产环境的运行时Profile数据指导编译优化决策,使编译器能够针对实际的热路径进行更有针对性的优化;(3) MLIR的渐进式Lowering策略——在多层中间表示之间逐步转换,每一层Lowering都可以应用特定领域的优化Pass,从而在保持编译流水线模块化的同时实现深度的领域特定优化。

未来研究方向

编程语言与编译器的未来研究将围绕以下方向展开:一是AI与编译器的深度融合——利用机器学习模型自动生成优化Pass的组合策略(AutoTVM/AutoSchedule),替代手工调优的编译器启发式规则;二是形式化验证的工业化——将TLA+/Coq/Lean等形式化验证工具集成到主流语言的开发工作流中,降低形式化验证的使用门槛;三是领域特定语言(DSL)的爆发——随着AI、大数据、量子计算等新兴领域的发展,针对特定问题域设计高度优化的DSL将成为提升开发效率与运行性能的关键手段;四是WebAssembly的生态扩展——探索Wasm在浏览器之外的应用场景(边缘计算、插件系统、Serverless),并通过WASI(WebAssembly System Interface)标准化系统调用接口。这些方向体现了编程语言研究从「通用语言设计」向「领域特定工具链」演进的总体趋势。

代表性研究工作

在 Rust 形式化验证方面,我们使用分离逻辑对 Rust 的所有权模型进行了语义建模,证明了在 Safe Rust 子集中程序天然满足内存安全与数据竞争自由的强性质。该工作已整理为技术报告,并在 Rust 社区引发了关于进一步扩展类型系统以支持更丰富并发模式的讨论。

在数据库 JIT 编译优化方面,我们基于 LLVM 实现的 PostgreSQL 表达式求值加速模块在 TPC-H 22 条查询的端到端测试中,将 Q1、Q6 等计算密集型查询的执行时间缩短了 35-50%,JIT 编译的额外开销控制在查询执行时间的 5% 以内。

返回研究领域