Hi!
Currently, there will not be much difference in how the execution behaves (assuming you manually read from the value state, aggregate, and write back). Think of the ReducingState as syntactic sugar.
However, the ReducingState has the potential for performance optimizations (deferred reducing if values are currently not in memory). That is not really exploited at the moment, though.
On the other hand, the value state has the advantage that it is a bit more flexible, and you can change the logic easier when upgrading the program.
Greetings,
Stephan