Creates a Task on the GC heap that calls an alias.

If possible, there's also scopedTask, which allocates on the stack:

So my question is: Has anyone done any analysis over how "dangerous" it is to use GC'd tasks for _small_ tasks (in terms of milliseconds)?

Nothing major, but puts quite a bit of pressure on various implementations. You might want to profile ./pfib 40:

import std;

ulong fib(uint n) {
    if (n < 2) return n;

    auto x = scopedTask!fib(n-1); // vs. Task!fib(n-1);
    auto y = fib(n-2);
    return x.yieldForce + y; // {yield,spin,work}Force

void main(string[] args) {
    enforce(args.length == 2, "Usage: fib <n-th fibonacci number requested>");
    auto n = args[1].to!uint;
    // defaultPoolThreads(totalCPUs);
    writefln!"fib(%d) = %d"(n, fib(n));

At least D isn't locking up beyond 12 tasks; looking at you, stdlib-nim. :)

Reply via email to