www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Yieldable function?

reply "Tofu Ninja" <emmons0 purdue.edu> writes:
Is there any way to have a yieldable function that can be resumed 
at a later time in D?

Some thing like:

void test()
{
      writeln("A");
      yeild();
      writeln("B");
}

...

auto x = yieldable!test();
x.resume(); // prints "A"
x.resume(); // prints "B"
x.resume(); // throws an error or something, i dont know..


Also how portable is the built in asm support, was thinking about 
implementing this if it's not already available. Also is there a 
way to define naked functions in D? I think not but they might 
make implementing this a little more simple.
Aug 13 2015
next sibling parent reply "MrSmith" <mrsmith33 yandex.ru> writes:
http://dlang.org/phobos/core_thread.html#.Fiber
Aug 13 2015
parent reply "Tofu Ninja" <emmons0 purdue.edu> writes:
On Thursday, 13 August 2015 at 22:29:17 UTC, MrSmith wrote:
 http://dlang.org/phobos/core_thread.html#.Fiber
Man I feel like I saw that before but when I went looking for it I couldn't find it. Didn't think to check in core. :/ Welp that solves my question, thanks :D
Aug 13 2015
parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 08/13/2015 03:36 PM, Tofu Ninja wrote:
 On Thursday, 13 August 2015 at 22:29:17 UTC, MrSmith wrote:
 http://dlang.org/phobos/core_thread.html#.Fiber
Man I feel like I saw that before but when I went looking for it I couldn't find it. Didn't think to check in core. :/ Welp that solves my question, thanks :D
std.concurrency.Generator can present the yielded values as a range: http://ddili.org/ders/d.en/fibers.html#ix_fibers.Generator,%20std.concurrency Ali
Aug 13 2015
prev sibling parent "Adam D. Ruppe" <destructionator gmail.com> writes:
On Thursday, 13 August 2015 at 22:27:31 UTC, Tofu Ninja wrote:
 Also how portable is the built in asm support
it varies a bit across compilers (gdc does it differently), and obviously across processors.
 Also is there a way to define naked functions in D?
Put the `naked;` pseudo-instruction at the top of a function in an asm block. http://dlang.org/iasm.html
Aug 13 2015