Boost C++ 函式庫

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

版本 1.82.0

版本 1.82.0

2023 年 4 月 14 日 03:08 GMT

說明文件

下載
平台檔案SHA256 雜湊值
Unixboost_1_82_0.tar.bz2a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6
boost_1_82_0.tar.gz66a469b6e608a51f8347236f4912e27dc5c60c60d7d53ae9bfe4683316c6f04c
Windowsboost_1_82_0.7ze72ff100482d4b371327b6c550dbd244d49c0186860ccc3b8c093dd621537e39
boost_1_82_0.zipf7c9e28d242abcd7a2c1b962039fcdd463ca149d1883c3a950bbcc0ce6f7c6d9
* 下載連結由 C++ 聯盟 的補助支持。

已知問題

以下是由函式庫作者提供的修補程式,這些問題在發佈版本時發現已為時已晚。

  • 檔案系統 (Filesystem)
    • 在 OpenBSD 上的編譯可能會失敗,因為此平台上共享函式庫的 -Wl,--no-undefined 編譯器旗標支援損壞,詳見 #283修補程式
    • 在 Windows 上,針對 SMBv1 共享中的目錄建立目錄迭代器可能會失敗,並出現 ERROR_INVALID_LEVEL 錯誤碼,詳見 #284修補程式

停止支援 C++03 的通知

以下函式庫將在兩個版本後的 1.84 版中停止支援 C++03

  • Align
  • Any
  • Asio
  • Atomic
  • Bind
  • Chrono
  • ContainerHash
  • Conversion
  • DLL
  • Endian
  • 檔案系統 (Filesystem)
  • Function
  • Functional
  • Io
  • LexicalCast
  • Log
  • Random
  • Ratio
  • SmartPtr
  • System
  • Stacktrace
  • Thread
  • Timer
  • TypeIndex
  • Typeof
  • Unordered
  • Variant

此版本 (1.82) 和下一個版本 (1.83) 將是最後提供上述函式庫及其大多數依賴項之 C++03 支援的版本。

上述函式庫以及大部分 Boost 函式庫的新基準需求將是 C++11。由於舊版編譯器通常只會部分實作 C++11(因為缺少支援或錯誤),因此被視為符合 C++11 需求的編譯器可能會因函式庫而異。

然而,一般規則是,如果編譯器根本無法辨識 C++11 關鍵字或語法(例如,使用 noexcept、使用 constexpr 或定義 =delete 的函式會導致立即編譯錯誤),或者如果編譯器根本不提供所需的 C++11 標頭(例如,嘗試包含 <atomic><chrono> 失敗),或者編譯器提供的 C++11 功能或標頭完全無法使用,則此編譯器不被視為 C++11 編譯器。

這表示不支援例如 14.0 之前的 Microsoft Visual C++,或 4.8 之前的 GCC。

新增函式庫

  • Mysql: 一個基於 Boost.Asio 的 MySQL 資料庫伺服器 C++11 用戶端,由 Ruben Perez 開發。

更新函式庫

  • Any:
    • 現在使用 core/enable_if.hpp 標頭檔,取代已棄用的 utility/enable_if.hpp。感謝 Michael Ford 的 PR PR#25
  • Asio:
    • 新增了自訂操作立即完成時執行完成處理程式的能力。
    • 新增了緩衝區類型的使用者定義字面常數。
    • 新增了一個新的協定類型 local::seq_packet_protocol 來表示使用 SOCK_SEQPACKETAF_UNIX
    • 透過 signal_set::add 的一個可選參數,公開了 sigaction() 旗標。
    • 更改 allocator_binderexecutor_bindercancellation_slot_binder 以支援未特化的關聯器的檢測。
    • 修正了 associated_cancellation_slot<reference_wrapper>::get() 中的歧義。
    • 修正了包含 std::exception_ptr 的完成簽章的 awaitable<> 處理。
    • 修正了在 cancelexperimental::channel<> try_send 失敗的問題。
    • 修正了當線程池沒有內部線程時,thread_pool::join() 死鎖的問題。
    • 修正了使用io_uring 時 pipe release() 的問題。.
    • 修正了io_uring 時 pipe release() 的問題。後端中的資料初始化和清理問題。
    • 修正了 get_associated_executor() 的執行上下文重載中懸空參考的問題。
    • 確保在 experimental::channel<> 關閉時仍然可以接收緩衝的消息。
    • 修正了 any_completion_handler 賦值運算子。
    • 限制了 any_completion_handler 的建構函式,以防止意外複製。
    • 更改為使用 uint64_t 作為 OpenSSL 選項,以匹配 OpenSSL 3。
    • 修正了 deferred 與多個完成簽章的互通性。
    • 修正了通道,以增加對 C++11 和 C++14 的部分支援。
    • 在等待打包的非同步操作時,為 co_composed 和 'awaitable<>' 協程新增了缺少的處理程式追蹤來源位置支援。
    • 修正了一些「潛在的空指標解參考」和陰影變數警告。
    • 修正了與 const_buffers_1mutable_buffers_1 一起使用時 asio::buffer 重載選擇的問題。
    • 除非目標是較舊的 Windows,否則停用目前 Windows 版本的運行時檢查。
    • 修正了緩衝串流包裝器與可移動建構串流(例如 ssl::stream<>)之間的相容性問題。
    • 修正了 basic_socket_acceptor::async_accept 與具有推導返回類型的 lambda 的相容性。
    • 修正了 as_tuple 與舊版完成記號的相容性。
    • 修正了 redirect_error 與新版完成記號的相容性。
    • 修正了 Windows 特有的潛在程式終止問題,該問題是由於異常應被允許從解構函式中跳出而引起的。
    • 防止了對布林運算式進行不慎的 co_await 操作。
    • 修正了 experimental::use_coro 中的結果處理和對自訂配置器的支援。
    • 修正了 is_async_operationcompletion_signature_of 的可變參數模板模擬。
    • 修正了 experimental::promise 中對已移動結果的錯誤重複使用。
    • 修正了 experimental::coro 與自訂配置器一起使用的情況。
    • 修正了 Windows 上以串流導向檔案使用 seek_cur 的行為。
    • 對文件進行了各種新增和修改。
    • 有關更多詳細資訊,請參閱修訂歷史記錄
  • Atomic:
    • 在為支援 AVX 的 x86 目標編譯時,現在會將向量指令用於 128 位元原子載入和儲存。
    • 對於 32 位元 x86 目標,具有 memory_order_seq_cst 語義的 64 位元原子載入和儲存現在將發出記憶體排序指令。
    • 移除了在 Boost.Atomic 1.73 中已棄用的 atomic<T>::storage() 存取器和 atomic<T>::storage_type 類型。建議使用者改用 atomic<T>::value()atomic<T>::value_type
  • Beast:
    • 新增 error_code 使用 source_location
    • tcp_stream 使用計時器的正確執行器。
    • 錯誤類別使用數值 ID。
    • file_body 支援搜尋。
  • ContainerHash:
    • std::nullptr_t 新增了 hash_value 的重載。
    • 為類似 tuple 的類型新增了 is_tuple_likehash_value 的重載。
    • 將字串雜湊更改為使用 mulxp1_hash。這提高了品質和速度。
  • 核心:
    • 新增了 boost/core/snprintf.hpp 標頭,其中包含 snprintfvsnprintf 及其 wchar_t 對應項的可攜式定義。
    • 已棄用 boost/core/is_same.hpp 標頭檔和 boost::core::is_same。該標頭檔將於未來版本中移除。建議用戶改用 Boost.TypeTraits 或 C++ 標準函式庫的型別特徵 (type traits)。
    • 已將 boost::ref 的成員函式和相關方法標記為 noexcept
    • 已將 boost::swap 函式標記為 noexcept,取決於該型別是否支援不擲回例外的 swap 操作。
    • 新增 boost::core::launder,一個可移植的 std::launder 實作。
    • 新增 BOOST_CORE_ALIGNOF,一個可移植的 alignof 實作。
    • 新增 boost::core::max_align_t,一個可移植的 std::max_align_t 等效項,以及 boost::core::max_align,即 max_align_t 的對齊大小。
    • 新增 boost::core::memory_resource,一個可移植的 C++17 std::pmr::memory_resource 等效項。
    • 新增 boost/core/serialization.hpp,一個允許函式庫為其型別實作 Boost.Serialization 支援的基礎元件集合,無需引入 Serialization 標頭檔,從而避免函式庫對 Serialization 的依賴。
    • 新增 boost::data,一個 std::data 的實作。
    • 新增 boost::size,一個 std::size 的實作。
    • 更新 boost::span 以使用 boost::data,新增了從 std::initializer_list 建構範圍的支援。
    • 新增 boost::identity,一個 std::identity 的實作。此功能已從 Boost.Functional 移至這裡。
  • DLL:
    • 避免了從 size_t 到 uint32_t 的隱式轉換,感謝 Travers Biddle 的 PR PR#57
  • 檔案系統 (Filesystem):
    • 修正了可能由 path 轉換建構函式對接受的引數過於寬鬆所導致的編譯錯誤。(#273)
    • v4:path::remove_filename 現在會保留尾端的目錄分隔符號。(#271)
    • 新增 path::remove_filename_and_trailing_separators,它會從路徑中移除檔名及其前面的目錄分隔符號。此行為類似於檔案系統 v3 中的 path::remove_filename,但在 v4 中也可以使用。
    • 新增 path::replace_filename,用於替換路徑中的檔名。
    • 更新了函式庫版本選擇的實作,以避免 ODR 違規。(#279)
    • 在 Windows 上,新增了針對 SMBv1 共享中檔案屬性查詢的因應措施。先前,SMBv1 共享中的目錄可能被回報為一般檔案。這不影響 SMBv2 或更新版本。(#282)
  • 幾何 (Geometry):
    • 主要改進
      • PR#1045 支援 (多重)線串和 (多重)多邊形的地理緩衝區
    • 改進
      • PR#1114 可比較距離:新增對動態幾何的支援
      • PR#1046 支援方框、幾何組合的 covered_by()
    • 已解決的問題
      • #705 WKT:允許定位點和換行符號
      • #1109#1108 union 的修正
      • 範例中的各種修正
    • 重大變更
      • 現在,空多邊形的 WKT 輸出呈現為 POLYGON(),使其與其他幾何形狀一致
  • 直方圖 (Histogram):
    • detail::spandetail::make_span 替換為 boost::core 中的實作
    • 文件改進
    • 在某些情況下,保護 std::minstd::max 的使用,由 Han Jiang 貢獻 (熱門的 Windows 標頭會非法設定 min、max 巨集,因此我們需要解決此問題)
    • 新增測試以捕捉未來程式庫中未受保護的 min、max 權杖的使用
    • 修正以支援最新的 clang-14 和 gcc-11+ 中的推導指南
  • JSON:
    • set_at_pointer.
    • boost::hash 支援。
    • 呼叫者提供的序列化器儲存空間。
    • 針對 std::optionalvalue_to 支援缺少的元素。
    • 修正轉義字元內的剖析器暫停。
    • 使 sentinel() 返回唯一指標。
  • 地區設定 (Locale):
    • get_system_locale 及其相依項現在將根據 POSIX 的定義,正確地優先使用 LC_ALL 而非 LC_CTYPE PR#144
    • 對於尾隨 (UTF) 代理項,utf8_codecvt::out 會返回 partial
    • 新增 boost::locale::util::locale_data 以剖析地區設定
    • boost::locale::info::encoding() 的結果現在如文件中所示為大寫,例如 "UTF-8" 而不是 "utf-8"
    • 支援 M49 國家/地區代碼,例如 en_001en_150 PR#148
    • en_US_POSIX 視為 C 地區設定的別名 PR#148
    • 改進缺少分段支援 (即沒有 ICU) 的錯誤訊息 PR#149
    • 修正編譯器警告
  • 數學 (Math):
    • C++11 支援棄用:現在最低支援 C++14 標準。我們最低測試的編譯器版本現在是 Clang-5、GCC-5 或 MSVC-14.1。
    • 新增 Estrin 方法用於多項式求值。
    • 修正非中心分佈中的各種問題,以允許更大的非中心性,詳見 939
    • 新增 CMake 安裝目標。
    • 修正 special_functions.hpp 以停用在無異常環境中無法使用的任何功能。
    • 使條件數計算在 C++14 中正常運作。
    • 修正 constexpr 表格驅動函式,以避免當程式碼實際上不是 constexpr 時出現嚴重效能下降,詳見 923
    • 改進 tanh_sinh 邊界處理,詳見 894
    • 新增 Linux arm64、s390x 和 Apple M1 測試,修正測試案例以處理 128 位元 long double。
    • 改進 constexpr 數學函式以更好地處理無限大和 NaN。
    • 使積分器 const-correct。
    • 修正當被積函式下溢時 tanh_sinh 積分器的問題,詳見 898
    • 不再使用 std::cbrt,因為某些平台仍不支援它。
    • 阻止非中心 T 引發虛假的 FE_INVALID 異常,詳見 892
    • 修正二項式分佈的邊緣情況。
    • 改進 ibeta 處理非常小的參數,詳見 884
    • 改進 ibeta 處理無限大和 NaN,詳見 878
    • 改進 powm1 中的錯誤處理,詳見 781
    • 改進求根括弧法,以便在指數非常大或非常小時更快地括弧。
    • 修正求根的邊緣情況,詳見 873
    • 許多雜項警告修正。
    • 在使用需要 C++17 的功能時新增斷言,以便在以較低標準版本呼叫編譯器時提供更好的錯誤訊息。
  • 多索引容器:
    • 序列化現在使用 unsigned long 而不是 collection_size_type,並且 multi_index_container 序列化 類別版本 已從 2 提升到 3 以反映此變更。對於特殊處理 collection_size_type 值的自訂封存類型,讀取舊封存可能會失敗:如果是這種情況,請全局定義巨集 BOOST_MULTI_INDEX_ENABLE_SERIALIZATION_COMPATIBILITY_V2 以確保讀取操作中的回溯相容性。
    • 維護工作。
  • 多精度運算:
    • C++11 支援棄用:現在最低支援 C++14 標準。我們最低測試的編譯器版本現在是 Clang-5、GCC-5 或 MSVC-14.1。
    • 新增新的前向宣告標頭檔。
    • 更新 Eigen 互通性,使我們不再依賴 Eigen 的細節,詳見 479
    • 新增 Cmake 安裝目標。
    • 修正獨立情況下 cpp_dec_float 從字串建構的錯誤處理,詳見 499
    • 在 C++17 模式下移除冗餘定義,詳見 530
    • 修正獨立 itrunc 和 ltrunc 中的錯誤處理。
    • 修正解析八進位字串時可能未初始化的儲存空間。
    • 新增 arm64 和 s390x CI 測試。
    • powm 新增一些遺漏的表達式模板解包程式碼,詳見 506
  • Nowide:
    • 新增接受 (std::)string 實例的 convert_string 多載。
    • 新增 quoted 以將(帶引號的 UTF-8)路徑(std::filesystemboost::filesystem)輸出到串流,詳見 PR#170
  • PFR:
    • 實作了 boost::pfr::is_implicitly_reflectable 以及將聚合專門化為可反射或不可反射的機制,感謝 Denis Mikhailov 的 PR PR#111
    • 以聚合元素的類型實作了 boost::pfr::get
    • 實作了 BOOST_PFR_ENABLED 巨集來檢測程式庫是否支援反射,感謝 Denis Mikhailov 的 PR PR#86
    • 修正了缺少終止字元的錯誤,感謝 Denis Mikhailov 的 PR PR#114
    • 修正了在舊版編譯器上編譯 boost/pfr/config.hpp 的問題,感謝 Denis Mikhailov 的 PR PR#118
    • 針對舊版編譯器中損壞的 C++17 結構化綁定提供了解決方法,感謝 Denis Mikhailov 的 PR PR#119
    • 避免 -Wzero-as-null-pointer-constant 警告,感謝 Markus F.X.J. Oberhumer 的 PR PR#117
    • 修正了多個拼寫錯誤,感謝 Denis Mikhailov 的修正。
    • 加入了遺漏的 #pragma once,感謝 caozhanhao 的 PR PR#121
    • 多項文件修正和改進。
  • 處理程序:
    • 在 V2 中加入了外部處理程序的管理(仍處於實驗階段)
    • 在 V1 中棄用了 wait_forwait_until,它們將在未來移除!
  • Stacktrace:
    • 修正了文件和註釋中的拼寫錯誤,感謝 Chocobo1 的 PR PR#132
    • 如果定義了 BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC,則修正了 backtrace_create_state 的多執行緒標誌檢測。
  • 靜態字串 (StaticString):
    • Boost.Core string_viewstd::string_view 的互通性
  • 測試:
    • 修正了幾個未使用的變數警告
    • 修正了 sprintf 棄用警告
    • 修正了 basic_cstring::rfind 中的未定義行為
    • 透過 Github Actions 加入 CI
  • Unordered:
    • 主要更新。
    • 加入了基於節點、開放定址的容器 boost::unordered_node_mapboost::unordered_node_set
    • 按照 P2363 中的規範,將異質查找擴展到更多成員函數。
    • 將先前用於開放定址容器的後混合處理程序替換為基於常數擴展乘法的新演算法。
    • 修正了內部 emplace 實作中的錯誤,其中堆疊局部類型未正確使用容器的分配器構造,這破壞了 uses-allocator 構造。
  • 網址 (URL):
    • 加入具有自動百分比編碼的 url::format
    • URL 路由器範例
    • set_params 便利函數
    • 支援隱式轉換為 string_view
    • 解析建構函數是隱式的
    • string_token::arg 具有虛擬解構函數和切片保護
    • 支援 BOOST_URL_DISABLE_THREADS
    • 改進與錯誤修正
      • WIN32_LEAN_AND_MEAN 巨集重複定義警告
      • 比較功能可區分缺失和空的組件
      • 使用類似空埠的區段檢測 hier_part_rule
      • 如同正規化的區段比較在根目錄以上也能運作
      • hier-part 無路徑根會考慮無效的區段
      • 當數字埠溢位時,會被設為 0
      • ipv4 轉字串的溢位偵測演算法
  • Variant:
    • 現在使用 core/addressof 取代已棄用的 utility/addressof。感謝 Michael Ford 的 PR PR#105

已更新的工具

已測試的編譯器

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
    • 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 管理此版本。