从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。
每周更新
周刊项目地址 github,在线地址 | discord讨论群组 |飞书讨论群组|知乎专栏 |
---|
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
介绍small_vector, small_vector有很多实现,算是一个小对象优化
#include <cassert>
consteval int f(int i) { return i; }
constexpr int g(int i) {
if consteval {
return f(i) + 1; // ok: immediate function context
} else {
return 42;
}
}
consteval int h(int i) {
return f(i) + 1; // ok: immediate function context
}
static_assert(42 + 1 == h(42));
int main() {
int i = 42;
//h(i); // error: the value of 'i' is not usable in a constant expression
assert(42 == g(i));
}
https://godbolt.org/z/rjeodeMoP
用concept来实现CRTP模式,遇到了很多阻碍,如果有Unified Function Call Syntax , UFCS说不定能解决,当前不推荐,可以当做一个拓展眼界的思路看一看
总结整理写的挺好
io_uring
大致可以分为默认、IOPOLL
、SQPOLL
、IOPOLL + SQPOLL
四种模式。可以根据操作是否需要轮询选择开启 IOPOLL
。如果需要更高实时性、减少 syscall 开销,可以考虑开启 SQPOLL
。io_uring
相比于用户态直接调用 syscall,通常不会有特别大的性能提升。io_uring
内部通过 io-wq 执行 Buffered I/O 操作,和直接在用户态调用 syscall 在本质上没有太大区别,只能减小用户态内核态切换的开销。io_uring
提交任务要走一遍 io_uring_enter
syscall,延迟和吞吐量应该比不上 mmap 之类的文件 I/O 操作方法。IOSQE_ASYNC
flag,强制走 io-wq。IO_SQE_LINK
, IOSQE_IO_DRAIN
和 IOSQE_IO_HARDLINK
可以控制任务的依赖关系。TODO 不懂LLVM IR,后面了解一下
介绍一个快的循环队列,其实技巧就是mmap + bip buffer类似的技术 代码在这里
介绍brpc的小组件,brpc的小技巧很多,文档也很详细,值得一看
用原子量自旋来实现的mutex,代码在这里
TODO: 阅读 Futexes Are Tricky
介绍了模版参数的一些场景
介绍duckdb数据结构设计的,有点意思
leveldb写路径代码走读
#include "matchit/core.h"
#include "matchit/patterns.h"
#include "matchit/expression.h"
using namespace matchit;
constexpr int32_t factorial(int32_t n)
{
assert(n >= 0);
return match(n)(
pattern(0) = expr(1),
pattern(_) = [n] { return n * factorial(n - 1); }
);
}
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!
This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/017.md).