C++ 基础库 CO 1.1 发布

栏目: 软件资讯 · 发布时间: 4年前

内容简介:C++ 基础库 co 1.1 发布。CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。 CO 追求极简、高效,不依赖于 boost 等三方库,仅使用了少量 C++11 特性。 github Changes 代码结构调整 头文件放...

C++ 基础库 co 1.1 发布。CO 是一个优雅、高效的 C++ 基础库,支持 Linux, Windows 与 Mac 平台。

CO 追求极简、高效,不依赖于 boost 等三方库,仅使用了少量 C++11 特性。

github

Changes

代码结构调整

  • 头文件放到 include 目录.
  • 源文件放到 src 目录.
  • rpcgen 更名为 gen.
  • 移除 unitest/base 目录,单元测试代码直接放到 unitest 目录下.
  • test 目录下支持子目录.

fast

  • fast.cc 中静态变量的定义放到函数中,初始化更安全.
  • fast::dtoa 弃用基于 LruMap 的实现,换用 Milo Yip 的实现(miloyip/dtoa-benchmark).
  • 新增 fast::stream 类,提供基本的流式输出操作.

fastream

  • 继承于 fast::stream 类.
  • 支持 move 构造函数.
  • 增加空状态.
    fastream fs; // 定义一个空的 fastream 对象,不分配内存
  • 支持 append 自己.
    fastream fs;
    fs << "hello " << 23;
    fs.append(fs);
    fs << fs;     // <==> fs.append(fs)

fastring

  • 与 fastream 一样,继承于 fast::stream 类,因此也支持流式输出操作.
    fastring s;
    s << "hello " << 23;
  • fastring 与 fastream 的内存结构相同,二者可以无缝转换.
    fastring s;
    fastream& fs = *(fastream*)&s
  • 移除引用计数,使 fastring 的复制行为与 std::string 类似,使用起来不容易出错.
    fastring s("hello");
    fastring t(s);  // 通过内存拷贝创建一个新的字符串
  • append 操作增加 inside 检查,修复内存重叠时的逻辑漏洞.
    fastring s("123");
    s.append(s.c_str() + 1); // s -> "12323"
  • 删除 clone() 方法,移除引用计数后,此方法多余.

str

  • str::dbg() 支持 std::unordered_map 与 std::unordered_set.

flag

  • 优化命令行参数与配置文件的解析顺序,先解析配置文件,再解析其他命令行参数.
    # 先解析配置文件 xx.conf,再解析其他命令行参数
    # 命令行中 x, s 的值会覆盖 xx.conf 中的值,方便调试
    ./xx -x -s="hello" -config=xx.conf
  • Linux 平台增加内置 bool flag daemon,以支持后台运行程序
    # 可在命令行参数中带上 -daemon
    # 也可在配置文件中设置: daemon = true
    ./xx -daemon
  • 命令行参数支持多种格式,-x=y 可以写成 -x y 或者 x=y
    ./xx -i=8 u=88 -s="hello world"
    ./xx -i 8 -u 88 -s "hello world"
  • 优化程序启动时指定配置文件的方式.
    ./xx config=xx.conf  # 用 flag config 显示指定
    ./xx xx.conf         # 配置文件名以 .conf 或 config 结尾,且是程序命令行的第一个非 flag 参数,则可省略 config=
    ./xx -x xx.conf      # -x 是 flag,xx.conf 是第一个非 flag 参数
  • 定义 flag 时,可以在注释中指定级别,以控制 flag 在配置文件中的顺序.
    // 在注释开头用 #3 指定级别为 3
    // 支持的级别为 0-99,默认为 10
    // 使用 --mkconf 自动生成配置文件时,flag 按级别、文件名、代码行数排序
    DEF_bool(b, false, "#3 xxx");

log

  • signal handler 中部分函数修改为 async-signal-safe 版本的函数,更安全.

协程库

  • 修复未及时移除 epoll(kevent, iocp) 中注册的 io 事件引起的 bug.
  • 修复 Scheduler 在 add_timer() 时,内部 iterator 未正确更新的 bug.
  • 改进 co::connectco::accept 等的实现,以支持 ipv6.
  • 新增 co::max_sched_num() 接口,获取支持的最大调度线程数,目前为系统 cpu 核数.
  • 新增 co::sched_id() 接口,获取当前的调度线程 id.
  • 新增 coroutine_id() 接口,获取当前协程的 id.
  • 重构 Scheduler,内部逻辑结构更清晰,同时提高代码的可读性.
  • 修改 co::tcp_socket()co::udp_socket() 接口的参数为 address family,弃用早期用 4 与 6 指定 ipv4 与 ipv6 的方式.
    sock_t tcp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc.
    sock_t udp_socket(int af=AF_INET); // @af: address family, AF_INET, AF_INET6, etc.
  • 新增 co::socket() 接口,与原生 api 保持一致.
  • 修复 hook 实现中一些静态全局变量的初始化问题.
  • 优化 co::Event 的内部实现.
  • 重构 co::Pool:
    • 用户可以指定 callback ccb 与 dcb,分别用于创建、销毁元素.
    • 用户可以指定 pool 的最大容量(仅在 dcb 设置时有效).
    • 内部实现中向 Scheduler 注册 cleanup callback,保证在调度线程结束时进行 co::Pool 的清理工作.
  • co::Kakalot 重命名为 co::PoolGuard.

json

  • 内部引用计数,使用原子操作,复制 Json 对象更安全.
  • 重构 Json 内部的内存模型,修复之前因内部内存变化引起的 bug.
  • 内部增加简单的内存分配器 Jalloc,提升 Json 的性能.
  • json::parse() 支持数组对象的解析.
    Json v = json::parse("[1, 2, 3]");
  • 新增 Json::dbg() 接口,将 Json 对象转换为 debug string (Json 对象中较长的字符串可能被截断).
  • log 库调用 Json::dbg() 输出 Json 对象,使得输出的日志更精简.

rpc

  • 简化,移除一些不必要的配置项.
  • 优化连接管理,可以通过 rpc_conn_idle_sec 与 rpc_max_idle_conn 指定空闲连接的超时时间、最大的空闲连接数.

hash

  • 修改 hash32() 的实现,32 位系统使用 murmur 2 的 32 位版本,64 位系统直接取 hash64 的低 32 位.

编译

  • 移除 scons 编译脚本.
  • 支持 xmake 编译.
  • 支持 cmake 编译 (由 izhengfan 贡献).
  • windows 支持用 vs 工程文件编译 (由 xmake 自动生成).

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro CSS and HTML Design Patterns

Pro CSS and HTML Design Patterns

Michael Bowers / Apress / April 23, 2007 / $44.99

Design patterns have been used with great success in software programming. They improve productivity, creativity, and efficiency in web design and development, and they reduce code bloat and complexit......一起来看看 《Pro CSS and HTML Design Patterns》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具