C++的未来在哪

转自知乎(忘了贴链接了,原作者大佬看见私戳一下)

服务器端开发:会不断被蚕食。游戏开发:危机并存、潜力巨大。嵌入式开发:依旧保持语言优势。

服务器端开发

服务器端要看是写什么类型的服务器,更具体说是要处理什么协议。如果是处理http、或类似http这种基于字符的协议,那脚本语言有莫大优势,将不会再用C/C++。但如果是处理基于二进制的数据,像游戏服务器、视频服务器,就另当别论了。

这里说下C/C++写服务的两个特点,一是灵活的交互机制,二是处理数据能力。在交互上,脚本语言写的服务器一般使用session机制,一个请求、一个应答,一个session就结束了,而且没有心跳包机制。写游戏服务器时,假设地图上有20个角色,这时每个角色是一个客户端,它们每次操作(移动、攻击、建造等等)都要生成一个数据包,然后交由服务器,虽然每个包几个字节,可数量大,这时再用session就出现严重性能问题。数据处理能力和C/C++指针相关,因为有指针,C/C++可以不必复制就到处引用一段数据。而要处理大量数据,光复制就要耗大量cpu,如果还要深入数据块,指针就更凸显作用了,像视频服务器。

总的来说,市面上基于字符协议的服务器是占大头,而且脚本语言服务器会不断发展,而一旦它们做到那功能了,C/C++基本就是失去那一领域,结果只能是不断被蚕食。

游戏开发

对这话题,我想应该扩展为app开发。app分为游戏和非游戏app。开发app有三种方法,一是脚本语言(react native、angular、vue,等等)、二是C/C++、三是原生(Oc等)开发。

目前app开发有这么个规律:公司一开始为尽快上市,用脚本语言先开发出app,等有了一定资金、人力后,发现脚本语言不能满足需要,然后改为原生开发。脚本语言写不出一个100%性能app,这是结构性矛盾,无法调合。另外这条规律只适合非游戏app,对游戏app,至少目前脚本语言是无解。对原生语言,一个问题是不能跨平台,而需要的逻辑一旦复杂后,如果iOS、Android两个平台依旧用原生语言实现,那两边都须要编程能力很强开发人员。也正是这原因,一旦到了复杂逻辑,往往想到的是写个C/C++库,然后让原生去调用。游戏是个把“复杂逻辑”常态化的例子,只用原生开发太难了,于是往往都用个第三方提供的框架,而这框架基本逃不开用C/C++。

开发非游戏app很少用C/C++,这是事实,这是C/C++“危”的一面,但由于C/C++技术特点,又存在“机”。可以去想像,一个SDK如果实现了以下功能会是怎样?1)同时支持游戏、非游戏开发。2)非游戏app可方便使用游戏中的场景技术,游戏app可使用非游戏中强大的gui功能。3)跨平台,同时能跨PC(Windows、Linux、Mac os X)、移动(iOS、Andoird),甚至智能机器。4)足可媲美脚本方案的窗口布局。5)可直接融合开源社区中项目,像Webrtc、Chromium、boringssl。——C/C++可以做到以上5点,而且只有C/C++能做到。这里请不要被市面已有的C/C++框架给限制了,像Qt、cocos2d,应该拓展视野,像SDL。当然,现实是市面上没 这么个SDK,可没有不代表不会出现,于是概括为“危机并存、潜力巨大”。

嵌入式开发

我把嵌入式开发分为两种,一是有自个操作系统的,二是没有操作系统的。

有自个操作系统的设备。特点是板上有颗专门存放系统镜像的falsh,往往还会存在容量至少8M以上的cpu外内存。定制化的Andorid正严重冲击这类系统。像智能眼镜、智能手表,基本跑的全是定制化Android。用Android好处不言自明:减少app开发时间。当然市面上还是有非Andorid的嵌入式系统,典型的有linux(uClinux)系,像一些内置了视频编、解码功能的arm cpu,在那种场合,基本只能用C/C++。

没有操作系统的设备。这类设备比较多的是接口、传感器设备,像基于蓝牙(BLE)的手环,心率计,温度、湿度传感器,电机控制器,等等。编程这类软件的语言基本还是C/C++,更准确是C,一来代码不多,二来cpu供应商提供的开发工具决定了只能用C。

终归来说,嵌入式开发中要和硬件打交道的,基本只能用C/C++,而且将来也不大会变。但离远了硬件的部分,像app,那就要看操作系统向外提供的开发app语言了,像定制化的Andorid就支持了Java。


如果想从事服务器开发,那会对开发者的C/C++使用经验有很强要求,没个4、5年以上C/C++使用经验,有的公司估计还真不敢用,毕竟一旦处理数据时出了BUG,那非常难查。嵌入式开发往往和硬件挂钩,需要有一定的硬件知识,像寄存器、中断、常见协议,同时需要较高的语言功底。对C++应届生,而且不是有硬件背景的,建议走app开发,而立即可以做的是去学习SDL,首先写个贪吃蛇、玛丽、坦克战啥的小游戏

-----------分割线--------补充

很赞同下面这段话

个人看好家用机器人市场(家用机器人中的app - 知乎专栏),一旦成形,产生的app规模不会比现在的手机app少。要引爆这个市场,结合PC、手机发展历程,至少要满足两个条件。1)硬件。普通家庭能轻松购买基本功能的硬件设备。2)软件。拥有稳定的操作系统,提供开发者易于使用、并且能充分发挥硬件功能的SDK(工具链)。

针对上面两点,目前家用机器人较为可行的有这么种解决方案。硬件:基本配置类同近期的Android手机,只是把和信号相关模块替换成激光雷达(SLAM)。软件:操作系统用定制Android,工具链包括上面说的那些个sdk,至少要有gui+webrtc+opencv+slam+tensorflow。

为什么要说这些?工具链中sdk主要编程语言是C/C++,只有C/C++才能快速将它们串连起来,为此家用机器人初始会大规模使用C/C++。即使这个市场进入稳定期,慢慢地更多用脚本语言代替,但C/C++依旧会是这市场高效语言,而且要支持新传感器这些还是逃不开用C/C++。

你可能感兴趣的:(C++/PAT/洛谷OJ)