概述

警告:此函式庫仍在積極開發中,API 可能會變動。

libhandler 在 C 語言中實作代數效應處理器。它以安全且可移植的方式擷取堆疊。代數效應處理器可用於以直線方式撰寫非同步程式碼,我們也希望利用它讓使用 libuv 的程式設計更加方便。

此函式庫的詳細說明請參閱隨附的技術報告。若需代數效應入門介紹,請參閱 koka 手冊中的相關章節。

祝使用愉快!
-- Daan.

建置

建置 libhandler 需產生靜態 C 函式庫,以便連結至您自己的專案。libhandler 盡可能撰寫為可移植,但仍依賴堆疊與 setjmp 實作的平台特定假設。請在新平台上仔細測試。目前已測試的平台包括:

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

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

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

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

  • gcc-arm64-linux (64 位元,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 編譯器(例如 gccclang 等)
  • --cc-opts=<options> : 指定要使用的額外 C 編譯器旗標(例如 -m64
  • --asm-opts=<options> : 指定要使用的額外組譯器旗標(例如 -m64
  • --abi=<abi> : 指定呼叫慣例 ABI。例如 --abi=amd64--abi=x64
  • --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 上有三種建置方式:

  1. 使用 Microsoft Visual C++ IDE。2015 社群版可供非商業用途免費下載。 方案檔案位於:

  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 版本上,您可以使用 msys2, 可從 http://msys2.github.io 下載。請仔細遵循安裝說明。安裝後,可使用 msys2 套件管理員安裝更多工具:

    • pacman -S mingw-w64-x86_64-gcc (C 編譯器)
    • pacman -S mingw-w64-x86_64-gdb (偵錯器)
    • 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
    使用已安裝 mingw-w64-i686-toolchainmingw32 shell。
  • clang-x64-pc-windows
    使用 ./configure --cc=/c/programs/llvm/bin/clang
  • clang-x86-pc-windows (32 位元)
    使用 ./configure --cc=/c/programs/llvm/bin/clang --cc-opts=-m32 --asm-opts=-m32

使用 Visual Studio IDE:

  • cl-x64-pc-windows 選擇 64 位元建置。
  • cl-x86-pc-windows 選擇 32 位元建置。

Windows 上的 LibUV

已在 Visual Studio 的 x64 建置中啟用。您需要在主 libhandler 資料夾下的 libuv 資料夾中放置 libuv 標頭檔與二進位檔。 Windows 的二進位檔可從 libuv.org 取得。