The Best C++ Library · mcyoung

主要观点:作者对 C++标准库不满,认为其存在诸多问题,于是尝试用 C++的特性构建一个全新的库“best”,介绍了“best”库的各个部分,包括基础类型、代数数据类型容器、内存和指针、迭代器、堆容器、文本处理、格式化、反射以及单元测试和应用等,并阐述了未来的计划。
关键信息:

  • “best”库抛弃了 C++的<type_traits>,将类型特征分类到不同的头文件中。
  • 构建了基本的代数数据类型,如“best::row”和“best::choice”,替代了std::tuplestd::variant
  • 提供了新的迭代范式,类似于 Rust 的Iterator
  • 实现了多种堆容器,如best::vecbest::table等。
  • 字符串处理类似 Rust,提供了多种文本编码。
  • 有 Rust 风格的格式化库best::format
  • 包含基本的反射功能。
  • 有单元测试框架和 CLI 解析库。
    重要细节:
  • std::unordered_map必须是封闭寻址的链表数组映射,std::map必须是红黑树。
  • std::optional使用起来很麻烦,std::variant也很烦人。
  • std::filesystem有很多尖锐的边缘问题,标准算法因为处理迭代器对而非常冗长。
  • best::ptr<T>是通用的指针类型,提供了许多与 Rust 原始指针类似的操作。
  • best::iter提供了各种助手函数,用于适配迭代器或消费迭代器中的项。
  • best::vec可以自定义分配器类型和小向量优化类型。
  • best::table是通用的哈希表实现。
  • best::text系列类型用于文本处理,支持多种编码。
  • best::format通过编译器扩展在编译时检查格式。
  • best::reflect提供了基本的反射功能,通过BestReflect FTADLE 来 introspect 结构体和枚举的成员。
  • 单元测试框架通过定义特殊的全局变量来实现,CLI 解析库通过 reflectable 结构体来定义 CLI 标志。
阅读 163
0 条评论