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](https://github.com/CppCon/CppCon2014/tree/master/Presentations/Lock-Free%20Programming%20(or%2C%20Juggling%20Razor%20Blades%29)
使用 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

Comments
Write a Comment

Tags

随笔   游戏开发   Programming   Bitcoin   C/C++   优化   Unity   C++   知乎   游戏设计   中国文化   比特币   Unity3D   区块链   软件开发   引擎设计   系统架构   Production   idtech   Bitcoin SV   加密货币   项目管理   BSV   游戏评论   资源管理   资源流水线   效率   道德经   网络   方法论   模板编程   Blockchain   Lua   Blockchain Computing   Oculus   GDC   渲染   VR   PerfAssist   Unity MemoryProfiler   BCH   读书笔记   经济学   信息过载   行业报告   字体   Productivity   图形   网络编程   Dice   协程   EMC   Premake   测试   中间件   Game Engine   新手引导   区块链游戏   Methodology   CI   命令行解析   goroutine   ndk   Ethereum   nanomsg   自动化   Scripting   摘录   Debugging   同步技术   cppcon   C++模板   数据上链   DOOM3   技术评估   Unity GC   C++11   学习方法   Surface Pro 3   Engine Evaluation   CRT   文化   笔记   golang   图形编程   多线程   ETH   Bitcoin Cash   cppcon14   Visual Studio   Unity Coroutine   跨语言可变参数列表   团队协作   货币   Deployment   Visual Assist   工程改进   Michael Abrash   exp   开放世界   量子计算   域名   虚拟现实   系统重构   slua   遮挡剔除   完美转发   协作式调度   Modern C++   类型推导   Memory Debugging   个人成长   小故事   BTC   暴雪   产品   历史   错误处理   Unity Profiler   MOD