dsq-1: open-source software synthesizer
ketmar via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sun Mar 29 21:33:54 PDT 2015
On Sun, 29 Mar 2015 17:02:53 +0000, D. Martinez wrote:
> 2. The function attributes: @nogc nothrow. These relate to my realtime
> audio thread because I want neither of these things to occur; my thread
> runs unmanaged by the D runtime and I appreciate the static checking.
> But I don't use it: why?
> I use writefln a lot to debug my implementations, which is incompatible
> with either assumption.
that's why i wrote `iv.writer` with compile-time format strings and nogc
conversions for numbers. it still using `to!` for other objects
(including floating point numbers, but this can be fixed). output strings
and integral numbers is enough for debug logs for me. althru it's not
"vanilla" D, it's still very easy to backport to D2 (actually, "sed" will
do). it is build on templates, so it infers attributes. most of the time
this is "nothrow @nogc".
and, to stop talking about myself, here is some hackery for you:
import std.traits;
auto assumeNoTrowNoGC(T) (T t)
if (isFunctionPointer!T || isDelegate!T)
{
enum attrs = functionAttributes!T|
FunctionAttribute.nogc|
FunctionAttribute.nothrow_;
return cast(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t;
}
void myFuncThatDoesGC () {
throw new Exception("hello!");
}
void anotherFunction () nothrow @nogc {
//myFuncThatDoesGC(); // alas, but
assumeNoTrowNoGC(() { myFuncThatDoesGC(); })(); // yay!
}
but don't tell anyone that you got this code from me, or Type Nazis will
kill me! ;-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-announce/attachments/20150330/13b419e6/attachment-0001.sig>
More information about the Digitalmars-d-announce
mailing list