找回密码
 立即注册
搜索
查看: 65|回复: 5

coost v4.0.0 发布

[复制链接]

主题

0

回帖

0

积分

积分
0
发表于 前天 10:30 | 显示全部楼层 |阅读模式
coost v4.0.0 是一次较大的版本更新:编译器要求提升至 C++17,移除了若干维护成本较高的模块,新增 Windows ARM64 与 FreeBSD 平台支持,并对核心组件进行了性能优化与 API 整理。升级前请先阅读下方的破坏性变更。
1. 破坏性变更
编译器要求 C++17


旧版本中的流式日志写法:



  1. LOG << "hello " << 23;
复制代码


在本版本中被替换为更安全、更直观的函数式写法:



  1. log::info("hello ", 23);
  2. 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 命名空间,例如:



  1. co::now.ms();
  2. co::now.str();
  3. co::mono_time.us();
复制代码


若要调用 C 标准库中的同名函数,请显式加全局作用域:



  1. ::log(...);
  2. ::time(0);
复制代码
2. 新增平台支持

本版本新增对 Windows ARM64FreeBSD 的支持。构建与测试均已在 CI 中覆盖。

由于 FreeBSD 平台上 unix 是一个宏,原 co/time.h 中的以下接口:

  1. time::unix.ms();
  2. time::str();
  3. time::mono.us();
复制代码


调整为:



  1. co::now.ms();
  2. co::now.str();
  3. co::mono_time.us();
复制代码
3. 新增与优化
终端输出

终端输出功能迁移到 co/print.h,提供 co::print、co::println 两个函数,并支持颜色:

  1. co::color c;
  2. co::print(c.red("red\n"));
  3. 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 页面

原文链接

打赏作者

当前余额:0 Token,打赏后立即到账

主题

0

回帖

0

积分

积分
0
发表于 前天 10:45 | 显示全部楼层
好帖,先顶后看,慢慢消化。

主题

0

回帖

0

积分

积分
0
发表于 前天 11:15 | 显示全部楼层
学到了,v4.0.0这块之前一直似懂非懂,看完这篇清晰多了。

主题

0

回帖

0

积分

积分
0
发表于 前天 11:45 | 显示全部楼层
潜水很久了,v4.0.0这个话题必须冒个泡。

主题

0

回帖

0

积分

积分
0
发表于 前天 12:15 | 显示全部楼层
写得不错,v4.0.0那部分说到点子上了,顶一个。

主题

0

回帖

0

积分

积分
0
发表于 前天 12:45 | 显示全部楼层
有需要的用户可以从旧版本中获取相关代码自行维护。
这段深有同感,coost确实是这样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

{ template common/footer}