C++ 中文周刊 第107期

2023-04-01 12:49:29 浏览数 (1)

C 中文周刊 第107期

周刊项目地址


资讯

标准委员会动态/ide/编译器信息放在这里

编译器信息最新动态推荐关注hellogcc公众号 本周没更

CLion 2023.1 出了,QT Creater10也出了

文章

  • Using shared_ptr for reloadable config

不是啥新鲜点子啊,用shared_ptr atomic_load/atomic_store 来做版本管理。代码在这里 https://github.com/f-squirrel/shared_config

不过atomic_load加载shared_ptr已经被废弃了,不建议使用

  • 每(几)天学一点 C Execution(五)

空大讲execution的文章,感兴趣的可以看看,前几期列一下

每(几)天学一点 C Execution(一) 每(几)天学一点C Execution(二) 每(几)天学一点 C Execution(三) 每(几)天学一点 C Execution(四

  • C 20: consteval and constexpr functions

主要是他的fast_float库用上了这个特性,显摆一下,编译期的场景能加加速

  • Adding a new target/object backend to LLVM JITLink

llvm的,不是很懂

  • 纯C 实现QT信号槽:参数裁剪
  • 纯C 实现QT信号槽原理剖析

值得鼓励

  • Configuring algorithms in Modern C

直接看代码吧,之前也介绍过,参数可读性问题

代码语言:javascript复制
/* We define a "type tag" so we can pass types as values */
template <typename T>
inline constinit std::type_identity<T> ttag{};

/* The config now becomes a template */
template <typename Tint_type = decltype(ttag<uint64_t>)>
struct algo_config
{
    bool heuristic42    = true;
    Tint_type int_type  = ttag<uint64_t>;
    size_t threads      = 4ull;
};

/* And also the algorithm */
template <typename ...Ts>
auto algo(auto data, algo_config<Ts...> const & cfg)
{
    /* implementation */
}

int main()
{
    /* Setting just "value parameters" still works with and without "algo_config" */
    algo("data", algo_config{.heuristic42 = false, .threads = 8});
    algo("data",            {.heuristic42 = false, .threads = 8});

    /* When setting a "type parameter", we need to add "algo_config" */
    algo("data", algo_config{.int_type = ttag<uint32_t>, .threads = 8});
}

有点过度设计,但是点表达式构造这个c 早就该引入了,c一直有,c 一直没加,这个还是对可读性有帮助的

  • Decreasing the Number of Memory Accesses: The Compiler’s Secret Life 2/2

降低内存访问浪费,尽可能利用寄存器

尽量不要使用指针,如果用,restrict,避免 Pointer Aliasing,让临时对象的生命周期尽可能的短,降低寄存器使用浪费(循环中的依赖计算)

循环分析寄存器这个得展开讲讲,gcc用-fopt-info-all-optall,clang用-Rpass-missed=.* -Rpass=.* -Rpass-analysis=.* 报告很多很不好读

clang还有先进工具 -fsave-optimization-record opt-viewer(装个llvm-12-tools)

会生成很漂亮的图

绿色是优化成功,红色是优化失败,要改的也是这里。我说的只是皮毛,这里的细节很复杂,https://johnnysswlab.com/loop-optimizations-interpreting-the-compiler-optimization-report/

需要仔细读一读

  • Finding Unstable Code via Compiler-Driven Differential Testing

思路就是用编译期编出来N个版本,然后挨个FUZZ,重复,比较结果集,有点意思

代码在这里https://github.com/shao-hua-li/compdiff

视频

  • C Weekly - Ep 369 - llvm-mos: Bringing C 23 To Your Favorite 80’s Computers

感兴趣的可以看看

0 人点赞