はじめに¶
この「本」は、libuvを、WindowsとUnixで同じAPIを提供する高性能なイベント駆動型の入出力ライブラリとして使うための、小さなチュートリアル集です。
libuvの主要な分野を扱うことを目的としており、すべての関数とデータ構造を説明する網羅的なリファレンスではありません。詳しい内容はlibuvの公式文書を参照してください。
本書はまだ執筆途中のため、不完全な節があるかもしれませんが、充実していく過程も楽しんでいただければと思います。
本書の対象読者¶
本書を読む方は、次のいずれかに当てはまるでしょう:
デーモンやネットワークのサービス・クライアントなど、低水準のプログラムを作るシステムプログラマー。自分のアプリケーションにはイベントループの方式が適していると判断し、libuvを使うことにした方です。
CやC++で書かれたプラットフォームのAPIを、JavaScriptに公開する同期・非同期APIで包みたいnode.jsモジュールの作成者。libuvはnode.jsの中でのみ使います。本書はv8/node.js固有の部分を扱わないため、その点については別の資料も必要です。
本書は、C言語に慣れていることを前提としています。
背景¶
node.jsプロジェクトは、ブラウザーから切り離されたJavaScript環境として2009年に始まりました。GoogleのV8とMarc Lehmannのlibevを使い、node.jsはイベント駆動という入出力モデルと、ブラウザーで形作られてきたことから、そのプログラミング方式に適した言語を組み合わせました。node.jsの人気が高まるにつれ、Windowsで動作させることが重要になりましたが、libevはUnixでしか動作しませんでした。kqueueや(e)pollのようなカーネルのイベント通知機構に相当するWindowsの機構はIOCPです。libuvは、プラットフォームに応じてlibevまたはIOCPを抽象化し、libevを基にしたAPIを利用者に提供していました。node-v0.9.0のlibuvではlibevが削除されました。
その後もlibuvは成熟を続け、システムプログラミングのための高品質な独立したライブラリになりました。node.js以外の利用例には、Mozillaのプログラミング言語Rustや、さまざまな言語バインディングがあります。
本書とコードは、libuvのバージョンv1.42.0を基にしています。
コード¶
すべてのサンプルコードと本書のソースは、GitHubのlibuvプロジェクトに含まれています。libuvをクローンまたはダウンロードしてから、ビルドしてください:
sh autogen.sh
./configure
make
make installを実行する必要はありません。例をビルドするにはmakeをdocs/code/ディレクトリで実行してください。