Overview

Warning: このライブラリはまだ活発に開発中であり、 APIは変更される可能性があります。

libhandlerはC言語で代数的エフェクトハンドラを実装します。安全かつ移植可能な方法でスタックをキャプチャすることで動作します。代数的エフェクト ハンドラは、例えば直線的な方法で非同期コードをプログラムするために使用でき、libuvを使ったプログラミングをより便利にするために使用することを目指しています。

このライブラリは、付属の技術レポートで詳しく説明されています。代数的エフェクトの入門については、koka bookの関連セクションを参照してください。

Enjoy!
-- Daan.

Building

libhandlerのビルドは、独自のプロジェクトにリンクできる静的Cライブラリを生成することからなります。libhandlerは可能な限り移植性が高くなるように書かれていますが、スタックとsetjmpの実装に関するプラットフォーム固有の仮定に依存しています。新しい プラットフォームでは注意深くテストしてください。現在テスト済みのプラットフォームは以下の通りです:

  • (gcc,clang,cl)-x86-pc-windows (32 bit, Windows)

  • (gcc,clang,cl)-x64-pc-windows (64 bit, Windows)

  • (gcc,clang)-amd64-pc-linux (64 bit, Ubuntu 16.04)

  • (gcc,clang)-arm-linux (32 bit, ARMv7 (raspberry pi 3, Raspbian/Debian Jessie))

  • gcc-arm64-linux (64 bit, ARMv8 (raspberry pi 3, Gentoo Linux))

C++サポートは動作していますが、まだ開発中です。

test/libuvディレクトリ(devブランチ内)にlibuvとの統合のための初期テストコードがあります。Microsoft IDEソリューションにはlibuvでビルドするためのプロジェクトが含まれています。

Unix/MacOSX

通常のconfiguremakeを使用してビルドします:

  $ ./configure
  $ make depend
  $ make

リリース版をビルドするにはVARIANT=releaseを使用し、テストを実行するにはtestsをターゲットとして指定します。例:

  $ make tests VARIANT=release

設定オプション:

  • --cc=<cc> : 使用するCコンパイラを指定します (例: gcc, clang, など)
  • --cc-opts=<options> : 使用する追加のCコンパイラフラグを指定します (例: -m64).
  • --asm-opts=<options> : 使用する追加のアセンブラフラグを指定します (例: -m64).
  • --abi=<abi> : 呼び出し規約ABIを指定します。例: --abi=amd64 または --abi=x64.
  • --os=<os> : ターゲットOSを指定します。例: --os=windows.
  • --ar=<archiver> : 静的ライブラリを作成するためのアーカイバを指定します (=ar).
  • --cxx=<c++ compiler> : 使用するC++コンパイラを指定します (=$cc++).
  • --link=<linker> : 使用するリンカを指定します (=$cc).

Makeパラメータ:

  • VARIANT=<debug|testopt|release> : ビルドバリアントを指定します。testoptは最適化されたビルドですが、アサーションが有効です。
  • VALGRIND=1 : メモリリーク検出のためにvalgrindの下でテストを実行します。

Makeターゲット:

  • staticlib : 静的ライブラリをビルドします。
  • tests : テストをビルドして実行します。
  • bench : ベンチマークをビルドして実行します。
  • clean : すべての出力をクリーンします。
  • staticlibxx : C++用にライブラリをビルドします (例外およびデストラクタのアンワインドサポート付き)。
  • testsxx : C++用のテストをビルドして実行します。

Windows

Windowsでビルドする方法は3つあります:

  1. Microsoft Visual C++ IDEを使用します。2015 Community edition は非商用利用で無料で利用できます。 ソリューションは以下で見つかります:

  2. Windows 10で「Linuxサブシステム」を有効にします。インストール手順についてはMSDN を参照してください。有効にすると、コマンドプロンプトでbashを実行してWindowsからUbuntu Linuxに入ることができます。 開発ツールをインストールするにはaptを使用します:

    • sudo apt-get update
    • sudo apt install build-essential
    • sudo apt install clang

    その後、上記で説明したようにconfiguremakeを実行できます。

  3. 古いWindowsバージョンでは、http://msys2.github.ioで入手可能なmsys2を使用できます。インストール手順に注意深く従ってください。インストール後、msys2パッケージマネージャを使用してさらにツールをインストールできます:

    • pacman -S mingw-w64-x86_64-gcc (c compiler)
    • pacman -S mingw-w64-x86_64-gdb (debugger)
    • pacman -S make (make)

    その後、上記で説明したようにconfiguremakeを実行できます。

Windows上で成功したbash設定は以下の通りです:

  • gcc-amd64-pc-linux-gnu
    単に./configureを使用
  • clang-amd64-pc-linux-gnu
    sudo apt install clangの後に./configure --cc=clangを使用

msys2を使用したWindows上での成功した設定は以下の通りです:

  • gcc-x64-w64-mingw32
    単に./configureを使用
  • gcc-x86-w64-mingw32
    mingw32シェルでmingw-w64-i686-toolchainをインストールして使用
  • clang-x64-pc-windows
    ./configure --cc=/c/programs/llvm/bin/clangを使用。
  • clang-x86-pc-windows (32-bit)
    ./configure --cc=/c/programs/llvm/bin/clang --cc-opts=-m32 --asm-opts=-m32を使用。

Visual Studio IDEを使用する場合:

  • cl-x64-pc-windows 64-bitビルドを選択。
  • cl-x86-pc-windows 32-bitビルドを選択。

LibUV on Windows

x64ビルド用にVisual Studioで有効化されています。libuvのヘッダーとバイナリをメインのlibhandlerフォルダの下のlibuvフォルダに配置する必要があります。Windows用のバイナリはlibuv.orgで入手できます。