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
The Second Edition is Done
隔壁公众号汇总了本英文书,感兴趣的可以过去看看,这里友情推荐了
文章
全新的构造函数,C 中的 relocate 构造函数 https://zhuanlan.zhihu.com/p/679782886
其实这个概念之前讨论了很久,老熟人Arthur O’Dwyer 提了很多相关的提案 patch。大家感兴趣的可以读一下。算是一个优化的点
之前也提到过,比如
- • Polymorphic types aren’t trivially relocatable https://quuxplusone.github.io/blog/2023/06/24/polymorphic-types-arent-trivially-relocatable/
- • STL algorithms for trivial relocation https://quuxplusone.github.io/blog/2023/03/03/relocate-algorithm-design/
讲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/
等等,周边信息很多
why gcc and clang sometimes emit an extra mov instruction for std::clamp on x86 https://1f6042.blogspot.com/2024/01/stdclamp-still-generates-less-efficient.html
直接贴代码 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
Fuzzing an API with libfuzzer https://playfulprogramming.blogspot.com/2024/01/fuzzing-api-with-libfuzzer.html
举一个fuzz例子,大家都学一下
你看这个接口感觉可能无从下手
我们要测试的接口长这样
考虑一下测试代码
可能长这样
现在咱们考虑怎么把这个测试代码改写成fuzz test?
简单来说输入的就是一段二进制,怎么根据这个二进制拆解出不同的动作,拆解出不同的输入?
编译带上-fsanitize=address,undefined,fuzzer --coverage
能抓到错误,抓到错误调试就是另一个流程了,gdb挂上去调就行了。眼神好也能看出来
C 实现 shared_ptr / weak_ptr /enable_shared_from_this https://zhuanlan.zhihu.com/p/680068428
学吧,学无止境
主要是控制块的管理
C Lifetime Profile Static Analyzer https://zhuanlan.zhihu.com/p/678944217
这个哥们把一个工具优化到能用的水平,并介绍了相关设计
这个精力投入令人佩服,代码在这里 https://github.com/qqiangwu/cppsafe
感兴趣的可以体验一下
Linux kernel中有哪些奇技淫巧 https://www.zhihu.com/question/471637144/answer/3377224126
介绍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
分享一个asio下使用channel来实现无需队列的安全的连续async_write的方法 https://zhuanlan.zhihu.com/p/679175397
不明觉厉
Detecting multiple instantiations https://www.think-cell.com/en/career/devblog/detecting-multiple-instantiations
利用statufull template来检查,算了吧,不看了
GDB反向调试:让程序逆序执行,代码调试原来这么简单!体验时光旅行的快感!https://zhuanlan.zhihu.com/p/673279895
其实就是record录制
视频
C Weekly - Ep 412 - Possible Uses of C 23's [[assume]] Attribute https://www.youtube.com/watch?v=Frl8XKhvA4Q&ab_channel=C++WeeklyWithJasonTurner
可能的一种用法
感觉不如builtin_expect,暂时别用
Data Storage in Entity Component Systems - Mathieu Ropert - Meeting C 2023 https://www.youtube.com/watch?v=b9hNKFj5R3Y&ab_channel=MeetingCpp
讲ecs框架和entt的
讲entt的视频,最近我看到一个不错的 b站 BV1X841127Rq
Regular, revisited - Victor Ciura - Meeting C 2023 https://www.youtube.com/watch?v=9ilirLg9TzM&ab_channel=MeetingCpp
讲value的。听困了
开源项目介绍
- • asteria https://github.com/lhmouse/asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线
- • Unilang https://github.com/linuxdeepin/unilang deepin的一个通用编程语言,点子有点意思,也缺人,感兴趣的可以github讨论区或者deepin论坛看一看。这里也挂着长期推荐了
- • https://github.com/kamchatka-volcano/figcone 一个反射库,处理配置文件的
- • https://github.com/HenryAWE/PapilioCharontis 之前群里说过的带逻辑控制的format,现在基本功能搞定了,欢迎试用体验
热门库最近更新了什么
- • boost 新的scope库被合入 https://lists.boost.org/Archives/boost/2024/01/255717.php
- • seastar 最近改动较少
主要是代码规范化 比如 https://github.com/scylladb/seastar/pull/2054
另外就是修复bug,延长请求,请求没结束不释放handler https://github.com/scylladb/seastar/pull/2044/
- • folly
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>>
局部性要好
感兴趣大家可以以及看一看
- • brpc
改动非常多,一月改动如下
- • 支持内存内置服务,web可查 tcmalloc https://github.com/apache/brpc/pull/2505)
- • fuzz测试,上面讲过的fuzz不会写,可以学学这个 https://github.com/apache/brpc/pull/2420
- • gdb脚本修复libc 符号问题,以及lldb脚本 https://github.com/apache/brpc/pull/2516/ https://github.com/apache/brpc/pull/2514
- • 一个mpsc队列实现 https://github.com/apache/brpc/pull/2492
- • 支持 c 20 coroutine 不过暂时没人用 https://github.com/apache/brpc/pull/2121
- • 使用tcmalloc的 GetStackTrace 比backtrace 省点计算 https://github.com/apache/brpc/pull/2488
- • 修 LoadBalancerWithNaming 内存泄漏 https://github.com/apache/brpc/pull/2503
- • 给bthread 加tag分组调度 https://github.com/apache/brpc/pull/2476
还是有很多可以学习的地方都
另外rocksdb我也会更新,这个更新的内容不会放在这里,会单独发
也会放在 https://wanghenshui.github.io/rocksdb-doc-cn 里