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