Are you suggesting to compile CEL into native code and run the compiled code at runtime (i.e. as a predicate function)? I think this is doable and I vaguely remember this was how it's implemented initially.

But most use cases are treating CEL as a user provided config, which requires runtime parsing and execution.

I was thinking of something like this:

type MyType{ myName: string where size > 8, year: number where number > 2000 }

Then, whenever this type is used, at compile time, an evaluation is done to ensure that the type restrictions are enforced.