Skip to content

feat(pkg): compat.boost-beast 1.92.0 + modular-boost 第二列车(25 个新包) - #345

Open
wellwei wants to merge 3 commits into
mcpplibs:mainfrom
wellwei:feat/boost-beast
Open

feat(pkg): compat.boost-beast 1.92.0 + modular-boost 第二列车(25 个新包)#345
wellwei wants to merge 3 commits into
mcpplibs:mainfrom
wellwei:feat/boost-beast

Conversation

@wellwei

@wellwei wellwei commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

概要

收录 Boost.Beast 1.92.0(HTTP/WebSocket),沿 #244 的 modular-boost 拆包路线(vcpkg 同构:每个 boostorg/ 从自己的 boost-1.92.0 tag 打独立小包,不引 ~224 MiB 单体)。Beast 的传递闭包远大于 uuid,本 PR 一次性补齐 25 个新描述符:

boost-beast(19 个直接依赖)、boost-asioboost-alignboost-bindboost-compatboost-containerboost-container-hashboost-coreboost-describeboost-endianboost-intrusiveboost-ioboost-logicboost-moveboost-mp11boost-optionalboost-predefboost-preprocessorboost-smart-ptrboost-static-stringboost-systemboost-type-indexboost-utilityboost-variant2boost-winapi

为什么必须打包 boost.asio(而非复用 chriskohlhoff.asio)

Beast 1.92 上游已移除 BEAST_USE_STANDALONE_ASIO:beast/core/error.hpp 无条件把 beast::error_code 别名为 boost::system::error_code,全树 grep 无 "STANDALONE" 字样。独立 Asio 路线在 1.92 训练上不存在。

形态与闭包(机械可复核)

  • Form B header-only + 锚点 TU,include_dirs = { "*/include" },传统 #include 消费,language=c++20,BSL-1.0
  • 闭包 = 对每个参与仓 include 树全量 grep(#include# include 两种拼写)∩ 各仓 CMakeLists INTERFACE 行;beast 的 19 个依赖两法完全一致;beast type_index 仅以单文件头进入(纯目录 grep 会漏)
  • 29 棵 include 树(25 新 + 4 既有 + beast,2608 文件)两两不相交,*/include 联合成一棵 boost/ 无碰撞
  • 单文件 shim 归属逐一核实:boost/cerrno.hpp→system、boost/get_pointer.hpp/type.hpp/noncopyable.hpp 等→core、boost/none.hpp→optional、boost/detail/{call_traits,compressed_pair}.hpp→utility

feature(本 PR 唯一的 feature 用法)

boost.asio 对 boost.context(spawn)与 boost.date_time(deadline_timer)是编译器版本级自动探测;而 Boost.Context 是编译期(含汇编)库,放任探测会破坏家族 header-only 性质。经 default feature 携带上游认可的关闭开关(先例:chriskohlhoff.asio、compat.curl):

  • BOOST_ASIO_DISABLE_BOOST_CONTEXT_FIBER
  • BOOST_ASIO_DISABLE_BOOST_DATE_TIME

compat.boost-asiocompat.boost-beast 各自的 default feature 声明同值宏(幂等),保证直接消费者与经 beast 链路的消费 TU 配置一致。Beast 不用 spawn/deadline_timer,无能力损失;负向验证 = 闭包树中不存在 boost/contextboost/date_time 头文件(机械核验)。

镜像

按家族先例暂不建 CN 镜像:纯字符串 url = "<GLOBAL>"(lint 允许,CN 回退上游,由维护者后续补 gitcode)。25 个 tarball 均无符号链接(Windows 可直接解包,与独立 asio 不同),sha256 各计算两次稳定,既有四包钉定哈希与本次上游下载逐一相符。

验证

  • 新增成员 tests/examples/boost-beast(#include <boost/beast.hpp> 聚合面 + HTTP 解析/序列化回路/错误路径/自带 zlib 往返/multi_buffer/static_string,全部离线断言)与 tests/examples/boost-asio(直接消费者路径:feature 宏传播 + 真实 io_context 定时器/co_spawn/tcp endpoint)
  • 本地 mcpp 2026.8.27.2(与 CI pin 一致)冷状态:mcpp test -p boost-asiomcpp test -p boost-beasttest result ok;既有 boost-uuid 成员回归通过
  • 本地 lint 全绿:lua 语法/必填字段/裸版本/name 单段/mirror 表/check_cross_package_refs/check_platform_version_parity/check_duplicate_versions/mcpp xpkg parse(30 个 boost 描述符)

设计文档:.agents/docs/2026-09-05-add-boost-beast-plan.md

收录 Boost.Beast(HTTP/WebSocket)。Beast 1.92 上游已移除
BEAST_USE_STANDALONE_ASIO(error.hpp 无条件别名 boost::system::error_code),
无法复用独立 chriskohlhoff.asio,故沿 mcpplibs#244 的 modular-boost 拆包路线
(vcpkg 同构,每个 boostorg/<lib> 从自己的 boost-1.92.0 tag 打小包)
一次性补齐全传递闭包,共 25 个新描述符:

  boost-beast(19 直接依赖), boost-asio, boost-align, boost-bind,
  boost-compat, boost-container, boost-container-hash, boost-core,
  boost-describe, boost-endian, boost-intrusive, boost-io, boost-logic,
  boost-move, boost-mp11, boost-optional, boost-predef, boost-preprocessor,
  boost-smart-ptr, boost-static-string, boost-system, boost-type-index,
  boost-utility, boost-variant2, boost-winapi

- 闭包逐 include grep(两种 #include 拼写)并与各仓 CMakeLists INTERFACE
  行交叉核对;beast 的 19 个依赖与上游 CMakeLists 完全一致
- 29 棵 include 树(2608 文件)两两不相交,*/include 联合无碰撞
- 单文件 shim 归属逐一核实(type_index 走 <boost/type_index.hpp> 单文件头;
  cerrno 归 system;get_pointer/type/noncopyable 等归 core;none 归 optional)
- boost-asio 经 default feature 携带 BOOST_ASIO_DISABLE_BOOST_CONTEXT_FIBER
  与 BOOST_ASIO_DISABLE_BOOST_DATE_TIME(与 chriskohlhoff.asio 同思路):
  关掉 boost.context(编译期汇编库)与 boost.date_time,保住家族 header-only;
  boost-beast 的 default feature 原样重述两个宏,保证消费 TU 配置一致
- 全部 25 个 tarball 无符号链接(Windows 可直接解包);sha256 双算稳定;
  暂不建 CN 镜像(纯字符串 GLOBAL url,家族先例)
- 测试成员 boost-beast:HTTP 解析/序列化回路/错误路径/自带 zlib 往返/
  multi_buffer+static_string;boost-asio:feature 宏传播 + 真实 io_context
  定时器/co_spawn 往返;既有 boost-uuid 成员回归通过
- mcpp 2026.8.27.2 本地冷验证通过;lint 全套(lua 语法/必填字段/裸版本/
  name 单段/镜像表/跨包引用/平台版本对齐/重复版本/xpkg parse)全绿

设计文档:.agents/docs/2026-09-05-add-boost-beast-plan.md
…ll_thread

workspace 的 llvm-on-Windows 工具链(clang → x86_64-pc-windows-msvc)不定义
_MT/_REENTRANT,boost::config 也给不出 BOOST_HAS_THREADS,asio 的探测
(detail/config.hpp)静默选中 null_thread,boost-asio 成员在 windows CI 上
运行即 crash(exit 0xC0000409)。与 chriskohlhoff.asio 钉 ASIO_HAS_THREADS
完全同构;该宏还参与 BOOST_ASIO_VERSION_TAG,跨 TU 必须一致,故作为
default feature 的 define 传播,boost-beast 侧同步重述。

linux/macos/windows 三平台语义一致,macOS 本地冷验证两成员仍通过。
Comment thread CHANGELOG.md
新增 tests/examples/boost-family/:消费 modular-boost 家族所有没有专属
成员的小包(align/bind/compat/container/container-hash/core/describe/
endian/intrusive/io/logic/move/mp11/optional/predef/preprocessor/
smart-ptr/static-string/system/type-index/utility/variant2/winapi),
按主题分 6 个 tests/*.cpp,每个组件都有可失败的行为断言:

  core-smart      core(addressof/empty_value/ref) + smart-ptr + move
  containers      container(vector) + intrusive(list) + optional + static-string
  meta            mp11 + describe + preprocessor + type-index + predef
  system-errors   system(error_code/system_error) + compat(invoke) + bind
  bytes-logic     endian + container-hash + logic(tribool) + align
  io-platform     io(ios_flags_saver) + utility(compressed_pair) + winapi

实测踩坑固化进注释:tribool 连 operator! 都返回 tribool(取 bool 走
explicit 转换/indeterminate());boost/winapi 头非 Windows 平台 #error
(include 与断言均在 _WIN32 门控内,由 windows CI 腿真实覆盖);
intrusive::list 析构前必须 clear(带链析构触发调试断言)。

mcpp 2026.8.27.2 本地冷验证:6/6 test result ok。
@wellwei
wellwei requested a review from Sunrisepeak September 4, 2026 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants