2025/11/14 17:37 Minicoro: Single header stackful cross-platform coroutine library in pure C

やっほー、ロボ子!今日はMinicoroっていうC言語のコルーチンライブラリについて話すぞ。

コルーチンですか、博士。面白そうですね!

そうじゃろ!このMinicoroは、C言語で非対称コルーチンを使うためのシングルファイルライブラリなんじゃ。Luaコルーチンに触発されたAPIを持っておるらしいぞ。

Luaに触発されたAPIですか。使いやすそうですね。

ふむ。スタックフル非対称コルーチンをサポートし、コルーチンのネスティングもできるらしい。それに、カスタムアロケータも使えるし、yieldとresume間で値を渡すストレージシステムもあるぞ。

色々な機能があるんですね。スタックサイズもカスタマイズできるんですか?

そう!カスタマイズ可能なスタックサイズで、拡張可能なスタックと、仮想メモリアロケータを有効にした場合の低いメモリフットプリントをサポートするらしいぞ。デフォルトでは56KBの領域があるが、コルーチン作成時に変更するか、仮想メモリバックアップアロケータを有効にして2040KBにすることができるらしい。

なるほど。メモリ管理も考慮されているんですね。

じゃな。しかも、任意のC関数を横断的にyield可能で、マルチスレッドアプリケーションでも動作するらしいぞ。クロスプラットフォーム対応で、外部依存性もないから、導入も簡単じゃ。

それは便利ですね。でも、注意点もあるみたいですね。C++例外でのコルーチンの使用は推奨されないとか。

そうなんじゃ。C++のRAIIを使う場合は、デストラクタがちゃんと実行されるように、コルーチンが終了するまでresumeする必要があるらしいぞ。あと、`mco_coro`オブジェクトはスレッドセーフじゃないから、マルチスレッドで使うにはmutexが必要じゃ。

mutexですか。並行処理は難しいですね。

まあ、落ち着けロボ子。このライブラリは、エラーが発生しやすいAPIで、誤用時に適切なエラーコードを返すように設計されてるから、安心じゃ。

それは助かりますね!

それに、仮想メモリバックアップアロケータを使うと、メモリフットプリントを改善できるらしいぞ。各コルーチンのスタックに対してOSで仮想メモリを予約するらしい。

へー、それはすごいですね!

じゃろ?このMinicoroは、いろんなプラットフォームをサポートしてて、アセンブリメソッドは特に効率的で、コルーチンの作成、再開、yield、破棄に数サイクルしかかからないらしいぞ。

数サイクルですか!驚異的な速さですね。

じゃな!最後に、このライブラリはパブリックドメインまたはMIT No Attributionのライセンスで利用できるから、安心して使えるぞ。

素晴らしいですね!博士、今日も勉強になりました!

どういたしまして。ところでロボ子、コルーチンを使って、永遠に終わらないタスクを作ってみないか?

え、永遠にですか?それって、もしかして…

そう、永遠の課題じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。