Talk by Herb Sutter: Bridge to NewThingia
Guillaume Piolat
first.name at gmail.com
Thu Jul 2 13:03:12 UTC 2020
On Thursday, 2 July 2020 at 11:13:41 UTC, claptrap wrote:
> I'm working on virtual audio instruments and effect processors
> and they do their job in real-time. GC is luxury in this
> context. If I switched to D, I'd have to also switch from OOP
> to simple C-like structured programming and implement my own
> basic set of algorithms and data structures.
I work in audio effects, use no GC, and use OOP since TypeInfo is
there.
You are right about basic set of algorithm and data structure.
> If you're doing a plugin the host callback thread wont be known
> to the D runtime and so the GC wont pause it. So as long as you
> dont call anything that might trigger the GC while in the
> callback you wont get GC pauses affecting the audio rendering.
That was how we did it for a while, the speed hit was
immeasurable.
Generally, if a callback thread can own GC things, it needs to be
registered and deregistered at exit.
The problem with the D runtime can be (depends on when):
- macOS compat in a shared lib
- D host hosting D client can be tricky
> The point is even in C++ you should never ever do malloc/free
> in the audio thread
Pet peeve, lot of practical audio applications do this (at
startup) :)
You'll find mutexes in the audio thread in the most well known
audio frameworks... all of them since spinlocks-style algorithms
have worse worse-cases.
If the event is rare enough, it won't really matter and chasing
it would be a lot of effort just to stay holier.
But it's a good talk topic so regularly people will berate other
about how it's a bad thing.
> Also see this...
>
> https://github.com/AuburnSounds/Dplug
Note that we disabled the runtime (and GC) for reasons I cannot
entirely collected, we've tried to enable it back several times
and it's hard.
D is very fitting for audio.
More information about the Digitalmars-d-announce
mailing list