The D standard library is built on GC, is that a negative or positive?
Steven Schveighoffer
schveiguy at gmail.com
Fri Dec 16 01:35:21 UTC 2022
On 12/15/22 7:27 PM, bachmeier wrote:
> On Thursday, 15 December 2022 at 23:29:55 UTC, Steven Schveighoffer wrote:
>> On 12/15/22 6:04 PM, bachmeier wrote:
>>> On Wednesday, 14 December 2022 at 01:47:29 UTC, Steven Schveighoffer
>>> wrote:
>>>
>>>> But if the string you give it happens to not contain a string
>>>> representation of an integer, it wants to throw an exception. And
>>>> the act of allocating and throwing that exception needs the GC.
>>>>
>>>> We really really need to fix it. It completely cuts the legs out of
>>>> the answer "if you don't want the gc, use @nogc". If we do fix it,
>>>> all these questions pretty much just go away. It goes from something
>>>> like 20% of phobos being nogc-compatible to 80%.
>>>
>>> Is avoiding the GC inside exceptions a problem that needs to be
>>> solved? Maybe it is, but I don't think it's common to have a loop
>>> with millions of exceptions. Perhaps the issue is that there should
>>> be a version of @nogc that doesn't care about exceptions. With the
>>> current implementation of exceptions, the intersection of "avoiding
>>> GC" and "abusing exceptions" is almost certainly small.
>>
>> Why does the quantity of exceptions matter? The point of avoiding the
>> GC is to avoid the collection, which can happen with a single
>> allocation. If you want to avoid the GC for specific code paths, you
>> don't want to say "OK, I guess I can't parse integers in here".
>
> It matters if you expect the quantity to be zero. If you've thoroughly
> tested your code, and you're confident that the exception isn't
> relevant, it doesn't matter. It is quite rare that `to!int` would throw
> an exception in my code.
Totally agreed. But one to!int inside a big function makes it so it
can't be @nogc. You might want the @nogc for other reasons. It just
strikes me as limiting that converting string to int cancels the ability
to use @nogc at all.
>
>> Note that it's also possible to assume the GC *likely* won't get
>> triggered, because an exception is very unlikely. But having a
>> mechanism to ask the compiler to help prove it, which can't be used,
>> is pretty frustrating.
>
> Those wanting that could continue to use the current @nogc. If they're
> fine with a one in a million chance of a collection, they don't need
> that kind of proof, and they could use @nogc right now with the 80% of
> Phobos you have cited.
>
Maybe you misunderstood what I said. 20% of phobos is usable with @nogc
(not tested, but that's my expectation). Fixing exceptions so they don't
use the GC would be a single thing that flips that 20% to 80%.
-Steve
More information about the Digitalmars-d
mailing list