2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2012-02-06
  • 本文字数:1875 字

    阅读完需:约 6 分钟

珠三角技术沙龙组委会成员、发起人之一赖勇浩近期的一篇博客引起社区内热烈讨论。他在其中认为:C++ 是2012 年不宜进入的三个技术点之一;其他两个是: ActionScript/MXML , 线程

赖勇浩对于“不宜进入”的定义是:

如果你现在不是这三个技术点的专家,并且手上没有使用这三个技术点的项目,进入这三个技术点仅为技术储备,那么就“不宜进入”。

至于为什么不宜进入,赖勇浩认为根本原因在于:

标准化过程中的超长流程,一次次将 C++ 推向深渊。

接下来,赖勇浩首先回顾了 20 世纪 90 年代:

其实在 90 年代,计算机的运算能力有限,市场上非常需要一款性能较高、抽象较强的编程语言,C++ 获得了成功,但它标准化的时间过长,造成各种编译器有各自互不兼容的“方言”,成了它的第一个软肋。

然后,赖勇浩又指出:“C++ 在 21 世纪的第一个十年里仍然地位稳固”,其原因在于:“Linux 和 MacOS X 大获成功,在这两个平台上 C++ 都是非常有竞争力的编程语言,C++ 自然水涨船高。”

但是,赖勇浩提出开发效率成为阻挡更多人采用 C++ 的另一个因素:

但随着 web2.0 和 web app 概念的兴起,以及 CPU 的主频进一步提升,服务器端编程语言渐渐地对执行效率不再敏感,而是更在意程序员的开发效率,众多的脚本语言开始蚕食 C++ 的市场份额⋯⋯新兴的贵族是动态语言。面对动态语言在开发效率上的强劲挑战,C++ 社区除了在 2003 年对 C++98 做了小小的 patch,基本上睡着了,完全没有应对之策,哦不,连应用的姿态都没有。

在赖勇浩看来,

进入 21 世纪的第二个十年,⋯⋯在这个十年,我们需要这样的编程语言: 1. 能充分利用现代 CPU 的计算能力,不仅仅是多个核心,更是巨大的 L1/L2/L3 Cache、超线程等;
2. 能够大量减小异步 I/O 的性能提升的同时带来的副作用:异步编程的复杂性以及对可维护性的伤害

两句话其实也可以压缩为一句:需要有更好的并发模型的语言。

上述主要针对服务器编程领域,在桌面和移动领域,赖勇浩认为:

rust 会进入桌面开发,google go 肯定会顺道啃一口。而移动设备方面,⋯⋯编译型语言加脚本的模式就会占大头⋯⋯C++ 还是前景堪忧。

最后,赖勇浩的总结是:

回首 C++ 的 30 年,展望它的未来,总结起来可能就是:标准化流程拖死人了。如果不是 15 年不能标准化,java/c# 的搅局可能不会出现;如果在 2005 年能够应对动态语言……如果云时代有更好的并发模型……

对于赖勇浩的观点,知乎上有人提出质疑,知名 C++ 程序员陈硕做出了回应,他认为:

C++ 目前坚守的阵地:服务端基础架构(例如淘宝 OceanBase 是 C++ 写的),PC 客户端的 3D 游戏(DirectX 是提供 COM/C++ 接口),某些嵌入式上的 (准 / 软) 实时程序,其他 Java/C#/Python 未能涉足的领域(会遇到 C 的抵抗)。如果你正好在这几个领域,我看不出有担心的必要。

陈硕还指出:

C++ 目前仍然是最快的语言(见 google language benchmark 论文和 shootout.alioth.debian.org/ )。如果你的应用领域确实在乎这个性能⋯⋯那么 C++ 仍然是不二之选。

技术博客酷壳的博主陈皓对此次讨论也发表了一篇博客《Why C++ ? 王者归来》,他在其中引用了 Herb Sutter 的一次演讲,Herb Sutter 是 Exceptional C++ C++ Coding Standards 的作者、ISO C++ 委员会的主席、C++/CLI 首席架构师、Microsoft 的软件架构师。这次演讲是 C++ and Beyond 2011 上的一次公开演讲。

陈皓在文中摘取了本次演讲的幻灯片,并做了一些注释和内容提要。 他首先指出:

为什么 C++?因为 Performance per $,也就是说 performance 就是钱,这个分成三个方面,

  • 耗电,芯片的耗电量,移动设备的耗电量,家用电脑的耗电量都和钱有关系。
  • 资源,家用电脑和移动设备上的处理器资源有限,因为要让一般消费者买的起。
  • 体验,在更小的设备上会有更好的体验,有更好的体验就可以挣更多的钱。

此后,他也回顾了 C++ 的历史,并借助幻灯片中的一张表格指出:

如果把我们的对编程语言的需求总结为四个:效率,灵活,抽象,生产率。那么,C 语言玩的是前两个,而 C++ 玩的是前三个,Java 和 C#玩的是后两个(抽象和生产率) 任保一种设计都不可能让你什么都要的,这就是 Trade-Off——什么事都需要交换的。

接下来,陈皓从移动设备、数据中心两个角度,说明了 C++ 的性能效率的重要性,同时还指出:

当然,不是 C++ 不注重 开发效率,看看 C++0X 的标准引入了多少东西我们就知道了。但是本质上,C++ 还是致力于性能和抽象的完全平衡

目前仍在进行的 2011 InfoQ 读者年度深度调查中,有超过 30% 参与调查的读者主要使用的语言是 C 和 C++,也欢迎正在阅读本文的您参与调查,告诉我们您使用哪些语言,同时也可以在文后留下您对本次讨论的想法。

2012-02-06 01:597803
用户头像

发布了 479 篇内容, 共 180.9 次阅读, 收获喜欢 53 次。

关注

评论

发布
暂无评论
发现更多内容

今日谈:信道复用、PPP帧、ARP协议的有关知识

恒生LIGHT云社区

信道编码 ARP协议 PPP

增长方法论:五步验证法

石云升

产品经理 28天写作 产品增长 12月日更

低代码助推生物制药企业CDMO的“数字化转型”之路

优秀

低代码 制药企业CDMO

帮你积累音视频知识,Agora 开发者漫游指南正式启航

RTE开发者社区

人工智能 音视频

分析一下微信朋友圈的高性能复杂度

Sindorei

「架构实战营」

2021的科技卦象·震·到元宇宙玩“躲猫猫”

脑极体

实现macOS热门功能,我只用了60行代码!

Jackpop

阿里云分布式容器平台即将全面启动公测!

阿里巴巴云原生

阿里云 容器 分布式 云原生

重磅|火山引擎边缘计算节点服务正式发布!

火山引擎边缘云

边缘计算 网络 云计算,

2021年11月券商App行情刷新及交易体验评测报告

博睿数据

架构实战营 4 期 - 第2周作业

周念

「架构实战营」

从 “香农熵” 到 “告警降噪” ,如何提升告警精度?

阿里巴巴云原生

阿里云 云原生 告警 可观测 信息熵

东数西算,风起中原

脑极体

云原生新边缘:火山引擎边缘计算最佳实践

火山引擎边缘云

云计算 云原生 边缘计算

CSS之选择器(八):+ 和 ~

Augus

CSS 12月日更

电脑安全小知识

喀拉峻

黑客 网络安全 安全 计算机基础

设计模式的提出

卢卡多多

28天写作 12月日更

【架构师训练营】模块二作业

樰巳-堕~Horry

架构实战营 「架构实战营」

解决问题

Nydia

Hoo虎符研究院 | 币海寻珠——近期公链事件(2021.12.16)

区块链前沿News

Hoo虎符 虎符交易所

链路分析 K.O “五大经典问题”

阿里巴巴云原生

负载均衡 阿里云 云原生 流量 链路分析

【Redis核心原理专题】(1)「技术提升系列」分析探究如何实现LFU的热点key发现机制以及内部的Scan扫描技术的原理

码界西柚

redis 12月日更 Redis Scan Redis 热点key Redis服务

架构模块二作业

Vincent

「架构实战营」

46 K8S之集群高可用

穿过生命散发芬芳

k8s 28天写作 12月日更

重磅!博睿数据Go语言智能探针技术GoAgent国内首发

博睿数据

请回答,轻巧又见效的数字化转型,企业该如何做?

ToB行业头条

15.  《重学JAVA》--Lambda表达式

杨鹏Geek

Java 25 周年 28天写作 12月日更

工业机器视觉系统的构成与开发过程(理论篇—1)

不脱发的程序猿

计算机视觉 机器视觉 图像处理 LabVIEW 工业自动化

LabVIEW软件、驱动安装及编程方法(理论篇—2)

不脱发的程序猿

机器视觉 LabVIEW 工业自动化

使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller

CODING DevOps

Kubernetes 云原生 APISIX Nocalhost Ingress Controller

Holos: 我来了,我是个大块头。

mtfelix

28天写作

2012,C++,学,还是不学?_编程语言_郑柯_InfoQ精选文章