Boost C++ 函式庫

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

版本 1.87.0

版本 1.87.0

2024 年 12 月 12 日 00:52 GMT

文件

下載
平台檔案SHA256 雜湊值
unixboost_1_87_0.tar.bz2af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89
boost_1_87_0.tar.gzf55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d
windowsboost_1_87_0.7zdb6b7d77a2286ebe79d4aa7252c08b051d271fd8b013b6b18bc7a966552c1139
boost_1_87_0.zipf367a218d27b23b568956bacf56d08d2c1d9647211337136be8cac5cb2ff0828
* 下載連結由 C++ 聯盟的贊助支援。

新函式庫

  • Parser 由 Zach Laine 開發的建構剖析器的框架。

更新的函式庫

  • Asio:
    • 新增了支援將位元組範圍和位元組範圍序列作為緩衝區序列使用。這表示它們可以直接傳遞至 I/O 操作,例如 async_read
    • 新增了對泛型處置的支援,泛型處置是指可用於測試非同步操作是否在沒有錯誤的情況下完成的類型。這包括 error_codeexception_ptr,但可以透過特化 disposition_traits 類別樣板來擴展到使用者類型。標準類型 std::error_codestd::exception_ptr 被識別為處置。
    • 新增了對 boost::asio::use_future 完成令牌、基於 boost::asio::awaitable<> 的協同程式、boost::asio::spawn()boost::asio::experimental::cancellation_condition 的處置支援。
    • 新增了 execution_context::service_maker 抽象基底類別。service_maker 是一個物件,它會傳遞到執行內容的建構函式,並允許在內容建構時新增服務。
    • 新增了 boost::asio::config,它提供對與執行內容相關聯的組態參數的存取。該類別適用於 asio 內部,或適用於建立在 asio 之上的函式庫或使用者提供的抽象,通常會用於微調行為,例如啟用或停用某些最佳化。具體的組態來源,例如 boost::asio::config_from_envboost::asio::config_from_concurrency_hintboost::asio::config_from_string,可能會傳遞到 io_contextthread_pool 建構函式。
    • 新增了 Asio 的 io_contextthread_pool 實作所識別的初始組態參數集。
    • 移除了一些先前已棄用的功能。
    • 已棄用 basic_io_objectdeadline_timer
    • 在關聯的繫結器中新增了 rvalue 限定的 operator() 多載。
    • 新增了對模組化建置結構的支援。
    • 修正了傳回僅移動類型之函式的 spawn()
    • 修正了 co_composed,使其不需要概念支援。
    • 修正了 epoll 反應器,使其在分叉後不會嘗試重新註冊一般檔案描述符。
    • 修正了 ssl::detail::engine 移動指派中的記憶體洩漏。
    • 修正了定義 BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING 時的編譯錯誤。
    • 修正了使用 Clang 19 時的編譯錯誤。
    • 變更了 thread_pool::join(),以確保它會停止使用 thread_pool::attach() 後續新增到集區的執行緒。
    • 修正了傳遞到 io_uring_prep_write_fixedio_uring_prep_read_fixed 的偏移量,當它們用於串流導向操作時。
    • 請參閱修訂歷史以取得更多詳細資訊。
  • Atomic:
    • 修正了在記憶體重新配置時原子等待狀態清單的初始化。(#72
  • Beast:
    • API 變更
      • basic_fields::insert() 新增了 error_code 多載。
      • 新增了用於查詢 permessage-deflate 狀態的 websocket::stream::get_status 多載。
    • 修正
      • 修正了在 http::basic_stream 內對 net::dispatch 呼叫中的移動後使用,這會導致在逾時時發生 bad_executor 例外狀況。
      • 移除啟動函式中的變更操作。
      • 修正了 teardown_tcp_op 中的取消處理。
      • 在呼叫 on_finish_impl 之前,在 basic_parser 中設定 state_
      • clamp 函式中移除靜態指定詞。
      • 解決了測試中的 -Wattributes 警告。
      • 解決了測試中無法連線的程式碼警告。
    • 改善
      • beast::http 命名空間中的類型新增了轉寄宣告標頭
      • 啟用 http::parser 以使用具有 error_code 多載的 basic_fields::insert()
      • http::basic_parser 中將 header_limit_ 應用於尾部標頭
      • 改進了 http::basic_parser 以提早傳回 http::error::header_limit
      • 新增了對模組化 boost 建置結構的支援
    • 誌謝
      • Jackarain、Saleh Hatefinya、René Ferdinand Rivera Morell
  • Charconv:
    • 修正了使用 __ibm128 作為 long double 格式的 PPC64LE 架構的支援
    • 修正了 Windows ARM64 平台上的內建函式用法
    • 修正了使用 std::float128_t__float128 時,以指定精確度格式化固定的問題
  • Cobalt:
    • 移除 get_executor 傳回 const ref 的要求
    • 新增了 experimental/composition。
  • Compat:
    • 新增了 to_array.hpp(由 Ruben Perez Hidalgo 貢獻)。
  • Filesystem:
    • 如同在 1.84.0 中宣布的,不再支援 Windows 10 之前的版本。
    • 在 Windows 上,canonical 現在以 GetFinalPathNameByHandleW WinAPI 函式為基礎。副作用是,磁碟機代號會轉換為大寫,這使得產生的路徑更具互通性。(#325
    • v4:如果輸入路徑有尾端目錄分隔符號,canonical 不再在產生的路徑中產生尾端目錄分隔符號。
    • 如果使用可轉換為 path 的使用者定義類型和一或多個 Source 類型的引數呼叫 path 建構函式或成員函式,則預設會選擇轉換為 path。這可能會解決某些情況下的引數轉換不明確問題,但也可能會導致較不理想的轉換路徑。如果需要不同的轉換路徑,建議使用者使用明確的類型轉換。(#326
    • 新增了針對 FreeBSD 9 及更舊版本上將 dirfd 作為巨集的因應措施。(#328
  • Flyweight:
    • 新增了 concurrent_factory,這是基於 Boost.Unordered 中並行容器的工廠,可在多執行緒情境中提供卓越效能。
    • 將先前記錄為不會擲回的 boost::flyweight 操作標示為 noexcept(問題 #15)。
  • Geometry:
    • 改善
      • 在部分程式碼中使用 using 而非 typedef
      • 在部分程式碼中使用別名現代化中繼函式
      • 新增了對模組化建置結構的支援
      • 完整的 CMake 涵蓋範圍(新增了 github actions cmake 測試)
      • 改進文件工作流程
      • 更新 Qt 結尾 WxWidgets 範例
      • 新增列舉以準備 17 和 23
    • 重大變更
      • 移除已棄用的調整大小程式碼
    • 已解決的問題
      • #1309 修正了一些遺失的 qbk 包含
      • #1226 #1326 修正環上的額外回合
      • #1293 #1294 #1295 修正通過非叢集環的周遊
      • #893 #1299 修正非聯集條件的封鎖環
      • #1342 修正捨棄用於與觸碰組合的起始轉彎
      • #1288 #1345 修正處理(不完美)觸碰的問題
      • #1279 修正 covered_by 不正確的結果
      • 各種錯誤和警告的修正
  • Iterator:
    • function_output_iterator 現在符合 std::output_iterator 概念。(#85
  • Interprocess:
  • JSON:
    • 直接序列化。
    • 為 Boost.JSON 型別新增 GDB 美化列印器。
    • 轉換為結構時忽略未知的鍵。
    • value_to 的例外處理行為已簡化。
    • 已移除已棄用的初始化列表行為。
    • 已移除已棄用的型別別名。
    • 在 ARM64 上的 MinGW 使用正確的 64 位元完整乘法。
    • 修正 parse_into 處理錯誤大小的元組。
    • 檢查輸入大小是否大於允許的序列大小。
    • 修正 value_ref 在 GCC 14 上產生區段錯誤。
  • LexicalCast:
    • 已移除對 Boost.Integer 的依賴,從而縮短了編譯時間。
  • Log:
    • 已將 Boost.Thread 的同步原語替換為 C++ 標準程式庫中的對等物。這可能會提高多執行緒效能,但也對使用者造成影響
      • 不再支援 Boost.Thread 的執行緒中斷。Boost.Log 不再對 thread_interrupted 例外情況進行特殊處理,該例外情況由 Boost.Thread 用於實作執行緒中斷。此例外情況將像任何其他例外情況一樣處理。特別是,使用者指定的例外處理常式現在可能會使用 thread_interrupted 待處理例外情況來叫用。
      • 對於計時等待操作,逾時現在使用 std::chrono 時間單位。這表示 bounded_ordering_queueunbounded_ordering_queue 類別支援的 ordering_window 命名參數現在預期 std::chrono::duration 值,而不是 Boost.DateTime 中的 boost::posix_time::time_duration
      • 如果執行緒同步原語指示發生錯誤,則會擲回 std::system_error 例外情況,而不是 Boost.Thread 例外情況類型。
    • 已將 C++ 標準程式庫鎖定類型新增至 strictest_lock
  • Math:
    • 重大更新。
    • 許多特殊函數和分佈現在支援 CUDA (NVCC 和 NVRTC) 和 SYCL
    • 新增 mapairy、holtsmark 和 saspoint5 分佈,請參閱 1163
    • 新增 landau 分佈,請參閱 1159
    • 修正 beta 量子中出現的意外例外情況,請參閱 1169
  • Mp11:
    • 新增 mp_lambda (由 Joaquin M Lopez Munoz 貢獻)
  • Multiprecision:
    • 使 float128 可直接複製
    • 即使在非 GNU 模式下,也將 __float128 作為浮點類型
  • MySQL:
    • 實驗性 API 的重大變更:
      • 已重新設計 connection_pool 中的執行緒安全功能,以克服使用者體驗發現的一些設計缺陷。已將布林選項 thread_safe 新增至 pool_params (預設設定為 false)。設定後,某些集區函數會變更行為,使其可以安全地並行使用。這是透過在內部建立一個執行緒,在需要時將其分派,以及重新連接取消訊號來完成的。當 pool_params::thread_safefalse 時,會套用一般 Asio 執行器語意,而沒有任何額外負擔。
      • 已移除 pool_executor_params,並以 pool_params::connection_executorpool_params::thread_safe 取代。
      • 已完全移除 connection_pool::async_get_connection 中的內建逾時功能。此函數現在支援每個操作的取消,因此可以使用 asio::cancel_after 來達成相同的功能。
      • 現在,如同其他 Asio I/O 物件一樣,銷毀 connection_pool 會取消未完成的非同步操作。這可防止資源洩漏:未完成的 async_run 操作會延長集區的生命週期,直到操作完成,這可能會導致集區物件永遠不會被銷毀。
      • async_get_connection 操作在連線可用之前取消時,該操作現在會持續失敗,並出現 client_errc::pool_not_runningclient_errc::no_connection_availableclient_errc::pool_cancelled,具體取決於集區狀態 (先前,它會因 client_errc::timeout 或集區執行的內部 async_connect 操作所遇到的最後一個錯誤碼而失敗)。此資訊現在已包含在輸出診斷物件中。
      • 已移除 client_errc::timeoutclient_errc::cancelled
      • 在未執行的集區上呼叫 async_get_connection 不再立即失敗,而是會等待呼叫 async_run
      • sequence 現在會返回擁有類型。這使得在延遲的非同步操作中可以安全地與 with_params 一起使用。format_sequence_view 已重新命名為 format_sequence
      • sequence 已移至個別標頭檔 boost/mysql/sequence.hpp
    • any_connection、用戶端 SQL 格式化 (包括 format_sqlwith_params) 以及 connection_pool 已提升為穩定 API。
    • 現在建議新程式碼使用 any_connection,而不是 connection 及其別名 tcp_connectiontcp_ssl_connectionunix_connection
    • 新增 with_params,這是一個新的 ExecutionRequest,其中封裝了查詢範本字串和用於展開查詢的參數。執行時,它會使用用戶端 SQL 格式化來展開查詢,並將其傳送至伺服器以執行。這是執行帶有參數的簡單查詢的新建議方式。
    • 新增 with_diagnostics,這是一個配接器完成 Token,可轉換非同步函數擲回的例外情況,以包含 diagnostics 物件,與同步擲回函數的運作方式相符。
    • with_diagnostics(asio::deferred) 現在是 any_connectionconnection_pool 中所有操作的預設完成 Token。這會導致像 co_await conn.async_connect(params) 這樣的運算式行為與 conn.connect(params) 完全相同。請注意,connection 及其型別別名尚未更新以符合此行為。
    • connection_pool 中的非同步函數現在支援每個操作的取消。
    • 所有非同步操作現在都支援 asio::cancel_afterasio::cancel_at 和類似的完成 Token,這些 Token 需要將繫結的執行器傳遞至 asio::async_initiate 的起始設定。
    • connectionany_connection 現在會透過 Token 的立即執行器分派立即完成。
    • 修正了嘗試使用先前未連線的 any_connection 時導致崩潰的問題。
    • field 中可能擲回例外情況的建構函式中移除不正確的 noexcept 指定詞。
    • 修正了可能導致寫入緩衝區大小超出設定的緩衝區大小限制的問題。
    • 大幅更新了文件和範例,使其更相關並反映新的建議最佳作法。
  • PFR:
    • 新增了 boost::pfr::for_each_field_with_name 函數。非常感謝 LenaPR#171
    • 對於具有大型大小和少量欄位的結構,顯著縮短了編譯時間。非常感謝 Zachary WassallPR#120
    • 修正了 pragma 指示詞。
    • C++20 模組的初始支援。請參閱文件以取得更多資訊。
    • 修正 core_name14_disabled.hpp 中未使用變數的警告。感謝 Anarthal (Rubén Pérez)PR#183PR#187
    • C++17 中聚合欄位計數的預設限制已從 100 提高到 200。
    • 修正了 GCC 不知道 -Wundefined-var-template 的警告。
    • 編譯時間的多項小改進。
  • Process:
    • (v2) 實作了 Windows 上 async_wait 的取消。
    • (v2) 新增 FORCE_DISABLE_CLOSE_RANGE
    • (v2) ext:多個 ext 修正程式,適用於 BSD 和 Solaris。
    • (v2) 無法使用的 ext 函數現在會編譯並產生 operation_not_supported 錯誤 (包括 IOS)
    • (v2) 多個連結修正程式
    • (v2) 從連結的程式庫中移除了檔案系統 - 現在僅影響標頭檔的是使用哪個檔案系統程式庫
    • (v1) 為 1.88 版本新增了棄用通知。
  • SmartPtr:
    • 不再支援 C++03,需要 C++11 編譯器。這包括 GCC 4.8 或更高版本,以及 MSVC 14.0 或更高版本。
    • 由巨集 BOOST_SP_ENABLE_DEBUG_HOOKSBOOST_SP_USE_STD_ALLOCATORBOOST_SP_USE_QUICK_ALLOCATORBOOST_AC_USE_SPINLOCKBOOST_AC_USE_PTHREADSBOOST_SP_USE_SPINLOCKBOOST_SP_USE_PTHREADS 啟用的功能已棄用,並將在未來的版本中移除支援。
  • 堆疊追蹤:
    • 新增了 Boost::stacktrace_from_exception CMake 目標。非常感謝 int mianPR#189
    • 在 MSVC 上進行靜態建置時,不要匯出 boost_stacktrace_impl_return_nullptr。非常感謝 huangqinjinPR#186
    • 修正了在 Windows 作業系統下使用 clang 時,與 ole32.libDbgeng.lib 的自動連結。
    • 修正了文件中遺失的命名空間。感謝 Mats TaraldsvikPR#181
    • 修正了遺失 std::exception 的 include。感謝 Julien SchuellerPR#178
    • 修正了 GCC 回報的型別轉換錯誤。感謝 agent_JPR#175
    • 修正了從 CLI 設定 B2 from_exception 功能的問題。感謝 Dmitry ArkhipovPR#194
  • STLInterfaces:
    • 更正了關於序列容器 swap 的文件錯誤需求;預期的回傳型別是 void,而不是 bool。(#71)
    • [[no_unique_address]] 新增至 view_adaptor.hpp 中适配器的数据成员。(#65)
    • 為支援但未透過 __cpp_explicit_this_parameter 公告支援的 Clang 和 MSVC 近期版本啟用推斷 this。(PR#68)
  • 測試:
    • 修正了使用虛擬條件的 clang tidy 支援 PR#348
    • 修正了與 clang 的動態連結 PR#431
  • Unordered:
    • 重大更新。
    • 新增了並發、基於節點的容器 boost::concurrent_node_mapboost::concurrent_node_set
    • 為並發容器新增了 insert_and_visit(x, f1, f2) 和類似的操作,允許在插入後立即訪問元素(相比之下,insert_or_visit(x, f) 僅在插入沒有發生時才訪問元素)。
    • 使訪問在某些 boost::concurrent_flat_set 操作中受到獨佔鎖定的保護,以允許安全地修改元素 (PR#265)。
    • 在 Visual Studio Natvis 中,支援任何使用花俏指標的分配器容器。這適用於任何花俏指標類型,只要為花俏指標類型編寫了正確的 Natvis 自訂點「Intrinsic」函式即可。
    • 為所有容器和迭代器新增了 GDB 美化列印器。對於使用花俏指標的分配器容器,只有在為花俏指標類型本身編寫了正確的美化列印器時,這些列印器才能運作。
    • 修正了開放定址容器的 std::initializer_list 指派問題 (PR#277)。
    • 允許將不可複製的可呼叫物件傳遞給 std::initializer_listinsert_{and|or}_[c]visit 並發容器多載,方法是在內部將可呼叫物件的 std::reference_wrapper 傳遞給迭代器對多載。
  • URL:
    • feat: set_params 支援 encoding_opts。(#856)
    • refactor: 從 API 中移除已棄用的 variant2 別名。(#857)
    • refactor: query_rule 一致的解譯。(#864)
  • UUID:
    • 恢復了建構 constexpr uuid 的能力,該能力在 1.86 版中被無意中遺失了。

測試的編譯器

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 和 Ion Gaztañaga 管理此版本。