Fiber

ファイバーです。他の言語ではコルーチンやマイクロスレッドと言われたりしています。

fiber(){}式によって生成されます。

処理の途中で中断し、再開することのできる関数として用いることができます。

returnするとそのファイバーは「終了」という扱いを受けてis_aliveがtrueを返すようになり、また、resetするまでは呼び出そうとしてもundefinedを返すだけとなります。

Example

// 基本的な使い方
{
    fib : fiber(){
        i : 0;
        while (true){
            ++i;
            yield i;
        }
    }
    10.times{
       fib().p;
    }
}
// fiberから呼び出した関数でもyieldできる
{
    f : fun(){
        yield "in fun f";
    }
    fib : fiber(){
        yield "fiber begin";
        f();
        yield "fiber end";
 
        // returnの値は無視される
        return "fiber finish";
    }
    i : 0;
    while (fib.is_alive){
        ret : fib();
        ret.p;
        if (fib.is_alive){
            ("loop "~i.to_s~" : "~ret).p;
            ++i;
        }
    }
}

Methods

(constructor) インスタンス生成
reset 初期状態に戻す
halt 強制終了させる
is_alive まだ終了していないかどうか
reference/fiber.txt · 最終更新: 2011/07/14 23:42 by sukai
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0