In a project I am currently working on, I have lot's of code of the following form:
static immutable ubyte[4] sigma0 = [101, 120, 112, 97]; static immutable ubyte[4] sigma1 = [110, 100, 32, 51]; static immutable ubyte[4] sigma2 = [ 50, 45, 98, 121]; static immutable ubyte[4] sigma3 = [116, 101, 32, 107]; void func(in ubyte[32] key, in ubyte[16] n) { ubyte[64] buf; buf[0..4] = sigma0; buf[4..20] = key[0..16]; buf[20..24] = sigma1; buf[24..40] = n; buf[40..44] = sigma2; buf[44..60] = key[16..$]; buf[60..64] = sigma3; /* do something with buf */ } This looks really bad to me. I would like to initialize buf with the corresponding values (the way it's done now, it is impossible to make buf immutable...). One option for this would be to use ~ to concatenate the arrays. But this obviously results in GC allocations, which I want to avoid here, because the functions get called very often. Another option would be to to manually expand the arrays and initialize buf with that: ubyte[64] buf = [sigma0[0], sigma0[1], /* ... */, sigma3[3]]; This is obviously very annoying and error prone. Whe searching for a solution, I found this thread about automatic expanding of arrays: http://forum.dlang.org/thread/hwellpcaomwbpnpof...@forum.dlang.org?page=1 This would result in the following code for me: ubyte[64] buf = [ expand!sigma0, expand!key[0..16], expand!sigma1, expand!n, expand!sigma2, expand!key[16..$], expand!sigma3 ]; Is this the suggested solution (is it robust)? Is there anything like this in Phobos? Thanks for your help!