Thread overview
@nogc formattedWrite
Oct 07, 2017
Nordlöw
Oct 07, 2017
jmh530
Oct 09, 2017
Igor
Oct 09, 2017
Ilya Yaroshenko
October 07, 2017
Is it currently possible to somehow do @nogc formatted output to string?

I'm currently using my `pure @nogc nothrow` array-container `CopyableArray` as

@safe pure /*TODO nothrow @nogc*/ unittest
{
    import std.format : formattedWrite;
    const x = "42";
    alias A = CopyableArray!(char);
    A a;
    a.formattedWrite!("x : %s")(x);
    assert(a == "x : 42");
}

but I can't tag the unittest as `nothrow @nogc` because of the call to `formattedWrite`. Is this because `formattedWrite` internally uses the GC for buffer allocations or because it may throw?

It would be nice to be able to formatted output in -betterC...
October 07, 2017
On Saturday, 7 October 2017 at 18:14:00 UTC, Nordlöw wrote:
>
> It would be nice to be able to formatted output in -betterC...

Agreed. If you know the size of the buffer, you can use sformat, which might be @nogc, but I don't know if it's compatible with betterC. Also, you might check out Ocean, which might have nogc formatting.
https://github.com/sociomantic-tsunami/ocean
October 09, 2017
On Saturday, 7 October 2017 at 18:27:36 UTC, jmh530 wrote:
> On Saturday, 7 October 2017 at 18:14:00 UTC, Nordlöw wrote:
>>
>> It would be nice to be able to formatted output in -betterC...
>
> Agreed. If you know the size of the buffer, you can use sformat, which might be @nogc, but I don't know if it's compatible with betterC. Also, you might check out Ocean, which might have nogc formatting.
> https://github.com/sociomantic-tsunami/ocean

As far as I know sformat is still not @nogc because it may throw an exception if buffer is not large enough, and throwing exceptions requires allocation.
October 09, 2017
On Saturday, 7 October 2017 at 18:14:00 UTC, Nordlöw wrote:
> Is it currently possible to somehow do @nogc formatted output to string?
>
> I'm currently using my `pure @nogc nothrow` array-container `CopyableArray` as
>
> @safe pure /*TODO nothrow @nogc*/ unittest
> {
>     import std.format : formattedWrite;
>     const x = "42";
>     alias A = CopyableArray!(char);
>     A a;
>     a.formattedWrite!("x : %s")(x);
>     assert(a == "x : 42");
> }
>
> but I can't tag the unittest as `nothrow @nogc` because of the call to `formattedWrite`. Is this because `formattedWrite` internally uses the GC for buffer allocations or because it may throw?
>
> It would be nice to be able to formatted output in -betterC...

Phobos code is not @nogc (can be fixed), but it will not nothrow.

PRs with  @nogc formatting functionality are welcome in Mir Algorithm.

Cheers,
Ilya