
RSS https://github.com/wanghenshui/cppweeklynews/releases.atom
欢迎投稿,推荐或自荐文章/软件/资源/批评互动等等
请后台留言
本期文章由 不语 沧海 彩虹蛇皮虾 赞助
jetbrain发布了23年 c++ 生态回顾 https://blog.jetbrains.com/clion/2024/01/the-cpp-ecosystem-in-2023/
感兴趣的可以看看,没啥意思
标准委员会动态/ide/编译器信息放在这里
一月邮件
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-01
隔壁公众号汇总了本英文书,感兴趣的可以过去看看,这里友情推荐了
其实这个概念之前讨论了很久,老熟人Arthur O’Dwyer 提了很多相关的提案 patch。大家感兴趣的可以读一下。算是一个优化的点
之前也提到过,比如
讲trivial relocation的现状以及开源实现
T.r. types | Non-t.r. types | Throwing-move types | Rightward motion (`insert`) | Leftward motion (`erase`) | Non-pointer iterators | ||
|---|---|---|---|---|---|---|---|
STL Classic (non-relocating) | std::copy | N/A | N/A | ✓ | UB | ✓ | ✓ |
std::copy_n | N/A | N/A | ✓ | UB | UB | ✓ | |
std::copy_backward | N/A | N/A | ✓ | ✓ | UB | ✓ | |
cstring | memcpy | ✓ | UB | ✓ | UB | UB | SFINAE |
memmove | ✓ | UB | ✓ | ✓ | ✓ | SFINAE | |
Qt | q_uninitialized_relocate_n | ✓ | ✓ | ✓? | UB | UB | SFINAE |
q_relocate_overlap_n | ✓ | ✓ | ✓ | ✓ | ✓ | SFINAE | |
BSL | destructiveMove | ✓ | ✓ | ✓ | UB | UB | SFINAE |
P2786R0 | trivially_relocate | ✓ | SFINAE | SFINAE | ✓ | ✓ | SFINAE |
relocate | ✓ | ✓ | SFINAE | ✓ | ✓ | SFINAE | |
move_and_destroy | ✓ | ✓ | SFINAE | UB | ? | ✓ | |
P1144R6 | uninitialized_relocate | ✓ | ✓ | ✓ | UB | ✓ | ✓ |
uninitialized_relocate_n | ✓ | ✓ | ✓ | UB | ✓ | ✓ | |
P1144R7 | uninitialized_relocate_backward | ✓ | ✓ | ✓ | ✓ | UB | ✓ |
还给人folly提MR https://github.com/facebook/folly/pull/1934
std::relocate’s implementation is cute https://quuxplusone.github.io/blog/2022/05/18/std-relocate/等等,周边信息很多
直接贴代码 https://godbolt.org/z/rq9dsGxh5

对应的汇编

为什么正确的代码多了一条 mov xmm?
浮点数 +-0的问题,标准要求返回第一个参数,比如 std::clamp(-0.0f, +0.0f, +0.0f)
如果配置了-ffinite-math-only -fno-signed-zeros 最终汇编是一样的 https://godbolt.org/z/esMY18a5z
举一个fuzz例子,大家都学一下
你看这个接口感觉可能无从下手

我们要测试的接口长这样

考虑一下测试代码
可能长这样

现在咱们考虑怎么把这个测试代码改写成fuzz test?
简单来说输入的就是一段二进制,怎么根据这个二进制拆解出不同的动作,拆解出不同的输入?

编译带上-fsanitize=address,undefined,fuzzer --coverage
能抓到错误,抓到错误调试就是另一个流程了,gdb挂上去调就行了。眼神好也能看出来
学吧,学无止境
主要是控制块的管理
这个哥们把一个工具优化到能用的水平,并介绍了相关设计
这个精力投入令人佩服,代码在这里 https://github.com/qqiangwu/cppsafe
感兴趣的可以体验一下
介绍static key的
130期咱们提到过 Bounded dynamicism with cross-modifying code https://pvk.ca/Blog/2021/12/19/bounded-dynamicism-with-cross-modifying-code/
也是类似的玩意,也有现成的库提供,https://github.com/backtrace-labs/dynamic_flag
不明觉厉
利用statufull template来检查,算了吧,不看了
其实就是record录制
可能的一种用法

感觉不如builtin_expect,暂时别用
讲ecs框架和entt的
讲entt的视频,最近我看到一个不错的 b站 BV1X841127Rq
讲value的。听困了
主要是代码规范化 比如 https://github.com/scylladb/seastar/pull/2054

另外就是修复bug,延长请求,请求没结束不释放handler https://github.com/scylladb/seastar/pull/2044/
folly类似seastar 把版本切17之后做了很多的适配和bugfix
比较好玩的是folly::tape 类似vector<vector> 但性能更好,常见场景就是 vector<vector<char>>
https://github.com/facebook/folly/pull/2109/
在使用场景上做了取舍
实现思路就是拍扁,一维,比如tape<vector<char>> 就是vector<char>, 记录所有元素的index和offset
没有SSO优化的话,这种形态比vector<vector<char>>局部性要好
感兴趣大家可以以及看一看
改动非常多,一月改动如下
还是有很多可以学习的地方都
另外rocksdb我也会更新,这个更新的内容不会放在这里,会单独发
也会放在 https://wanghenshui.github.io/rocksdb-doc-cn 里