Evergreen 是一种将显式契约、检查不变性和内存控制整合到单一框架中的系统级编程语言。与许多仅依赖运行时检查或基础类型系统的语言不同,Evergreen 要求开发者写下代码中必须满足的条件——例如前置条件、后置条件和数据不变性——然后要求编译器去证明这些义务。例如,开发者可以定义一个保证非零的类型;编译器随后会确保任何分配给该类型的数值在构造的那一刻都满足该不变性。

该语言的安全模型建立在“可证明”代码的概念之上。这是通过使用依赖类型和形式化证明实现的,这些技术允许编译器在执行前验证逻辑。Evergreen 的一个核心设计目标是确保这些证明不会影响最终可执行文件的性能。该语言利用“理想计算”和通过归纳法得出的引理,这些内容在检查阶段后会被擦除,这意味着用于证明安全性的数学工作是在编译时完成的,从而使运行时代码保持精简且高效。

Evergreen 旨在解决现有系统级语言(如 Rust)中的特定局限性。虽然它采用了所有权和借用等概念,但它旨在提供更灵活的内存访问方式。例如,Evergreen 的开发者指出,该语言打算通过使用基于“平面”和“节点”树的内存模型,允许那些 Rust 的借用检查器可能会拒绝的操作——例如在向量中交换两个可变引用。然而,该项目目前仍处于早期实验阶段。文档仍在开发中,核心重点仍在于建立基础语法和证明机制,而非构建生产就绪的生态系统或库套件。

由于该项目尚处于起步阶段,关于其实际实现的几个问题仍待解决。证明器(prover)的具体逻辑——是依赖 SAT 求解还是其他形式化方法——尚未在公开规范中完全详述。此外,与任何新的系统级语言一样,Evergreen 的长期可行性将取决于其构建功能性库生态系统以及与现有工具互操作的能力,这仍然是该项目未来的一个开放性问题。