This feature - plus the inversion of the `inline` keyword (specify where the function is used, not where it is defined) - was what I remember most from the writeup.
This feature - plus the inversion of the `inline` keyword (specify where the function is used, not where it is defined) - was what I remember most from the writeup.
http://bannalia.blogspot.de/2015/09/c-encapsulation-for-data...
https://blog.molecular-matters.com/2013/10/22/implementing-a...
(Actually, GCC removed it a few years back, whoops)
The real problem with it in C based languages is that it requires the real, true, whole program, because it is impossible to not break the ABI of the structure :)
In general, memory locality/etc optimizations are more focused on reorganizing loops to walk the data optimally, instead of reorganizing data so normal loops walk them optimally.
(See, e.g., polyhedral loop optimizations, which XLC and others ship with. A good paper to read is PLUTO and PLUTO+)
https://gcc.gnu.org/gcc-4.8/changes.html "The struct reorg and matrix reorg optimizations (command-line options -fipa-struct-reorg and -fipa-matrix-reorg) have been removed. They did not always work correctly, nor did they work with link-time optimization (LTO), hence were only applicable to programs consisting of a single translation unit. "
Though my web searches don't return hits about SoA in connection to GCC reorg optimizations, and a paper[1] about the struct reorg optimization doesn't mention it either...
[1] https://www.research.ibm.com/haifa/dept/svt/papers/golovanev...
There's also a tradition of older metaprogramming approaches in data layout optimizations, eg. ATLAS BLAS.