まめめもスマートフォン用の表示で見るまめめもこの広告は、90日以上更新していないブログに表示しています。Ruby』などでお世話になっているラムダノートが、新しい雑誌「n月刊ラムダノート」を創刊しました。www.lambdanote.comコンピュータ関係の技術情報の記事だけが載るそうです。再送に関する仕様・実装の歴史から最新提案までを、日本語話者の中では間違いなく世界一詳しい第一人者である西田佳史さん(@nsd)が広く深く紹介しています。『「コルーチン」とは何だったのか?』は、ぼくが書きました。界隈から始まった言葉の転用までを駆け足で紹介しています。あり『仕事ではじめる機械学習』の著者の一人でもある有賀康顕さん(@chezou)が最新状況を網羅的に解説しています。なくマニアックな雑誌ですね。ラムダノートと相談して、『「コルーチン」とは何だったのか?』の草稿を公開することにしました。上記の通りこの雑誌は多方向にマニアックで、けっしてこの記事が「n月刊ラムダノート」の方向性を代表するようなものではないのですが、なんとなく雰囲気を感じて頂ければ幸いです。執筆と草稿公開の経緯さっさと草稿を見たい人はこの節をスキップ。執筆のきっかけは、最初は↓の不用意なツイートです。書いたものをコルーチンと呼んでいて頭を抱えている。独裁者を辞めた途端、おかしくなってしまったのだろうか......。みたいな軽口だったんですが、あまり上品じゃなかったですね。(ぼくの知っていた)コルーチンとは違うものをコルーチンと呼んでいるのは確かなようでした。現状をまとめてみようと思い、最初はブログ記事として書き始めました。複雑な経緯がわかってきて、うまくまとめられず放置してました。そんなとき、ラムダノートの鹿野さん(@golden_lucky)から雑誌を創刊すると聞いて、この記事の出口が決まりました。正確に言うと、昨年末頃に鹿野さんから「雑誌創刊するから記事ないですか」と言われたときには、コルーチンの記事を完全に忘れていて、「考えとく」で終わりました。今年になって、鹿野さんやうちの奥さん(@hirekoke)とコルーチンや継続について雑談していて、日本語での体系的な解説が欲しいという話になり、「そういえばこんなブログ記事を書きかけてた」と言って見せたら、「えっこれ雑誌に載せられるのでは」ってなりました。草稿を公開することにした理由ですが、もともとブログ用に書いていたものなので、できれば一般公開して広く知ってもらいたかった(遠藤の気持ち)草稿を公開することで「n月刊ラムダノート」の雰囲気を知ってもらったり、ラムダノートでの執筆プロセスが身近であることを知ってもらったりしたい(ラムダノートの気持ち)ということで、著者と出版社の希望がかさなったためです。ここで公開するこの草稿はわりとファイナルに近いもの(ラムダノートに内容・構成レベルの改善提案をいただいて直した後のもの)です。それでもまだまだ適当な状態ですね......。「★なんかそれっぽい書き出し」とか。図もまったくありません。適当にリンク貼りつけて伝えました。そのあたりがいい感じになっているのは、だいたいラムダノートによる「編集」です。記事募集をはじめたらしいので、見てみるとよいのではないでしょうか。「コルーチン」という用語が指すもの(仮題)★なんかそれっぽい書き出し「コルーチン」という言葉が指すものが、プログラミング言語の文化圏によってだいぶ変わってしまっているようです。調べた限りで分かった状況をまとめてみたいと思います。間違ってるところがあったら、ご指摘ください。伝統的なコルーチンまず、伝統的なコルーチンである「対称コルーチン」と「非対称コルーチン」を説明します。対称コルーチン対称コルーチンは、互いに制御を渡し合う手続きのようなものです。疑似コードで示します。このように、対称コルーチンでは飛び先を常に明示します。非常に原始的・明示的で分かりやすい反面、実用上はなかなか扱いにくく、実際にはほとんど使われていません。年の論文に登場する、元祖のコルーチンです。メインルーチン・サブルーチンのような親子関係ではなく、対等に協調し合うルーチンとして考案されました。別モジュールとして実装するためのテクニックだったようです。中断したコルーチンを再開するのは、完全にプログラマの責任になります。再開し忘れると、コードが実行されないことになります。再開しそこねて、後処理(ファイルのクローズとか)が抜けると、痛い目にあいます。年)より前なので、現代的なプログラミングと相性がよくないのはしかたないですが、現代で使われていないのはこういう不便さのためだと思われます。対称コルーチンが実装されている例。非対称コルーチン対称コルーチンの間に親子関係を持たせることで使いやすくしたものです。次の疑似コードを見てください。コルーチンを「中断」し、呼び出し側に制御を一旦もどします。すると、コルーチンの中断箇所から実行を再開します。細切れに実行できる関数のように振る舞います。重要なことなのでもう一度言っておきます。されたら中断箇所から再開する)」という意味です。後の説明でも出てくるので覚えておいてください。http://www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf)。「イディオム」が登場するまでは)。いう名前で呼ばれることもあります。終了すると戻ってくる)。これにより、必ず実行してほしい後処理が抜ける心配が大きく減ります。後に必ず実行してほしい後処理を書くのはちょっと注意が必要です。なっています)次は、非対称コルーチンを実装した言語・ライブラリの例です。generator」は、非対称コルーチンです。伝統的なコルーチンの代表的なユースケースは、無限長の列を表現することです。非対称コルーチンで説明します。し、というのを無限に繰り返します。返す非対称コルーチンは、無限列を表現しています。このような無限列の表現を、ジェネレータといいます。イテレータと呼ばれているのは、このユースケースに特化しているためです*4。両方を提供しています。実装されていて、本質的に同等です。「繊維」という意味です。スレッド(糸)よりもメモリ使用量が少なく大量に作れる軽量スレッドという意味で名付けられたようですが、実体としてはコルーチンの再発明です。分だけ動作をすすめる)を表現するためなどにも使われます。コミュニティでコルーチンと呼ばれるものの話が始まります。これまでの話とはだいぶ違うので、気持ちを切り替えて読んでください。ブラウザの上で動く言語です。マウスクリックのようなユーザ操作のイベントが起きたときに呼ばれる関数(コールバック)を書くのが元々の想定ユースケースでした。シングルスレッドの言語です*5。待ちなど)を行うと、その間は他のイベントが処理できなくなってしまいます。設計が徹底されています。ミリ秒後にコールバックする関数を登録する関数」を使います。プログラムはコールバックであふれることになりました。コールバックの中にコールバックを書く、ということも日常的に行われます。1000);このように、インデントがどんどん深まって行きます。この現象でコードが読み書きしづらくなることは、コールバック地獄と呼ばれています。コルーチンを使ったイディオム実は、このインデントの現象は、非対称コルーチンできれいに解決できます。疑似コードで説明します。呼び出し側に処理を戻します。