C++ STL 字符串的痛苦陷阱 🧵

主要观点:批评软件容易,但 C++和 C 标准库经住了时间考验,虽不完美,如<string>等头文件代码量大、过时、易出错等。升级StringZilla至 v3 后,大部分 C++20 字符串功能以 C++11 兼容形式实现,还增加了一些其他语言常见的扩展,用sz::stringsz::string_view替代std::stringstd::string_view可实现即插即用替换。

关键信息:

  • <string>等头文件代码量大,减慢编译速度,代码过时、易出错且接口难区分。
  • std::stringreplace函数有 14 种变体,参数顺序和意义不同,结果多样。
  • std::stringsubstr方法边界检查不对称,对第二个参数无检查,编译器也不警告负参数。
  • STL 缺少一些基本实用功能,如懒加载范围的分割、搜索和批量替换等,StringZilla 提供了这些功能。
  • C++内存分配器在大数据应用中有问题,StringZilla 提供了“try”版本的分配函数。
  • STL 的std::string在某些操作上调用 LibC,性能不如 StringZilla,StringZilla 在 substring 搜索等方面比 LibC 和 STL 快很多。

重要细节:

  • 介绍了 Python 对负索引的支持更直观,StringZilla 中可使用负索引并得到预期结果。
  • 详细说明了 StringZilla 中各种分割、搜索、批量替换等功能的实现和用法。
  • 给出了性能测试数据,表明 StringZilla 在 substring 搜索等方面的性能优势。
  • 提到 StringZilla 有很多“工作中”的功能,如 Levenshtein 编辑距离等,成熟后可能成为新的标准库基线实现。
  • 本周 StringZilla 有新吉祥物和改进的 Rust 支持,且谷歌转向 Arm 处理器,StringZilla 在搜索方面性能提升。
阅读 19
0 条评论