@nogc
Chris Cain via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jul 11 02:18:38 PDT 2014
On Friday, 11 July 2014 at 07:45:24 UTC, bearophile wrote:
> Joseph Rushton Wakeling:
>
>> I've habitually used 'format' to prepare assert messages with
>> variable content, which has a similar problem -- IIRC it
>> conflicts with nothrow and I guess it too would conflict with
>> @nogc.
>
> A solution is to add to Phobos a way to format to an output
> range, where the range you use a stack-allocated array of chars
> large enough to contain your formatted message. So on the whole
> it can be @nogc.
>
> Bye,
> bearophile
Although I think that is certainly something that would be
helpful/necessary, it wouldn't solve the problem of printing out
assert messages/exception messages.
Basically, the only way I could think to do it is to make a
special `NoGCException` that has a `detailMsg` function (taking a
`sink`, of course) and your subclass of `NoGCException` would
store all the info necessary to print out the error at the catch
site and you'd just overload `detailMsg` to print it out properly.
https://gist.github.com/Zshazz/47ed52c3246e5348062a
That's an example. I store info at line 84 as a tuple in my
`SpecialNoGCException`, and set the storage when I'm about to
throw at line 202. My apologies for the poor code (I made that
stuff as an experiment). It works, but pre-allocating the initial
exception is still problematic, IMO. I'd really like a way of
specifying that an exception was malloc'd and it's the catcher's
job to free it. Obviously, I could "just do it" but it seems
pretty unsafe and error-prone. *shrug*
More information about the Digitalmars-d
mailing list