coost v4.0.0 是一次较大的版本更新:编译器要求提升至 C++17,移除了若干维护成本较高的模块,新增 Windows ARM64 与 FreeBSD 平台支持,并对核心组件进行了性能优化与 API 整理。升级前请先阅读下方的破坏性变更。 1. 破坏性变更 编译器要求 C++17 旧版本中的流式日志写法: LOG << "hello " << 23; 在本版本中被替换为更安全、更直观的函数式写法: log::info("hello ", 23); log::warn("hello ", 23); 该写法依赖 C++17,目前主流编译器对 C++17 的支持已经成熟,因此本版本将最低标准提升到 C++17。 不再支持动态库 动态库的维护成本较高,需要在每个导出符号上加 __coapi,容易遗漏。本版本不再提供动态库支持,有需要的用户可以自行将 coost 封装成动态库。 移除 hook 功能 协程 hook 依赖的 fishhook、detours 在 GitHub 上已多年未更新,且 hook 面临的环境复杂,难以在各平台提供统一且稳定的实现。为降低维护负担,本版本移除了 hook 功能。如有定制化的 hook 需求,作者提供针对特定平台的付费服务。 移除 HTTP、SSL 等网络组件 这些组件依赖 libcurl、openssl 等第三方库,维护成本较高,本版本予以移除。有需要的用户可以从旧版本中获取相关代码自行维护。 移除 fastring、fastream 旧版本中的 fastring、fastream 已合并为 co::string,字符串相关的功能统一收敛到 co/string.h。 移除协程 channel channel 性能较差、代码维护困难,实际使用场景有限,本版本予以移除。 命名空间调整 本版本将大部分功能统一收敛到 co 命名空间中,仅保留以下几个独立命名空间: 模块 命名空间 命令行参数与配置解析 flag 日志组件 log 文件操作 fs 系统操作 os JSON json Path 组件 path 时间相关功能中,仅 time::sleep 保留在 time 命名空间,用于与协程中的 co::sleep 区分;其余时间相关内容全部移入 co 命名空间,例如: co::now.ms(); co::now.str(); co::mono_time.us(); 若要调用 C 标准库中的同名函数,请显式加全局作用域: ::log(...); ::time(0); 2. 新增平台支持 本版本新增对 Windows ARM64 与 FreeBSD 的支持。构建与测试均已在 CI 中覆盖。 由于 FreeBSD 平台上 unix 是一个宏,原 co/time.h 中的以下接口: time::unix.ms(); time::str(); time::mono.us(); 调整为: co::now.ms(); co::now.str(); co::mono_time.us(); 3. 新增与优化 终端输出 终端输出功能迁移到 co/print.h,提供 co::print、co::println 两个函数,并支持颜色: co::color c; co::print(c.red("red\n")); co::println("hello ", c.red, "coost ", c.green, 123, c.deflt); 性能与易用性改进 benchmark:增加预热机制,新增 sub_group 功能; 闭包(co/closure.h):抛弃原先基于继承与虚函数的实现,改为非模板、无虚函数的设计,性能更好,使用更方便; 内置 flag:注释支持中英双语,并根据系统语言环境自动选择; 日志组件:原先的 LOG、ELOG 等宏替换为 log::info()、log::error() 等函数,更安全,也更便于调试; co/rand.h:优化 co::randstr() 的性能与安全性; 同步事件:优化跨线程的 co::sync_event,以及协程与线程混合环境下的 co::event;移除 signal 方法,新增 notify_one、notify_all; 协程同步原语:优化 co::mutex、co::wait_group。 4. Bug 修复 修复 32 位 Windows 下程序崩溃时无法打印堆栈信息的问题; 修复 macOS 下程序崩溃时无法打印堆栈信息的问题(依赖 libbacktrace,需要用户自行安装); 修复 32 位 ARM 系统下,因协程 sp 未按 8 字节对齐导致的 bus error。 5. 迁移指南 旧接口 新接口 LOG << "..." << x; log::info("...", x); ELOG << "..." << x; log::error("...", x); time::unix.ms() co::now.ms() time::str() co::now.str() time::mono.us() co::mono_time.us() fastring / fastream co::string co::Json json::any 协程 channel 已移除 hook 已移除 HTTP / SSL 组件 已移除(可从旧版本取用) 动态库 已移除(用户可自行封装) 6. 结语 本次改动较大,参考文档已落后于最新代码,使用过程中请以实际代码为准。 整体而言,v4.0.0 的代码结构更加简洁,更贴合 coost 一贯的极简风格,使用体验也更加流畅。 为了能够持续维护与改进 coost,作者提供一些付费服务,详见 readme 页面。
coost v4.0.0 发布
来源:开源中国
2026年09月15日 14:01
0 阅读
分享到: