C++开发的一些周边能力

发布时间 2023-09-06 16:04:09作者: 心渐渐失空

go在后端开发中逐渐替代了C/C++,为什么大家更喜欢用go之类的新语言呢?

C/C++作为上世纪的古老语言,很多地方没有针对程序员体验来考虑人性化编程。举几个例子:

1.windows、linux、macOS这三大操作系统内核,C/C++代码大项目中会调用大量的系统API,导致代码不跨平台。而go、py、java这些后来的语言则尽量提供跨平台统一的API。

2.C/C++只提供了少量基础库,大部分功能,包括网络通信等常用功能代码,都没有提供,需要调用操作系统API或者使用第三方库。

3.C/C++没有依赖管理体系,大部分时候都是自己写Makefile,而go则只需要在代码里写了import,编译时就会自动下载依赖库并完成编译和链接。

4.代码格式、静态语法检查、代码文档、单元测试等功能,go也做了集成,可怜C/C++这些老牌语言创立的时候,还没有想到要集成这些东西。

上述这些区别,虽然不是语法上的区别,但是在项目代码量越来越大之后,这些问题会让程序员越来越难维护项目代码。

当然,除了这些区别,语言语法上也有很大的区别:线程管理、内存管理等工作在C++里基本都是交给程序员的。而在go里面程序员不需要过多关心。

这并不是谁好谁不好的讨论,每一门语言都是时代的产物,存在及合理。

偶尔,也有go覆盖不到的地方,必须得让我从工具箱中掏出C++写上一段。

当C++遇到网络编程时,最好引入boost asio。它跨平台,性能也不错。

当C++遇到业务开发时,最好使用grpc,也能跨平台。和其他语言写的程序无障碍沟通。

当C++遇到跨平台开发时,在linux上,这容易得多,大部分时候只需要yum或者apt安装系统库后则可以调用。实在不行就把库从github上clone下来编译一下,再在自己的Makefile中引用。在windows上,最近我发现了vcpkg,用一条命令就可以下载指定名字的库,然后再在自己的vs工程里引用即可,实在是方便,不需要去访问每一个用到的库的github,然后慢慢研究它怎么在windows上进行编译。

vcpkg:一个跨linux、windows、macOS的依赖管理工具。让我在写C++的时候,依赖管理能力能接近go的依赖管理。