跳至內容

必要的函式庫

這是 Crystal 編譯器和標準函式庫所使用的第三方函式庫列表。

核心執行時期相依性

本節中的函式庫是 Crystal 的 stdlib 執行時期始終需要的。它們必須存在才能建置或執行任何使用標準函式庫的 Crystal 程式。只有在不使用標準函式庫時 (--prelude=none 編譯器選項) 才能避免這些相依性。

系統函式庫

一個主要元件是系統函式庫。選擇取決於目標平台,並支援多種。這通常包括 C 標準函式庫以及其他系統函式庫,例如 libdllibmlibpthreadlibcmtlibiconv,它們可能是 C 函式庫的一部分或獨立函式庫。在大多數平台上,所有這些函式庫都由作業系統提供。

函式庫 描述 授權條款
glibc Linux 的標準 C 函式庫 LGPL
musl libc Linux 的標準 C 函式庫 MIT
FreeBSD libc FreeBSD 的標準 C 函式庫 BSD
NetBSD libc NetBSD 的標準 C 函式庫 BSD
OpenBSD libc OpenBSD 的標準 C 函式庫 BSD
Dragonfly libc DragonflyBSD 的標準 C 函式庫 BSD
macOS libsystem macOS 的標準 C 函式庫 Apple
MSVCRT MSVC 編譯器 (Windows) 的標準 C 函式庫
WASI WebAssembly 系統介面 Apache v2 和其他
bionic libc Android 的 C 函式庫 類 BSD

其他執行時期函式庫

函式庫 描述 授權條款
Boehm GC Boehm-Demers-Weiser 保守垃圾收集器。執行自動記憶體管理。 MIT 風格
Libevent 一個事件通知函式庫。在 POSIX 平台上實作並行功能,例如 Fiber 和事件迴圈。在 Windows 上不使用。 修改過的 BSD
compiler-rt builtins 為程式碼產生所需的低階常式提供最佳化實作,例如整數乘法。其中一些常式已直接移植到 Crystal。 MIT / UIUC

可選的標準函式庫相依性

這些函式庫是標準函式庫的不同部分所需要的,僅在明確使用時才需要。

正規表達式引擎

Regex 類別的引擎實作。Crystal 1.7 中新增了 PCRE2 支援,並且自 1.8 以來為預設值 (請參閱正規表達式文件)。

函式庫 描述 授權條款
PCRE2 Perl 相容正規表達式,版本 2。 BSD
PCRE Perl 相容正規表達式。 BSD

大數

Big 型別的實作,例如 BigInt

函式庫 描述 授權條款
GMP GNU 多精度算術函式庫。 LGPL v3+ / GPL v2+
MPIR 多精度整數和有理數,從 GMP 分支。在 Windows 上使用。 GPL-3.0LGPL-3.0

國際化轉換

這是一個獨立函式庫,或者在某些平台上可以作為系統函式庫的一部分提供。可以使用 -Dwithout_iconv 編譯時旗標停用。可以使用 -Duse_libiconv 編譯時旗標強制使用獨立函式庫而非系統函式庫實作。

函式庫 描述 授權條款
libiconv (GNU) 國際化轉換函式庫。 LGPL-3.0

TLS

TLS 協定實作和 OpenSSL API 的通用加密常式。可以使用 -Dwithout_openssl 編譯時旗標停用。

同時支援 OpenSSLLibreSSL,並且綁定會自動偵測主機系統上可用的函式庫和 API 版本。

函式庫 描述 授權條款
OpenSSL SSL 和 TLS 協定的實作 Apache v2 (3.0 以上版本)、OpenSSL / SSLeay (1.x)
LibreSSL SSL 和 TLS 協定的實作;於 2014 年從 OpenSSL 分支 ISC / OpenSSL / SSLeay

其他 stdlib 函式庫

函式庫 描述 授權條款
LibXML2 為 Gnome 專案開發的 XML 剖析器。實作 XML 模組。 MIT
LibYAML YAML 剖析器和發射器函式庫。實作 YAML 模組。 MIT
zlib 無損資料壓縮函式庫。實作 Compress 模組。可以使用 -Dwithout_zlib 編譯時旗標停用。 zlib
LLVM 目標獨立的程式碼產生器和最佳化器。實作了 LLVM API。 Apache v2 附帶 LLVM 例外條款

編譯器相依性

除了核心執行期相依性之外,還需要這些函式庫來建置 Crystal 編譯器。

函式庫 描述 授權條款
PCRE2 請參閱上方。
LLVM 請參閱上方。 Apache v2 附帶 LLVM 例外條款
libffi 外部函式介面。用於在直譯器中實作二進位介面。可以使用 -Dwithout_interpreter 編譯時標記停用。 MIT