Skip to content

Latest commit

 

History

History
154 lines (90 loc) · 5.66 KB

107.md

File metadata and controls

154 lines (90 loc) · 5.66 KB
layout title
post
第107期

C++ 中文周刊 第107期

周刊项目地址

公众号

RSS https://github.com/wanghenshui/cppweeklynews/releases.atom

欢迎投稿,推荐或自荐文章/软件/资源等

提交 issue

身体不太舒服,请假了。更新有点晚,见谅

本周内容不多


资讯

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

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

CLion 2023.1 出了,QT Creater10也出了

文章

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

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

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

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

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

llvm的,不是很懂

值得鼓励

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

/* 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++一直没加,这个还是对可读性有帮助的

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

尽量不要使用指针,如果用,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/

需要仔细读一读

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

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

视频

感兴趣的可以看看

开源项目需要人手

  • asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线

  • Unilang deepin的一个通用编程语言,点子有点意思,也缺人,感兴趣的可以github讨论区或者deepin论坛看一看。这里也挂着长期推荐了

  • paozhu 国人开发的web库,和drogon联系过没共建而考虑自己的需求基于asio开发。感兴趣的可以体验一下,挂在这里长期推荐了

新项目介绍/版本更新


本文永久链接

如果有疑问评论最好在上面链接到评论区里评论,这样方便搜索,微信公众号有点封闭/知乎吞评论