D talk at Silicon Valley ACCU
via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon May 18 04:57:28 PDT 2015
On Monday, 18 May 2015 at 09:12:50 UTC, Per Nordlöw wrote:
> On Monday, 18 May 2015 at 08:44:30 UTC, Per Nordlöw wrote:
>> On Tuesday, 12 May 2015 at 00:42:28 UTC, Ali Çehreli wrote:
>>> http://www.meetup.com/SFBay-Association-of-C-C-Users/events/218992449/
>>
>> When will the video be available online?
>
> A key follow-up question:
>
> Is there any significant space- and time-overhead in being lazy
> and choosing a fiber-based solution to convert a function to a
> range instead of converting it to a standard D range?
One caveat with D fiber implementation is that in the following
example
import std.stdio;
import std.concurrency: yield;
void fibonacciSeries()
{
int current = 0; // <-- Not a parameter anymore
int next = 1;
while (true)
{
current.yield; // return
const nextNext = current + next;
current = next;
next = nextNext;
}
}
unittest
{
import std.concurrency: yield, Generator;
auto series = new Generator!int(&fibonacciSeries);
import std.range: take;
writefln("%(%s, %)", series.take(10));
}
the type of `current` and template argument to `Generator` must
manually match. Isn't it possible to design a D api that matches
these at compile-time?
Otherwise we risk getting run-time exceptions such as
object.Exception@/home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/concurrency.d(1694):
yield(T) called with no active generator for the supplied type
Could yet another function qualifier (or extended attribute) do
the job of checking this at compile time?
More information about the Digitalmars-d-announce
mailing list