CppCon2014 分类合辑 & 十大推荐阅读列表

Live long and prosper. ("生生不息,繁荣昌盛")
    - 瓦肯举手礼

上个礼拜,首届 CppCon 在西雅图举办,大拿们(Bjarne Stroustrup, Herb Sutter, Andrei Alexandrescu, Scott Meyers)纷纷到场谈笑风生,应该算是 C++ 程序员的年度节日了吧。废话不多说,俺把读过的 slides 粗粗分了一下类,遇到有趣的,就简单说上两句;感觉没啥意思的,就直接略过。所以这个列表是不完全的,完全的可以看 这里

分类标题后的标签说明 (beginner / intermediate / advance) 是俺对内容涉及深度的简单划分,不是很严谨,见谅。

文末是俺挑出的十大推荐阅读列表


分类合辑

教程和介绍 (beginner)

An Overview of C++11 and C++14 - Leor Zolman
比较全面地过了一遍 C++11/14 的内容,109页ppt都是关于语言本身,不包括标准库。想走马观花来一遍的同学可以看一下。

The Canonical Class - Michael Caisse
讲解了在现代 C++ 中,实现一个类应该注意哪些问题。俺认为这个选题的立意很有趣,讲解也很不错。值得一看。

Boost - a Bridge from C++98 to C++11 - Michael VanLoon
介绍了 boost 库在 C++ 新标准形成过程中发挥的作用,以及哪些新特性是化生自 boost 的,内容较浅显。

[游戏开发] Quick game development with C++11-C++14
非常初级的游戏开发介绍性材料

Unicode in C++ - McNellis
Visual C++ Team 的同学介绍 Unicode 的前因后果及 C++ 实现的方方面面的考虑,值得一读。

Anatomy of a Smart Pointer - Michael VanLoon
解释了一下智能指针内部实现的一些方案。

思维和理念 (intermediate)

Back to the Basics! Essentials of Modern C++ Style - Herb Sutter
Herb Sutter 的发言,描述了现代 C++ 如何帮助程序员简化头脑模型 (mental model) 的,值得一读。说到 B.S. 的发言 "Make Simple Tasks Simple" 中提到 "&&" 的次数为——0次;说到大家达成共识——"T&&这个东东的确需要个新名字",只是不接受 Scott Meyers 的 "universal reference" 提法,倾向于使用 "forwarding reference" 这个词。俺认为,这个词的确更准确一些,精确地描述了它的行为(把参数的引用性(reference-ness)恰当转发进函数内部),不像所谓 universal reference 只是在概念上概括了一下。

Data-Oriented Design and C++ - Mike Acton
面向数据的设计,注意不要跟“数据驱动开发”搞混了。这想法不新鲜,只是日常开发中通常更容易强调方法的比较和筛选,围绕数据本身的思维方式容易被忽视。

Make Simple Tasks Simple - Bjarne Stroustrup
运用新特性来简化开发。BS的唯一一个 session。

The Implementation of Value Types - Lawrence Crowl
值类型的实现。感觉说得抽象了点。

The Philosophy of Google's C++ Style Guide - Titus Winters
Google 的同学出来谈 Google 的 C++ 编程规范背后的哲学。Google 有四千个 C++ 程序员。要点:#1. 为读代码的人优化(Optimize for the Reader, not the Writer) #2. 规则要体现出价值,不要陷入琐屑的小细节 (Rules Should Pull Their Weight) #3. 尊重标准,但不过分地膜拜 (Value the Standard, but don't Idolize) #4. 一致性 (Be Consistent) #5. 如果有啥特殊情况,一定要在代码中明确地说清楚 (If something unusual is happening, leave explicit evidence for the reader) #6. 少玩花样,不要搞奇技淫巧 #7. 不要污染全局 namespace #8. 必要的时候,为性能让步。

Viewing the world through array-shaped glasses
微软的同学讲解现代 C++ 的一些设计时可供考虑的方案,内容比较丰富,值得一看。

工程实践 (intermediate)

Making C++ Code Beautiful - Gregory and McNellis
来自 Visual C++ Team,一些比较偏向于基础的工程实践,有一点点价值观上的引导。

Modernizing Legacy C++ Code - Gregory and McNellis
同样来自 Visual C++ Team,改良已有代码,易读,有用,推荐。

C++ in Huge AAA Games - Nicolas Fleury
来自育碧的蒙特利尔工作室 (Ubisoft Montreal 现有 2600+ 人,是世界上最大的游戏工作室) 演讲内容主要涉及编译链接时间优化,性能调整,调试辅助增强等方面,非常实用。

How Ubisoft Montreal Develops Games for Multicore - Before and After C++11 - Jeff Preshing
主要讲了蒙特利尔工作室利用多核的几种传统模式,以及在 C++11 中利用 std::atomic 改善原有的同步机制

Practical Cross-Platform Mobile C++ Development at Dropbox - Alex Allain
讲了 Dropbox 是如何使用 C++ 来开发移动端 Android/iOS 的 app 的,跟具体平台的交互方面讲得比较多。

Hourglass Interfaces for C++ APIs - Stefanus Du Toit
沙漏型接口设计,使用C89做中间的接口层,回避了 ABI 问题;避免了二进制接口出现 C++ 类型;隐藏了内部数据布局;跟其他语言的绑定更为简单一致。

0xBADC0DE
如何着手处理手头的 Bad Code,谈了一下维护,重构和重新设计。

Adventures in Updating a Legacy Codebase - Billy Baker - CppCon 2014
主要是讲 FlightSafety 从老系统迁移到 C++11 的过程。

Hardening your code - Marshall Clow
一些改良代码的工程实践,主要有 sanitizer, static/dynamic analyzer 等

专题 (general)

[科学应用] C++ On Mars - Mark Maimone
介绍了火星漫游者上的 C++ 应用。火星车的资源非常有限;系统的基础环境(大部分驱动)都是C++写的;大部分逻辑用于处理采集的火星表面立体图像(17个摄像机);周围环境测量和分析,路径规划和地表导航,防碰防摔(这一段感觉有点像扫地机器人);两个机器人通过互相采样和分析,实现协调和帮助;嵌入式C++的定制内存管理;强调真实环境测试(Test As You Fly);大多数传回的数据都使用C++分析和处理后发到手机;介绍了C++在各种航空器和人造卫星上的应用
这个演讲的关键字是“实时”和“资源受限”。演讲的图片很丰富,大部分是真实运作中的火星漫游者(真的很酷),推荐。

[科学应用] Gamgee - A C++14 library for genomics data processing and analysis - Mauricio Carneiro
使用 C++14 处理基因组数据的一些应用。基因数据的特性(对任意一个样本充分理解需要与十万份样本进行对比);对比了用 java 时受到的一些限制(如不同数据结构间内存连续性的控制);使用 auto 来解耦模块间 API 调用(避免大量被动修改);一些真实的科学运算方面的简化的代码样例。

[军事应用] The Joint Strike Fighter Coding Standard - Bill Emshoff
使用 C++ 在 JSF 联合战机上的系统及应用实现。战斗机的环境约束有:硬实时,内存有限,极高的安全性(出问题可能会导致坠机和生命危险),可移植性(适应不同的模拟系统),可维护性(数十年的维护成本)

[并行] Overview of Parallel Programming in C++ - Pablo Halpern
描述了并发 (concurrency) 和并行 (parallelism) 的区别及相关的语言支持。

[并行] Parallelizing the Standard Algorithms Library - Jared Hoberock
来自 nVidia 的并行实践,主要讲述了把标准库中的算法部分并行化的一些实践。

[异步] Asynchronous Computation in C++ - Hartmut Kaiser - CppCon 2014

[异步] await 2.0 - Stackless Resumable Functions - Gor Nishanov - CppCon 2014
微软在 VS "14" 中实现的可恢复协程(可能会入 C++17)

[并发] Lock-Free Programming (or, Juggling Razor Blades) - Herb Sutter
使用 C++11 提供的并发支持实现无锁的一般方法。

[优化] Where did my performance go - Fedor Pikus
怎样剖析并发程序的性能热点,非常值得一看。

[优化] Optimization Tips - Andrei Alexandrescu
一些细节上的优化实践。

[跨平台] Multiplatform C++ - Edouard Alligand
归纳了一些跨平台开发的要点。

[设计模式] Accept No Visitors - Yuriy Solodkyy
比较了 Visitor 模式的两个替代物 Pattern Matching 和 Open Multi-Methods,值得一读。

[Web] Using C++ to Connect to Web Services - Steve Gates
C++ 在 Web Service 下的应用,来自微软。

工具和库 (general)

Sanitize your C++ code - Kostya Serebryany
来自 Google 的工具集,ASan / TSan / MSan / UBSan 各种自动侦测,各种辅助调试,真的强大,推荐一看。

STL Features And Implementation Techniques - Stephan T. Lavavej
来自 Visual C++ Team 的同学手把手教你实现 STL 的功能,值得一看。

Embind and Emscripten - Blending C++11, JavaScript, and the Web Browser - Chad Austin
C++ 和 Javascript 的绑定。

Implementing wire protocols with Boost Fusion - Thomas Rodgers
boost.fusion 的一个应用——实现一个数据协议。

Introduction to C++ AMP
来自微软的 AMP 简介,介绍性材料。俺认为在一众类似的异构计算工具中,这个是相对比较有前途的,没听说过 AMP 的同学值得一看。

Writing Data Parallel Algorithms on GPUs - Ade Miller
又是一篇 AMP 的,这篇比较深入一点。讲了如何把一些算法分解到 GPU 上跑。

sqlpp11 - An SQL Library Worthy of Modern C++
使用现代 C++ 实现的 sql 库,语法已经简洁到几乎是在 C++ 里写 sql 语句了。不过这种重 template 库的缺点是编译速度慢,出错时信息晦涩,调试时各种符号信噪比太低,有时候 expand 一个类型就能把 watch 窗口给累趴下了。

其他

C++ Type Deduction and Why You Care - Scott Meyers
Scott Meyers 同学谈类型推导。这个内容基本上跟俺前段时间翻译的 EMC 前几条有点重复了,可移步这里查看。

C++ Test-driven Development - Peter Sommerlad
TDD,没啥新意,比较基础。

C++11 in the Wild - Techniques from a Real Codebase
几个小技巧。

Decomposing a Problem for Parallel Execution - Pablo Halpern
任务分解和并行化,提到了一个数据分块分区来增强局部性的想法。

Types Don't Know # - Howard Hinnant
一种简单的合并哈希的方法,很简单但也很实用的组织形式。

Generic Programming with Concepts Lite - Andrew Sutton
泛型编程里的 Concept 和 Constraints。

Practical Type Erasure - A boost::any Based Configuration Framework
Pragmatic Type Erasure: Solving Classic OOP Problems with an Elegant Design Pattern
两篇跟 Type Erasure (类型抹除) 有关的演讲,一个是实际应用,一个是设计探讨,感兴趣的同学可以看一下。俺的感觉是类型抹除虽然能帮助简化接口,但是更容易使用不当,形成 ugly code,造成不相干的耦合。

Cheap, Simple, and Safe Logging Using Expression Templates - Marc Eaddy
表达式模板的一个技巧性应用,有点意思。


十大推荐阅读列表


本文链接较多,有可能会出现 GitHub 上原库目录名有变动的情况。如果有链接失效,请不吝指出,俺在此先谢过了。

[完]
Gu Lu
[2014-09-23]

知识共享许可协议
本作品由Gu Lu创作,采用知识共享Attribution-NonCommercial-NoDerivatives 4.0 国际许可协议进行许可。