On Friday, 13 September 2013 at 18:01:30 UTC, H. S. Teoh wrote:
On Fri, Sep 13, 2013 at 07:47:32PM +0200, monarch_dodra wrote:
On Friday, 13 September 2013 at 17:02:24 UTC, H. S. Teoh wrote:
>>>For example, "dup" is not nothrow, yet it is safe and pure.
>>>Reserve is nothrow, yet assumeSafeAppend is not. Reserve may
>>>actually call postblit, but not assumeSafeAppend.
>
>Why is assumeSafeAppend not nothrow? If it were up to me, I'd
>say
>that if for whatever reason safe append can't be done (i.e.
>the
>assumption is invalid) and we detect it, we should assert(0),
>since
>the code is obviously not prepared to deal with this case by
>virtue
>of calling assumeSafeAppend in the first place. Throwing an
>Exception
>makes no sense in this case -- it's not something you can
>handle.
Well, by your own conclusion, it doesn't throw :D
It either just works, or it errors out. No exceptions.
Right, so how come assumeSafeAppend isn't marked nothrow?
Oh. Right. I understood you backwards. In that case, it's not
nothrow simply because it hasn't been made that way yet. On topic:
https://github.com/D-Programming-Language/druntime/pull/553
- Me trying to make assumeSafeAppend nothrow, and learn how
druntime works.
Another issue to solve is that the above would work well for
say,
"reserve". However, "dup" (afaik) is hardwired by the compiler
to
call the druntime function "_adDupT". SO we'd have to change
that if
we even *hope* for it to infer anything.
Oh joy, more compiler magic. Let me know when you figure out
how to
extricate it from the compiler, since it will probably be
useful in
extricating AA's from the compiler as well. ;)
OTOH, another approach, since the compiler already hardcodes
this stuff,
is to make the *compiler* infer attributes for .dup. That might
actually
be easier than trying to move compiler-hardcoded stuff into
druntime.
(The downside is that you'll have to work with C++... :-P)
T
Hum. I wouldn't mind "starting" with reserve, and see from there
what the best thing to do for dup/idup is from there (including
just making it a free function in object ?)
An added plus about making it an actual UFCS in object.d, is that
we'll be able to (correctly) write it as "myArray.dup()".
It's not a property god damn it!