Remix.run Logo
flohofwoe an hour ago

Now that you mention it... :)

Zig has MultiArrayList in the stdlib which does the SoA transform via comptime:

https://ziglang.org/documentation/master/std/#std.multi_arra...

Zig also sorts struct members by size/alignment, but has two escape hatches ('extern struct' which is for C compatibility, and 'packed struct' which offers an explicit bit-by-bit memory layout).

AFAIK Odin and Jai offer the SoA transform as specialized language features, e.g. in Odin:

https://odin-lang.org/docs/overview/#soa-data-types

I'd still always want such data layout transforms as an explicit language feature though, not the compiler making this decision for me.