I have watched the video now. Some interesting things⌠not sure when they will be in Java but itâs always nice to know these new language things so when a team mate starts using them incorrectly I will know itâs not a syntax error, just bad programming with the new hotness. 
Define âentirelyâ. Even this talks says this works with OOP. Iâd argue that ECS games are as close to âentirelyâ as you will get.
I find this talk interesting for another reason in that âdata-oriented programmingâ as a term has come so full circle that a nice âside effectâ is now touted as the main feature (re: duck typing).
The DOP approach originally got its start in constrained environments that needed to stream their memory. So data was organized into tight blocks of âsource dataâ that was only what was needed. Operations (systems) streamed over that data row by row performing operations and possibly writing to another tightly packed array of data.
Organizing entities as arrays of immutable components was a way to get source data. By selecting only the components required, they could be packed into memory tightly. The side effect was that instead of operating on big O objects of a specific type âWalkingCreatureâ, etc⌠you could grab all objects that had the needed components (Position, Velocity)⌠then the integrate operation would crunch each row and it didnât matter what object type that was.
Thatâs essentially duck-typing (if it walks like a duck, talks like a duck, shaped like a duck⌠treat it like a duck).
I have indeed used this very concept in enterprise-level applications on unstructured data⌠which is about as far from an ECS and the origins of âdata-oriented programmingâ that you can get. NoSQL databases like MongoDB even make this truly trivial⌠because the actual database queries can pull back just the parts you want.
That makes it interesting to see that the primary DOP example in the video is dealing with unstructured JSON data in a structured way⌠and in a very âduck typingâ way. That âifâ block would deal with any JsonObject that had those fields, regardless of the original real type of the data.
Game take:
The useful part for games and ECS specifically would be the ârecordâ stuff. 90% of my EntityComponents could be ârecordâ classes with a few extra convenience methods.
The âpattern matchingâ (horrible name, really) has nice idiomatic utility for day-to-day coding but not really a game-changer in the ECS realm. In an ECS, we arenât throwing giant entities with all components in them at any operations⌠the entities already only have the components that we expect. There really isnât any additional type resolution or casting to be done. Iâm pretty sure that Zay-ES will work with these âout of the boxâ.
As for the âsealedâ class hierarchies thing⌠as an API writer, I foresee folks complaining about that even more than making my fields all private. âI would be able to add my own implementation of âxâ but youâve needlessly locked it down!!!â I have trouble thinking of cases where polymorphism+flexibility wasnât the better choice.
And the âbetter Futureâ example is supposed to look nicer but in the most common case will lead to required horribly bloated idioms. 9 times out of 10, a future.get(wait forever) is all thatâs needed and any exception is just bubbled up⌠but now a giant switch with all possible outcomes is required. I canât think of a single case where Iâd want to specifically handle every possible outcome specifically.
Conclusion:
Yes, you should absolutely write your games using âdata-oriented programmingâ (as an ECS). The new record classes will make this even easier.
It was nice to see âimmutable dataâ being mentioned so clearly⌠since I get in that âwhy?!?â argument all the time.