News for hackers. Stuff that matters.
Re:Checked C by gavinray on Wednesday December 21, 2022 @04:18PM (#34086534)
I meant something more like this (although this doesn't QUITE compile, but it's close I think):

    static ubyte* [n*2] requires_ptr_twice_as_large_as_input(n : uint)
    (
        ubyte*[n] input,
        ubyte*[n*2] output,
    ) {
        output[0..n] = input[0..n];
        output[n..2*n] = input[0..n];
        return output;
    }

    void main()
    {
        ubyte[10] input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
        ubyte[20] output = new ubyte[20];
        requires_ptr_twice_as_large_as_input!(10)(&input, &output);
    }
Re:Checked C by ntrel on Friday December 23, 2022 @05:50AM (#34104381)
This compiles:

    ref ubyte[n*2] requires_ptr_twice_as_large_as_input(uint n)
    (
        const ref ubyte[n] input,
        ref ubyte[n*2] output,
    ) {
        output[0..n] = input[0..n];
        output[n..2*n] = input[0..n];
        return output;
    }

    void main()
    {
        ubyte[10] input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
        ubyte[20] output;
        requires_ptr_twice_as_large_as_input!(10)(input, output);

        import std.stdio;
        writeln(output);
        assert(output == input ~ input);
    }
Re:Checked C by gavinray on Sunday December 25, 2022 @11:51AM (#34128694)
Thank you, neat to see it could be done (I had a hunch!)