+1 (non-binding)

I reviewed the proposal and the implementation plan against the current
code. The design is clean and fully backward compatible: adding a default
process(Window<Record<X>>, WindowContext) overload keeps WindowFunction a
valid @FunctionalInterface, existing lambdas and class implementations bind
to the unchanged abstract method, and the executor's switch to passing the
full Window view is behaviorally identical for anyone who doesn't override
the new method.

I especially like that this dropped the earlier IncrementalWindowFunction
approach -- reusing WindowFunction means no submit-time validation or
type-inference changes are needed, which is a real reduction in surface
area and risk. The lifetime/read-only-snapshot contracts are now spelled
out on every getter, addressing the earlier review feedback on list
mutability.

Thanks for the iterations on this, Dream95.

David

Reply via email to