2012,C++,学,还是不学?

openkk 12年前
     <p> <a href="/misc/goto?guid=4958328532967671180">赖勇浩</a>近期的<a href="/misc/goto?guid=4958327664735134273">一篇博客</a>引起社区内热烈讨论。他在其中认为:C++是 2012 年不宜进入的三个技术点之一;其他两个是:<a href="/misc/goto?guid=4958328534491019152">ActionScript/MXML</a>, <a href="/misc/goto?guid=4958328535296627851">线程</a>。</p>    <p> 赖勇浩对于“不宜进入”的定义是:</p>    <blockquote>     <p>如果你现在不是这三个技术点的专家,并且手上没有使用这三个技术点的项目,进入这三个技术点仅为技术储备,那么就“不宜进入”。</p>    </blockquote>    <p> 至于为什么不宜进入,赖勇浩认为根本原因在于:</p>    <blockquote>     <p>标准化过程中的超长流程,一次次将 C++ 推向深渊。</p>    </blockquote>    <p> 接下来,赖勇浩首先回顾了 20 世纪 90 年代:</p>    <blockquote>     <p>其实在 90 年代,计算机的运算能力有限,市场上非常需要一款性能较高、抽象较强的编程语言,C++ 获得了成功,但它标准化的时间过长,造成各种编译器有各自互不兼容的“方言”,成了它的第一个软肋。</p>    </blockquote>    <p> 然后,赖勇浩又指出:“C++ 在 21 世纪的第一个十年里仍然地位稳固”,其原因在于:“Linux 和 MacOS X 大获成功,在这两个平台上 C++ 都是非常有竞争力的编程语言,C++ 自然水涨船高。”</p>    <p> 但是,赖勇浩提出开发效率成为阻挡更多人采用 C++ 的另一个因素:</p>    <blockquote>     但随着 web2.0 和 web app 概念的兴起,以及 CPU 的主频进一步提升,服务器端编程语言渐渐地对执行效率不再敏感,而是更在意程序员的开发效率,众多的脚本语言开始蚕食 C++ 的市场份额⋯⋯新兴的贵族是动态语言。面对动态语言在开发效率上的强劲挑战,C++ 社区除了在 2003 年对 C++98 做了小小的 patch,基本上睡着了,完全没有应对之策,哦不,连应用的姿态都没有。    </blockquote>    <p> 在赖勇浩看来,</p>    <blockquote>     进入 21 世纪的第二个十年,⋯⋯在这个十年,我们需要这样的编程语言:     <ol>      <li>能充分利用现代 CPU 的计算能力,不仅仅是多个核心,更是巨大的 L1/L2/L3 Cache、超线程等;</li>      <li>能够大量减小异步 I/O 的性能提升的同时带来的副作用:异步编程的复杂性以及对可维护性的伤害</li>     </ol> 两句话其实也可以压缩为一句:需要有更好的并发模型的语言。    </blockquote>    <p> 上述主要针对服务器编程领域,在桌面和移动领域,赖勇浩认为:</p>    <blockquote>     <p>rust 会进入桌面开发,google go 肯定会顺道啃一口。而移动设备方面,⋯⋯编译型语言加脚本的模式就会占大头⋯⋯C++还是前景堪忧。</p>    </blockquote>    <p> 最后,赖勇浩的总结是:</p>    <blockquote>     <p>回首 C++ 的 30 年,展望它的未来,总结起来可能就是:标准化流程拖死人了。如果不是 15 年不能标准化,java/c# 的搅局可能不会出现;如果在 2005 年能够应对动态语言……如果云时代有更好的并发模型……</p>    </blockquote>    <p> 对于赖勇浩的观点,知乎上有人提出<a href="/misc/goto?guid=4958328536085645174">质疑</a>,知名 C++ 程序员<a href="/misc/goto?guid=4958328536888790967">陈硕</a>做出了<a href="/misc/goto?guid=4958328537672641063">回应</a>,他认为:</p>    <blockquote>     <p>C++目前坚守的阵地:服务端基础架构(例如淘宝 <a href="/misc/goto?guid=4958328538466274353">OceanBase</a> 是 C++ 写的),PC 客户端的 3D 游戏(DirectX 是提供 COM/C++接口),某些嵌入式上的(准/软)实时程序,其他 Java/C#/Python 未能涉足的领域(会遇到C的抵抗)。如果你正好在这几个领域,我看不出有担心的必要。</p>    </blockquote>    <p> 陈硕还指出:</p>    <blockquote>     <p>C++目前仍然是最快的语言(见 google language benchmark 论文和 <a href="/misc/goto?guid=4958328539255087609" target="_blank">shootout.alioth.debian.org/</a>)。如果你的应用领域确实在乎这个性能⋯⋯那么 C++ 仍然是不二之选。</p>    </blockquote>    <p> 技术博客<a href="/misc/goto?guid=4958185560036269721">酷壳</a>的博主陈皓对此次讨论也发表了一篇博客《<a href="/misc/goto?guid=4958328540779826906">Why C++ ? 王者归来</a>》,他在其中引用了 <a href="/misc/goto?guid=4958327665534035495" target="_blank">Herb Sutter</a> 的一次演讲,Herb Sutter 是 <a href="/misc/goto?guid=4958328542306331103">Exceptional C++</a>和<a href="/misc/goto?guid=4958328543092050453">C++ Coding Standards</a> 的作者、ISO C++ 委员会的主席、C++/CLI 首席架构师、Microsoft 的软件架构师。这次演讲是<a href="/misc/goto?guid=4958327666326167162" target="_blank">C++ and Beyond 2011</a>上的一次公开演讲。</p>    <p> 陈皓在文中摘取了本次演讲的幻灯片,并做了一些注释和内容提要。 他首先指出:</p>    <blockquote>     <p>为什么C++?因为 Performance per $,也就是说 performance 就是钱,这个分成三个方面,</p>     <ul>      <li>耗电,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。</li>      <li>资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。</li>      <li>体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。</li>     </ul>    </blockquote>    <p> 此后,他也回顾了 C++ 的历史,并借助幻灯片中的一张表格指出:</p>    <blockquote>     如果把我们的对编程语言的需求总结为四个:     <strong>效率,灵活,抽象,生产率</strong>。那么,C语言玩的是前两个,而 C++ 玩的是前三个,Java 和 C# 玩的是后两个(抽象和生产率)     <p>任保一种设计都不可能让你什么都要的,这就是 Trade-Off——什么事都需要交换的。</p>    </blockquote>    <p> 接下来,陈皓从移动设备、数据中心两个角度,说明了 C++ 的性能效率的重要性,同时还指出:</p>    <blockquote>     <p>当然,不是 C++ 不注重开发效率,看看C++0X 的标准引入了多少东西我们就知道了。但是本质上,<strong>C++还是致力于性能和抽象的完全平衡</strong>。</p>    </blockquote>    <div id="come_from">     来自:     <a id="link_source2" href="/misc/goto?guid=4958328544624054066" target="_blank">InfoQ</a>    </div>