前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 动态新闻推送 第1期

C++ 动态新闻推送 第1期

作者头像
王很水
发布2021-08-31 17:44:05
4700
发布2021-08-31 17:44:05
举报

C++ 动态新闻推送 第1期

每周日推送从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。

周刊项目地址 github,在线地址

discord讨论群组

知乎专栏

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


资讯

关于c++标准会的最新进展 c++23

herb介绍了几个他感兴趣的小补丁

  • lambda可以省略括号(),但是如果有mutable又不可以省略括号了,需要修订
  • range使用:std::views::join迭代器返回有问题,引入新组件修复
  • 加强std::visit处理继承std::variant 的场景
  • 引入std::to_underlying代替 std::underlying_type_t<T>

涉及到语法细节我也不懂,可以看trip report中引用的论文看详细细节

感觉能用在反射上

之前c++ weekly也讨论了std::source_location 链接 很有用处

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

github也有更新,见https://github.com/hellogcc/osdt-weekly

文章

实现并行的copy_if

c++17已经实现了一些并行算法,实现比较粗暴

代码语言:javascript
复制
std::sort(std::execution::par, ...);
std::for_each(std::execution::par, ...);

std::execution::parallel_policy不要求顺序,这样可能有线性的性能提升,但是对于sort,可能需要同步

对于copy_if来说,返回新的对象,这个返回结果,多线程写入,必然需要同步。作者给出了几种实现方案

1 简单加锁 2 利用算法规避锁,3 分块 其中某些场景下多线程并没有起到加速的作用。

第二种方法 用到了std::exclusive_scan 可以了解下,类似haskell map+scanl

clang的一个编译告警-Wsuggest-override

这里讲了一个场景

代码语言:javascript
复制
struct B {
    virtual int f() = 0;
    virtual int g() = 0;
};

struct C : B {
    int f() override;

    virtual int g() final;  // overrides
    virtual int h() final;  // doesn't
};

一个函数同时被virtual和final修饰,可能看不清本身的含义,通过这个编译能让不清楚的接口语义提前暴露出来

并推荐基类 virtual,继承用override/final 尽可能别混用,当然也存在这个基类是另外一个基类的子类的场景,导致同时有virtual和final,尽量避免

一个协程的教程

concept

简单来说,就是这段代码

代码语言:javascript
复制
template <typename T>
concept Number = std::integral<T> || std::floating_point<T>;

template <typename T>
requires Number<T>
class WrappedNumber {
public:
  WrappedNumber(T num) : m_num(num) {}
private:
  T  m_num;
};

template <typename T>
requires Number<T>
auto add(T a, T b) {
  return a+b;
}

注意这里concept和requirs的用法

Guru of the Week #100 Preconditions, Part 1

这里在介绍断言的两种语义,在前面校验还是在后面校验,类似gsl::Expect gsl::Ensure的区别,写的非常长

  • A precondition is a predicate that should hold upon entry into a function. It expresses a function’s expectation on its arguments and/or the state of objects that may be used by the function.
  • A postcondition is a predicate that should hold upon exit from a function. It expresses the conditions that a function should ensure for the return value and/or the state of objects that may be used by the function.

hurb是constract 提案的作者,所以对这些概念解释的比较细致。文章我没有仔细看。

同步的outputstream

std::cout多线程写是会乱序的,c++20引入了std::osyncstream,这样所有的都会同步

ps: stream这套东西应该没人用吧

cpp tips of week #214 Did you know about variadic aggregate initialization?

介绍variadic aggregate initialization的 数组初始化可以变参模版初始化,这个例子太魔鬼了,可以看这个博客 理解一下

视频

cpp weekly

老生常谈,讲的 C++’s Most Vexing Parse

Meeting C++ YT - Jonathan Müller - The Static Initialization Order Fiasco

借着实现一个logger库的例子,讨论各种初始化的顺序。

Timur Doumler - How C++20 changes the way we write code - Meeting C++ 2020

介绍c++20的四个概念coroutine/concept/module/range,以及如何改善c++代码

cppcast 每周更新

开源项目

一个用c++实现的lisp wiki丰富

mold 一个现代的linker 解决的问题是当前编译环境的瓶颈容易在链接上,没有充分利用并行化优势

mold的目标是要比cat还快,首先并发做文件拷贝,比单线程cat快,其次文件拷贝瓶颈在IO,可以用空闲的cpu做其他事情

llvm 的lld其实在这方面已经做了优化,但作者认为还是慢

还有很多设计可以在readme中看到

讨论

工具

toolchain 介绍周边工具

hacking cpp 有很多c++的资料,比如https://hackingcpp.com/cpp/std/containers.html


看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!

本文永久链接

代码语言:txt
复制
     This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/001.md).
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++ 动态新闻推送 第1期
    • 资讯
      • 编译器信息最新动态推荐关注hellogcc公众号
    • 文章
      • 视频
        • 开源项目
          • 工具
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档