27-Jun-2013 01:05, Adam D. Ruppe пишет:
On Wednesday, 26 June 2013 at 21:00:54 UTC, Dmitry Olshansky wrote:
Just don't use certain built-ins. Stub them out in run-time if you
like. The only problematic point I see is closures allocated on heap.
Actually, I was kinda sorta able to solve this in my minimal d.
// this would be used for automatic heap closures, but there's no way to
free it...
[snip a cool hack]
Yeah, I suspected something like this might work. Basically defining
your own ref-count closure type and forging delegate keyword in your
codebase (except in the file that defines heap closure). That still
leaves chasing code like auto dg = (...){ ... } though.
Maybe having it as a template Closure!(ret-type, arg types...)
and instantiator function called simply closure could be more
ecstatically pleasing (this is IMHO).
It worked in my toy tests. The trick would be though to never store or
use a non-scope builtin delegate. Using RTInfo, I believe I can
statically verify you don't do this in the whole program, but haven't
actually tried yet.
I also left built in append unimplemented, but did custom types with ~=
that are pretty convenient. Binary ~ is a loss though, too easy to lose
pointers with that.
--
Dmitry Olshansky