图说2017年C++大会

    前几次的C++大会都是在上海,今年首次移师北京。会议的时间是11月17和18(周五六)两天。我本来预定了周四从上海到北京的高铁,但是突然有事要到武汉,于是只好从武汉再到北京。武汉到北京的高铁先是定了个夜里11点多到北京的。到了武汉后,把武汉的行程缩短了一些,于是又把车票改早3个小时,改成下午3:45分出发的G68。多谢C++组委会的工作人员,对我的接连改票非常耐心。

    晚上8:40分,高铁准时到北京西站,在赶往酒店的路上,已经到了酒店的一位朋友邀我吃饭,高铁上只吃了几个在武汉午饭打包的烧饼,正饥肠辘辘,于是直接到老城一锅,吃了一顿羊蝎子。:-)

    吃好夜宵入住酒店。这次的酒店在王府井的金茂万丽,与我喜欢的几个文化地标都非常近。马路对面就是北京人艺,人艺略南一点就是商务印书馆,还有逛过多次的涵芬楼书店。再往南一点还有老舍故居。

    上一张夜幕中的酒店外景图吧。

    酒店前台的背景墙装饰着很多书,虽然看起来很假,但是读一读那些经典的书名,对老雷来说也是一种享受。《史记》,《资治通鉴》,《四库全书》......

    电梯和房间的小装饰也很合老雷的意,小狮子,原木镜框,颇有古风的陶瓷战马......

    大会在周五早上9:20分准时开始,开场的短片很好看,题目叫《致敬程序员》。短片按时间顺序,回顾了软件和计算机科学发展的一些重要里程碑,从第一个程序员Ada开始,到图灵,冯诺依曼......每一页包含有人物的照片,以及他们所做的重要贡献。

    短片后是建忠代表会议主办方致辞,一如既往的技术范,谦虚儒雅的开场后便请会议的四位出品人上台。

    抱歉这张照片的效果比较差,因为老雷坐的有点远,而且是手机拍的。官网上应该有大图吧。    

    简短的开幕致辞后,便是上午的第一个keynote演讲。讲者为Michael Spertus。Mike是ISO C++标准委员会资深成员,目前是Symantec的技术院士与首席科学家,负责云端安全服务,同时在芝加哥大学任教。Mike曾创办 Geodesic,后被VERITAS收购。

    Mike演讲的题目是:《C++17: 我们有了一个新语言,这对我意味着什么?》

    从C++11开始,C++标准以每三年一个版本的速度发展,版本号即以年份标识,已经发布的三个版本分别为C++11, C++14, C++17。2017年刚好是C++17的发布之年,于是在本届C++大会上介绍C++17很是顺理成章。

    Mike讲义的第一页的题目是《C++17:我们确实有一个新语言》。

    关于“新语言”的说法,或许值得咬文爵字一下。从一般的认知上,C++17不能算是一门新语言,因为C++语言由来已久,它只是C++语言的一个“新版本”。但是Mike这样来自C++标准委员会的人把它称为一门新语言,也颇意味深长。首先这肯定不是笔误,也一定不是头脑一热,突发奇想这么称呼。或许是从编译器的角度吧。也或许是”行文“方便。后悔忘了在昨晚一起吃晚饭时当面和Mike先生求证了。

    Mike首先颇有哲学高度地解释了“怎样才能创造一件伟大的东西”。不是把以最快的速度加入最多的功能,而是通过优雅的(elegant)设计让可用的功能最多。还举了青花瓷瓶的例子。这显然是为了反驳那些认为C++17新增的功能不够多的观点。

    接下来Mike画龙点睛地指出C++17的宗旨(工作重点),是要把C++变得更强大和更清洁。

    随后,Mike举例介绍了C++17的部分关键特征来解说上诉宗旨。首先重点介绍了提高程序性能的新增支持,一个是与硬件的密切结合,另一个是并行方面的增强。对于前者,Mike举的例子是新增的关于cache line的两个常量。

namespace std {
  // ...
  // 18.6.� Hardware interference size
  static constexpr size_t hardware_destructive_interference_size = implementation-defined;
  static constexpr size_t hardware_constructive_interference_size = implementation-defined;
  // ...}

    简单来说,应用程序的C++代码可以通过这两个常量来取得当前处理器的cache line长度。然后在这个长度的指导下定义结构体和安全数据访问。更细节的介绍,可以参考当初提议这个功能的邮件:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html

    Mike先生归纳上诉新增功能的话很经典,值得引用一下:“C++已经给我们强大的能力来控制内存,现在它又能理解cache了。”

    在并行方面,Mike引用了Sean Parent的惊世骇俗之语:对于现代计算机来说,一个核的处理能力还不到系统总能力的1%;多核也不过占不到10%;加上SIMD向量化,差不多有25%;只用同时使用了GPU后才完全使用了100%的算力。

    为了解释C++17如何让程序变得更清洁,Mike介绍了新引入的string_view类型,在此不再赘述了。

    上午有两个keynote,Mike下场后,上场的是侯捷老师。中间休息时,播放了介绍侯老师的一个短片,内容除了侯老师在各地演讲的照片外,还有一些工作之余的生活照,包括山居岁月时手持镰刀除草的照片。    

    在大会议程上,侯老师演讲的主题名为“Move-aware class之水落石出”,正式演讲时,标题略作修改,变为《Move语意剖析与实力观察》,副标题叫“山高月小,水落石出”。

    这些年,差不多每年与侯杰老师见一次面。每次听他演讲,都还是受到新的启发。侯老师的ppt有几个特点,代码多,线多,图多,大多数页的内容都很满,可以讲很久,也需要听者花比较多的时间来体会和消化。因此,侯老师几次停下来给大家思考“10秒钟”或者20秒。

    侯老师的这种ppt风格在其它一些台湾同行的ppt里也时常见到,不知是何人所创。:-)

    考虑到侯老师的粉丝众多,再上一张侯老师演讲时的照片吧。

    吃过午饭后,出酒店呼吸室外的空气,忍不住想到老舍估计看一下。听说在维修,所以只能是门口看一下,因此不需要太多时间。

    多年前听出版社一位朋友的介绍,第一次去老舍故居,后来又经常到老舍家门口的民福居饭店吃饭。

    只步行7分钟就到了,果然是维修闭馆。胡同里一些工人在施工,似乎是改造电线。

(这张照片被放倒了,真不明白T同行们怎么就不给编辑页面加个旋转图片的功能,或者用AI自动识别一下?没有办法,大家活动一下颈椎吧)


    我的演讲安排在第一天的下午2:00 - 4:00,最初的题目是《在调试器看glibc堆和Valgrind》,后来考虑到不够明确,又加了个标题叫《Linux应用内存管理与错误诊断》。   

    当我开讲时,投影突然出了点问题,所以我只好在没有ppt的情况下做了一些介绍。投影正常后,为了节约时间,只好把前面暖场和自我介绍的几页很快跳过。但还是被眼疾手快的老朋友咏炜抓拍到了老雷照片投在大屏幕上的那个短暂时刻。


    我讲的主要内容分成两大块,一块是如何上调试器认识LINUX下的glibc堆,包括堆的详细布局、从内核批发内存的方法,以及分配和释放过程。

    另一块是如何调试常见的堆错误,包括多次释放、溢出和野指针等。介绍的主要工具是Valgrind。

    我讲完后,便在会场1坐下来,聆听蒋豪良分享他的C++代码优化实践,他在悉尼工作,远道而来。他的演讲也是分上下两个部分,结合实际代码,谈编译器产生的代码,和如何优化。举了很多实际例子,还是很有价值的。


    第一天的会议在六点多结束。晚上7点,讲师们在一楼参加讲师晚宴。上一张合影吧。

    内圈从左到右依次为高博,Borislav Stanimirov,Viktor Kirilov,??,Kate Gregory,刘加权,陈明辉, Benjamine Saks,Mike Spertus,李建忠,Mike Wong,吴咏炜。后排站立的从左到右依次是陈福真,祁宇,兰征鹏,蒋豪良,雷鹏,张银奎。

    

    因为周六晚上在上海有个重要活动,所以只好周六一早便赶高铁回上海了,错过了第二天的很多精彩内容。


    (这个短文的大部分内容是在返沪的高铁上写的,不时有各种打扰,难以集中思绪,结构散乱,有点像流水账,有些内容也没有深入考证,勉强成稿,聊胜于无吧,感谢多位讲师提供照片和review本文)


***********************************************************

正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生。

欢迎关注格友公众号


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值