What about in Rust?
foo: Box<f32> // or &’a f32 or &f32 if borrowing
Multidimensional arrays: foo: [[f32; M]; N]
(These have flat storage. However I do assume most Rust devs use external libraries, which also have flat storage but the incompatibility issues you mentioned)