Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

版本 1.86.0

版本 1.86.0

2024 年 8 月 14 日 16:07 GMT

文件

下載
平台檔案SHA256 雜湊值
Unixboost_1_86_0.tar.bz21bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b
boost_1_86_0.tar.gz2575e74ffc3ef1cd0babac2c1ee8bdb5782a0ee672b1912da40e5b4b591ca01f
Windowsboost_1_86_0.7z413ee9d5754d0ac5994a3bf70c3b5606b10f33824fdd56cf04d425f2fc6bb8ce
boost_1_86_0.zipcd20a5694e753683e1dc2ee10e2d1bb11704e65893ebcc6ced234ba68e5d8646
* 下載連結由 C++ 聯盟 的補助支持。

新增函式庫

  • 無新增函式庫。

已更新函式庫

  • Asio:
    • default_completion_token 特性的主要模板更改為選擇 deferred 作為預設完成權杖。因此,大多數非同步操作的起始函式預設將返回延遲的非同步操作。
    • 新增了 is_completion_condition 特性,並將缺少的預設完成權杖新增到 async_readasync_read_atasync_writeasync_write_at 的多載中。
    • 新增了 is_connect_condition 特性,並使用它在完成權杖預設的情況下消除 async_connect 多載的歧義。
    • 擴展了完成權杖轉接器 as_tuplebind_allocatorbind_cancellation_slotbind_executorbind_immediate_executorredirect_error,允許它們被用作部分完成權杖轉接器。
    • 新增了 cancel_aftercancel_at 完成權杖轉接器。
    • 更改了所有完成權杖轉接器,以確保它們在轉接過程中正確傳播非同步操作的 I/O 執行器。
    • co_composed 移出 experimental 命名空間。
    • 新增了 composed,它從狀態實現建立一個起始函式物件。它類似於 co_composed,但適用於常規函式物件,而不是 C++20 協程。
    • 更改了 detached 完成權杖,使其可與具有多個完成簽章的非同步操作一起使用。
    • 更改了 async_initiate 以允許空的完成簽章可變參數列表,這表示非同步操作永遠不會完成。
    • 新增了 async_initiate 的多載,可自動推導完成權杖的類型。
    • 新增了 async_immediate,它實現了一個立即完成的簡單非同步操作,如果可用,則使用關聯的立即執行器。
    • 啟用了基於 SFINAE 的 associator 特性的部分特化。
    • 一些錯誤修正、編譯器/平台相容性改進,以及一些小的優化。
    • 文件中和範例的各種更新。
    • 有關更多詳細資訊,請參閱修訂歷史
  • 原子操作 (Atomic):
    • 由於最近的 OpenBSD 版本已移除對 syscall(2) 的支援,因此在 OpenBSD 上使用 futex(2) 系統呼叫。
  • Beast:
    • API 變更
      • 新增了 HTTP 狀態碼 418 I'm a teapot (我是茶壺)。
    • 修正
      • read_size_hint_db() 中的窄化轉換 (narrowing conversion)。
      • 使用預設 completion tokens 時不明確的重載 (overloads)。
      • http::basic_fields 移動賦值運算子 (move-assignment operator) 中位置錯誤的 static_assert。
      • WebSocket 部分寫入操作中 bytes_transferred 的下溢 (underflow)。
      • websocket::stream::read_size_hint() 不超過 read_message_max
      • 測試中的各種警告。
      • 範例中 SSL 關閉操作的錯誤處理。
      • 在 zlib 中標註 fallthrough 案例。
      • basic_stream::ops::transfer_op 中過期計時器的處理。
      • test::basic_stream 建構函式重載的歧義。
      • http::parser 中最後一個區塊的部分解析。
    • 改進
      • server_flex_awaitable 範例中的優雅關閉。
      • 簡化的 awaitable 範例。
      • 新增了模糊測試 (fuzzing) 目標。
      • 移除一些範例中多餘的 std::bind 使用。
      • ssl_stream 不使用 flat_stream
    • 文件
      • ssl_streamflat_stream 標記為已棄用。
      • net::ssl::stream 在程式碼片段和範例中是標準用法。
      • 新增了「SSL/TLS 關閉程序」章節。
    • 致謝
      • tyler92, Ruslan Zakirov, Orgad Shaneh, Alexander Kernozhitsky
  • Charconv:
    • 修正了對 PPC64LE 架構的支援。
    • 修正了對提供 <quadmath.h> 標頭但不提供已編譯程式庫的平台(例如 Alpine Linux)的支援。
    • 修正了整數類型 from_chars 中的首字元模式匹配。
    • 修正了基數大於 10 的整數的溢位偵測。
    • 增加了對 std::float16_tstd::bfloat16_t 的原生支援,而不是使用交換格式。
  • Cobalt:
    • 新增了對 asio::cancel_after 的支援
    • 使 asio::deferred 可以 co_await,因為它是 asio 的預設 token
    • 新增了 noop 工具程式
    • 新增了對堆疊式協程/纖程的實驗性支援
    • 修正通道和協程類型的可移動性問題
  • 相容性:
    • 新增了 bind_front.hppbind_back.hppinvoke.hppmem_fn.hppinteger_sequence.hpptype_traits.hpp 等標頭檔。
    • 新增了 function_ref.hpp 標頭檔。
  • 容器:
  • 核心:
    • 新增了 boost/core/pointer_in_range.hpp 標頭檔,其中包含一個 `pointer_in_range` 函式模板,用於檢查指標是否在給定範圍內 (Glen Fernandes)。
    • 修正了抽象類別的 `type_name` 問題。(#172
    • 修正了在 MSVC 中停用原生 `wchar_t` 類型時,boost/core/type_name.hpp 的編譯錯誤。(#173
    • 新增了針對 MSVC 錯誤 的解決方法,該錯誤導致在 `empty_value` 與巢狀類別一起使用時出現編譯錯誤。(PR#175
  • CRC:
    • 不再支援 C++03;需要 C++11 編譯器。(這包含 GCC 4.6 或更高版本,以及 MSVC 10.0 (VS 2010) 或更高版本。)
    • 移除對 Array、Config、Integer 和 TypeTraits 的依賴。該函式庫現在是獨立的。
  • 檔案系統:
    • `is_empty` 操作現在可以更好地防止併發檔案系統修改。
    • 在 POSIX 系統上,如果在非一般檔案或目錄的檔案上呼叫 `is_empty`,現在會指示錯誤。
    • 在 Windows 上,修正了 `file_size` 和 `is_empty` 對符號連結而非符號連結所指向的檔案進行操作的問題。(#313
    • directory_entry::refresh 現在即使項目所參考的檔案不存在,也不會拋出例外。這使得 directory_entry::statusdirectory_entry::symlink_status,以及基於它們的方法,其行為與對應的獨立操作類似。檔案不存在的情況仍然會透過對應的 directory_entry::refresh 多載所返回的 error_code 指示,或者可以透過測試 directory_entry::statusdirectory_entry::symlink_status 呼叫返回的檔案類型是否為 file_type::file_not_found 來確認。(#314)
    • 修正了 weakly_canonical 在輸入路徑為相對路徑時,會針對目前路徑而不是呼叫中指定的基底路徑來測試路徑元素是否存在的問題。
    • 在 Windows 上,修正了當輸入路徑以 ".." 開頭時,weakly_canonical 產生不正確結果路徑的問題。(#311)
  • **格式 (Format)**:
    • 不再支援 C++03;需要 C++11 編譯器。(這包含 GCC 4.7 或更高版本,以及 MSVC 12.0 (VS 2013) 或更高版本。)
  • **功能 (Function)**:
    • 移除對 Boost.TypeTraits 的依賴。
    • 恢復了在 1.85 中意外遺失的 argN_type 類型定義。
  • **泛型圖像程式庫 (GIL)**:
    • **新增 (Added)**
      • istream_deviceostream_device 類別中新增了 tell()error() 函式。(PR#747)
    • **變更 (Changed)**
      • color_converted_view 函式中不再忽略自訂顏色轉換器。(PR#726)
      • 新增了針對 WinAPI 上與 min()max() 巨集衝突的解決方法。(PR#745)
      • 現在可以在 CMake 中透過選項 BOOST_GIL_USE_BOOST_FILESYSTEM 設定 GIL 中 boost::filesystem 的使用。(PR#743)
    • **修正 (Fixed)**
      • 修正了 convolve_2d 中的卷積運算。(PR#723)
      • 正規化高斯二維核心以避免變暗。(PR#725)
      • 修正了 std::wstring 路徑字串轉換函式中的錯誤緩衝區大小,避免在使用帶有 std::wstring 路徑的 I/O 相關函式時發生緩衝區溢位。(PR#746)
    • 致謝
      • 貢獻者:Christoph Gringmuth, Christopher Kormanyos, nicolacandussi, Dirk Stolle, Olzhas Zhumabek
  • **圖形 (Graph)**:
    • *重大* 更新:C++14 是新的最低標準;這部分是由依賴項(至少是 C++11)決定的,部分是出於選擇。如果您需要支援較舊的標準,請聯繫維護人員。
    • 移除對 Boost.Regex 的直接依賴。
    • 修正了幾個由於未明確包含常用標頭檔而導致的編譯錯誤。
    • isomorphism:修正文件,忽略 vertex_max_invariant 參數,改用低成本計算上限(不包含),修正關聯屬性映射的錯誤,將空間效率從最大不變量大小的線性提升到 g1 大小的線性。
    • boykov_kolmogorov_max_flow:修正命名參數多載。
    • adj_list_edge_iterator:修正可能未初始化的警告。
    • hawick_circuits:新增一個參數來選擇性地限制搜尋深度,以便及早返回可能並非最佳的答案。
    • disjoint_sets:透過移除多餘的集合代表元素查找,提升 link_sets 的效能。
    • maximum_adjacency_search:重構並新增更多測試。
    • property:使用 BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS 來移除浪費的空間。
    • labeled_graph:修正 remove_labeled_vertex,使其確實移除標籤。
    • r_c_shortest_paths:修正單一解版本未總是返回最短路徑的錯誤。
    • read_graphviz:修正堆疊溢位問題(oss-fuzz 問題 66719)和非關鍵字子圖解析問題。
    • 許多其他方面的改進:損毀的連結、拼寫錯誤等等。
  • JSON:
    • 對於 GCC 5.0 以前版本的支援已被棄用,並**將於 Boost 1.88.0 中停止支援**。
    • 已將 source_location 參數新增至擲回異常的存取器函式。
    • 解析選項可容忍無效的 UTF-16 代理對,並產生 WTF-8
    • 新增了返回 system::result 的存取器函式。
    • 處理直接解析中遺漏的錯誤情況。
  • LexicalCast:
    • 修正了包含一個或多個 \0 字元的 std::basic_string_viewboost::basic_string_view 的轉換。此問題是在 1.85.0 中引入的。
  • leaf:
    • 更優化的 verbose_diagnostic_info 實作。
    • 錯誤修正。
    • 已將 [[nodiscard]] 新增至 class result<>。
  • Locale:
    • conv::utf_to_utf 中新增對自訂配置器的支援
    • 預設情況下不建置範例
  • 日誌 (Log):
    • 新增了針對 windres.exe 問題的因應措施,該問題發生於 CMake 在 MinGW-w64 上編譯事件日誌資源檔時。(PR#231
  • 數學 (Math):
    • 修正無窮大時的貝索函數結果,請參閱 1143
    • 提升非中心 t 分配的數值穩定性,請參閱 scipy20693
    • 修正無窮大時 float_next/float_prior 的行為。
    • 防止非中心貝塔分佈中的虛假下溢,請參閱 scipy20693
    • 提升 Heuman Lambda 的精度。
    • 改進偏態常態分佈的尋根演算法,請參閱 1120
    • 許多小修正和程式碼覆蓋率的提升。
  • 高精度運算 (Multiprecision):
    • 確保 eval_convert_to() 不會因超大數字而終止,請參閱 618
    • 修正 sinc 的實作,使其符合 Boost.Math 的行為。
    • 修正 cpp_int 模數運算中的除以零錯誤。
    • 修正大於 128 位元的整數的下溢行為一致性,請參閱 626
  • MySQL:
    • 已移除長期棄用的函式 querystart_queryexecute_statementstart_statement_execution(及其非同步版本)。
    • 實驗性 API 的重大變更
      • 已移除 identifier 類別(用戶端 SQL 格式化)。請改用新的格式指定子功能。
      • 為了適應新的格式說明符 API,自訂格式器的所需介面已變更。
      • any_connection::async_connect 現在要求其 connect_params 參數必須保持有效直到操作完成。採用 const connect_params* 的多載已被移除。
      • character_set::name 現在是 const char* 類型,而不是 string_view,因為 MySQL 字元集名稱不能包含 NULL 字元。
      • any_connection 的內部緩衝區現在限制為 64MB。如果您需要讀取或寫入大於此大小的資料列,請增加 any_connection_params::max_buffer_size 的值。connection 及其輔助類型定義則沒有此限制。
      • any_connection_params::initial_read_buffer_size 重新命名為 initial_buffer_size
      • pool_params::initial_read_buffer_size 重新命名為 initial_buffer_size
    • 新的實驗性 API:**管道(pipelines)**。管道可以透過將多個請求合併到單個網路封包中來提高效率。管道可用於執行文字查詢、準備、執行和關閉語句、重設工作階段狀態以及設定連線的字元集。
    • 客戶端 SQL 格式化現在直接支援範圍。可以使用新的 sequence 函式進一步自訂格式化。使用此功能可以大幅簡化批次插入和批次查找等用例。
    • 客戶端 SQL 格式化現在支援格式說明符,用於修改值的格式化方式。{:i} 將字串格式化為動態 SQL 識別符號,而 {:r} 則輸出原始未逸出的字串。
    • 靜態介面(static_resultsstatic_execution_state)現在使用 pfr_by_namepfr_by_position 支援 Boost.Pfr 類型。新增了 underlying_row_t 來支援此類類型。
    • datedatetime 現在可以從 C++20 的 std::chrono::local_time 建構,也可以轉換為該類型。
    • 新增了 any_connection_params::max_buffer_size,允許設定連線內部緩衝區的限制。
    • 新增了 is_fatal_error,允許使用者區分致命錯誤碼(需要關閉並重新開啟連線)和非致命錯誤碼。
    • 新增了 formattable_ref,這是一個類型擦除的引用類型,可以引用任何滿足 Formattable 概念的類型。
    • 修正了 MSVC 下的 ODR 違規,該違規在使用 Boost.MySQL 並且在不同翻譯單元中也使用 asio::coroutine 的程式碼時,可能導致發布版本崩潰。
  • Odeint:
    • 新增了 CMake 選項 BOOST_NUMERIC_ODEINT_NO_ADAPTORS 以減少依賴性,詳見 82
    • 修正了 CMake 對 MPI 的偵測。
  • Process (行程):
    • 將舊的 boost.process 移至 v1 子資料夾和內聯命名空間。已棄用 process/*.hpp v1 標頭檔。
    • 將 v2 轉換為編譯函式庫。
    • 修正了在 Alpine Linux / musl 上的使用問題。
  • Stacktrace (堆疊追蹤):
    • **重要新功能:Windows 平台任意異常的堆疊追蹤**。`std::stacktrace::from_current_exception()` 現在可在 Windows 平台上運作。非常感謝 huangqinjin 的實作貢獻 (PR#159)。現在在 POSIX 和 Windows 上,`from_current_exception()` 函式會返回當前異常物件的堆疊追蹤,如同在拋出異常時擷取堆疊追蹤一樣。
    • 修正了包含少用 Windows SDK 標頭檔的問題,此問題可能與其他使用 Windows SDK 的程式碼衝突。感謝 Marat Abrarov 修正了此問題 (PR#157)。
    • 建置選項 `boost.stacktrace.from_exception` 現在可以在 macOS 上正常運作。感謝 Peter Dimov 的修正 (PR#166)。
    • 修正了斷言表達式中的拼寫錯誤。感謝 Kilian Henneberger 的錯誤回報 (#164)。
    • 修正了變數遮蔽警告。感謝 Nigel Stewart 的錯誤回報 (#141)。
    • 為 AIX 添加了 `dladdr` 的最小支援。非常感謝 Clément Chigot 的實作貢獻 (PR#114)。
    • 添加了 `Boost::stacktrace` CMake 別名,它指向平台上支援最佳的 Boost.Stacktrace 實作。感謝 Alex 的功能貢獻 (PR#167)。
    • CMake 的重大改進:多項修正、添加許多新測試、改進了持續整合。非常感謝 Peter Dimov 的所有改進。
    • 修正了透過 `PATH` 查找程序時 addr2line 的運作問題。感謝 Schreischildkroete 的錯誤回報和 Jens Richter 的修正 (#72)。
  • 測試:
    • 在設定步驟中修正了 `-Wundef` 問題。
    • 修正了 MSVC 上無法到達的返回編譯錯誤。
  • 無序:
    • 當標頭檔 `` 可用時,添加了容器 `pmr` 別名。別名 `boost::unordered::pmr::[container]` 指的是使用 `std::pmr::polymorphic_allocator` 分配器類型的 `boost::unordered::[container]`。
    • 使開放定址和並行容器能夠內部計算並提供受雜湊函數品質影響的統計指標。此功能由全域巨集 `BOOST_UNORDERED_ENABLE_STATS` 啟用。
    • 現在必須透過具有內嵌常數 `value` 設為 `true` 的 `is_avalanching` 類型定義來標記雪崩雜湊函數(通常將 `is_avalanching` 定義為 `std::true_type`)。`using is_avalanching = void` 已被棄用,但為了向後相容性仍然允許使用。
    • 為容器和迭代器添加了 Visual Studio Natvis 框架的自訂視覺化功能。這適用於所有使用原始指標的分配器的容器。在此版本中,如果容器和迭代器的分配器使用 fancy 指標,則不受支援。這可能會在後續版本中解決。
  • UUID:
    • *重大* 更新。
    • 不再支援 C++03,需要 C++11 編譯器。(這包括 GCC 4.8 或更高版本、MSVC 14.0 (VS 2015) 或更高版本,以及 MinGW-w64。)
    • Boost 依賴項的數量從 39 個(總共)減少到僅 5 個。
    • 已更新以反映較新的 RFC 9562
    • 新增了基於時間的 UUID 生成器。
    • *許多* 其他改進,請參閱 修訂記錄
  • Wave:
    • 將一處 vsprintf 的使用替換為更安全的 vsnprintf。
    • 修復了錯誤。
      • #197:不正確的帶符號溢位處理(未定義行為和缺少除法檢查)。
  • WinAPI:
    • 新增了 BOOST_USE_WINAPI_VERSION CMake 選項,允許使用者指定 Boost 要鎖定的 Windows 版本。

已更新工具

  • BoostBook:
    • DTD 已更新:constructorcopy-assignmentdestructor 元素現在允許在 method-group 元素內使用。
    • Doxygen 生成的文件中許多錯誤修復和改進。
      • 修復了 Doxygen 生成的列舉值初始化程式中重複等號的問題。
      • 停用了函式參數的字母順序排序。可以透過將新的 boost.sort.params XSL 參數設定為 1 來重新啟用排序。
      • 新增了對自訂類別成員分組的支援。請參閱 Doxygen 標籤 @name@{/@}
      • 新增了對 Doxygen 參考類別、方法、列舉、變數等的支援(請參閱 @ref 標籤)。
      • 新增了對 @remark@important 標籤的支援。
      • 新增了對 @parblock 標籤的支援,可用於在需要單個段落作為參數的標籤下放置多個段落(例如 @returns)。
      • 現在隱藏了參考實作細節的模板參數預設值,類似於函式參數預設值。
      • 改進了未命名列舉的呈現方式。不再顯示合成的名稱,例如 @0,而是省略名稱或使用 [unnamed](如果需要該名稱來引入指向列舉文件的連結)。
      • 將「另請參閱」(@sa)區塊更改為以行內顯示,類似於「傳回值」。
      • 修復了多個例外規範(@throws)的呈現方式。
      • 新增了對自由格式拋出行為描述的支援。如果 @throws 標籤後的例外類型為「~」,則輸出中會省略例外類型,並直接在「Throws」(拋出)區段中顯示後續的描述。
      • 移除回傳類型和模板參數中多餘的空格。
  • 建置:

已測試的編譯器

Boost 主要測試的編譯器如下:

  • Linux
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X (macOS)
    • Apple Clang, C++03: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

致謝

Marshall Clow、Glen Fernandes 和 Ion Gaztañaga 負責管理此版本。