Skip to content

Release v0.15.0

Latest

Choose a tag to compare

@TristonianJones TristonianJones released this 24 Apr 23:20

This new release of CEL for C++ brings a significant milestone: official support for MacOS builds. Beyond expanding platform compatibility, this update introduces a robust AST validation framework and several quality-of-life improvements for extension libraries.


🍎 MacOS & Cross-Platform Support

The headline feature of this release is the stabilization of MacOS builds. We’ve refined our Bazel rules and addressed platform-specific test failures to ensure a smooth experience for developers in the Apple ecosystem.

  • MacOS Build Support: Updated Bazel rules and test suites to fully support MacOS environments ([#1957](#1957), [#1942](#1942), [#1943](#1943)).
  • Windows (MSVC) Fixes: Continued improvements for Windows cross-compilation and MSVC compatibility ([#1835](#1835), [#1879](#1879)).
  • BCR Automation: Added Bazel Central Registry (BCR) automation for smoother automated publishing of release tags ([#1804](#1804)).

✅ New AST Validation Framework

We’ve introduced a comprehensive Validator API. This allows developers to enforce constraints on expressions before they are executed, providing an extra layer of safety and performance predictability.

  • Core Validator Implementation: Initial implementation of the Ast Validator and compiler integration ([#1927](#1927), [#1932](#1932)).
  • Standard Validators:
    • RegexPatternValidator: Validates regex strings at compile-time ([#1938](#1938)).
    • Comprehension Nesting Limit: Prevents overly complex nested comprehensions ([#1939](#1939)).
    • Homogeneous Literals: Ensures list and map literals contain consistent types ([#1936](#1936)).

🛠 Extension Libraries & Language Features

CEL continues to grow its standard library and extension capabilities to match the feature sets of Java and Go implementations.

  • List Extensions: New list.first() and list.last() functions have been added ([#1890](#1890)).
  • Library Versioning: Introduced versioning for math, string, and list extensions to allow for stable evolution ([#1888](#1888), [#1891](#1891), [#1893](#1893)).
  • Standard Extension Bundle: A new bundle that simplifies registering common CEL extensions ([#1895](#1895)).
  • Escaped Identifiers: Backtick-quoted identifiers (e.g., `var.name`) are now enabled by default ([#1916](#1916)).

🚀 Performance & Internal Refactoring

Under the hood, we've focused on slimming down the codebase and optimizing core routines.

  • Unparse Optimization: Significant performance gains in google::api::expr::Unparse by reducing unnecessary map and SourceInfo copying ([#1798](#1798), [#1800](#1800)).
  • Type System Cleanup: Removed deprecated TypeFactory and TypeManager interfaces in favor of the modern cel::Type system ([#1920](#1920)).
  • Recursive Safety: Simplified recursive planning limit checks to prevent stack overflows during expression planning ([#1900](#1900)).

🤝 New Contributors

A warm welcome to our first-time contributors!

Full Changelog: [v0.14.0...v0.15.0](v0.14.0...v0.15.0)