为什么看到这么多人不推荐C++?

开发 后端
2000年左右是C++的鼎盛期,游戏,图形界面,科学计算,后台服务,各种新语言的实现语言,甚至入侵了一点操作系统里C的地盘。一项技术,火起来蜂拥而上,泥沙俱下,平稳后发现后劲不足,或者有另一个风口出现,便如树倒萎溃散。

为什么看到这么多人不推荐C++?

2000年左右是C++的鼎盛期,游戏,图形界面,科学计算,后台服务,各种新语言的实现语言,甚至入侵了一点操作系统里C的地盘。

一项技术,火起来蜂拥而上,泥沙俱下,平稳后发现后劲不足,或者有另一个风口出现,便如树倒萎溃散。

进化是好事,进化的同时要吸取经验,避免出现返祖现象。C++之父写过一本神书,«C++语言的设计和演化»,鄙人孤陋寡闻,似乎这是唯一一本阐述语言设计理念、折衷的辛苦无奈历程,Bjarne 在书中提出了很多极具智慧的设计理念,比如时下小火的俨然C++继任者 Rust 也极为推崇的“零代价抽象”。

回到主题,为什么C++不再被推崇?客观原因很明显:

(1) C++语法很复杂,好的C++程序员难求。

语法上 C++14 开始的“后现代C++”已经改善不少,以前一些奇技淫巧可以抛弃了,但可惜为了向后兼容性,历史包袱是丢不了的。

(2) 历史上机器性能很弱,编译器注重生成代码效率而在不太注重警告语法陷阱——没有足够资源做分析,C++编译已经非常慢了,所以C++的开发者友好度严重不足。

就像JS届出了v8这个奇葩,C++届有了LLVM后,逼得GCC也不断改进,错误信息提示友好漂亮多了,大微软的VC编译器还能把Effective C++, More Effective C++等书里描述的注意事项融入编译器里,也是这个大微软,开源了好用的vcpkg,搭配CMake, C++的开发体验比以前提升了很多,至少比 NodeJS 折腾一礼拜还不一定能搞定编译工具链强 。

(3) Web 2.0 甚至 mobile web 时代,连老实贤惠的Java都被嫌弃,就别提C++了。

C++在科学计算的地位还是难以动摇,别瞅现在Python火的红屁股,其实就是个皮,没有C/C++加持,Python屁都不是。

明确下观点:你不一定要用C++,但它值得了解。补一句,你不一定要用Rust,但它值得学习。

最后,贴一个 Go 的例子,编译没问题,运行出错,而在 C++ 里完全可以在编译期就发现问题,压根不让编译通过。

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "sync" 
  6.     "time" 
  7.  
  8. func main() { 
  9.     var wg sync.WaitGroup 
  10.  
  11.     wg.Add(1) 
  12.     go foo(wg) 
  13.  
  14.     fmt.Println("before wait"
  15.     wg.Wait() 
  16.     fmt.Println("after wait"
  17.  
  18. func foo(wg sync.WaitGroup) { 
  19.     fmt.Println("before sleep"
  20.     time.Sleep(2 * time.Second
  21.     fmt.Println("after sleep"
  22.     wg.Done() 

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2024-03-01 17:01:15

GraphQL后端

2024-09-12 08:32:42

2024-05-16 20:48:23

ReactReact 19React 编译器

2020-01-02 10:06:16

Java 8Java 14

2022-08-04 23:32:38

比特币以太坊代币

2017-12-21 19:38:50

润乾中间表

2022-07-26 23:43:29

编程语言开发Java

2021-10-27 15:23:10

语言PHP开源

2024-07-29 09:03:00

2021-08-19 06:53:18

开发语言Java

2015-01-14 14:27:18

Docker容器镜像

2019-01-31 10:15:14

群聊单聊消息

2013-01-15 09:41:45

编程语言

2013-01-24 09:44:44

数据库

2019-07-05 15:52:03

数据科学家大数据机器学习

2021-04-27 15:13:20

Java开发语言

2021-09-13 10:03:54

蓝牙连接蓝牙蓝牙设备

2016-12-01 13:40:37

2022-01-11 10:29:32

Docker文件挂载

2018-12-21 09:36:31

OLAP苏宁Druid
点赞
收藏

51CTO技术栈公众号