C 和 C++ 的没落,不仅是因为 CPU 时钟周期的关系,而且因为关系到了开发者的时间

全球大约有400万C和C++程序员,很可能是最大的社区了,约占20%的市场份额,不亚于Java,甚至还要更多一些(C和C++一起)。它们也是当前主流语言中最古老的语言之一,应用于重要行业。C和C++在工业与其他领域如物联网/嵌入式系统/机器人的协同方面非常重要,由于协同效应,它们的应用甚至还在增长。

C++ 是一门出色的语言,出现的C++11与14标准,以及 C++17 标准,使其改进速度比以往都快的多。令人吃惊的是,其语法与其他“现代”语言越来越接近,例如Python。C语言是当前IT技术的坚实基础。C和C++的编译器、优化器、调试器以及IDE的工艺水平都是一流的。

全球代码中,20%是C和C++

但是,如果有一天你想写一段简单且可重用的代码,并且希望能够通过一个串行端口发送一串“Hello World”的字符。

问一个python开发者。他会写$ pip install pyserial,并在几分钟内,他就能给出一个解决方案。

问一个C++开发者。首先在C++中没有类似pyserial的模块。C++号称对底层非常擅长。最接近的答案可能是Boost.Asio里面的串行端口了(这是StackOverflow上得票最高的答案)。然而仅仅下载Boost就可能花费比实现python方案更多的时间,并且它要求在一个异步框架中使用串行端口,对于这个任务来说,有杀鸡用牛刀之嫌。证据是在这个简单项目中要添加数百个文件。此外C++程序员通常必须手动添加IDE的包含路径,或者在项目中设置。

相反,python的pyserial库只有少数几个文件,并且有意思的是它大部分上是用C实现的。使用C++为这个串行端口的“Hello World”创建一个可复用的组件将要花费更多的努力,并且你需要在每台电脑上都需要安装一次Boost。

我绝不是在说Boost很差,实际上它非常出色。但是显然在C和C++开发过程中,低效率仍然存在。

在追求语言的潜力以及计算资源效率方面,「不要为你不使用的东西付出(don’t pay for what you don’t use)」的格言显然是正确的;但是在开发过程方面却是完全误导的。相比较其他开发语言,C和C++的开发过程是低效的。并且 C++ 是付出代价最高的编程语言。就是说,作为开发者,我们使用C和C++时不得不花费不少宝贵的时间,却不对我们的产品产生价值,相对于用其他语言开发的同事处于竞争劣势。

因此最大的问题不是语言本身,而是开发工具以及其生态系统。首先,对于不同的编译器和不同的选项以及库文件,构建系统(build system)差异非常大。更糟糕的是,不同的构建系统不仅与操作系统相关,也与编译器相关。

幸运的是,这种情况下CMake就派上用场了。严格意义上来说,它不是一个构建系统,只是位于构建系统上层的一个工具,能够为各种不同的构建系统输出配置文件。CMake是跨操作系统项目的事实标准,而在单操作系统项目上的使用也越来越多。它很成熟并且强大,以很快的速度持续改进。新的项目如CLion IDE,直接使用CMake作为唯一支持的构建系统。这是一个很好的做法。虽然脚本的语法可以做的更好,但是平台一致性比任何其他因素重要的多。我认为C和C++社区普遍选择CMake,对每个人都将是巨大的胜利。向比特神祈求在每个项目中都能够找到CMakeLists.txt。

其次,但是更重要的是C和C++依赖管理器的缺失。Python中有pip,Java有Maven,Node有NPM,Ruby有bundler,Rust有cargo……不,apt或者类似的东西不是依赖管理器,否则这些语言不会提供自己的依赖管理器。在未来几年内C和C++最终将减少到一些非常核心的组件,就像今天的汇编一样。这将是C和C++语言走向没落的最终原因。

真正的威胁:Rust与Go

由于解释型语言和动态语言的不断进步,虚拟机与即时编译的进步在运行速度上创造了惊人的成绩,例如PyPy;支持C和C++生态系统的一些最好的技术如LLVM也促成了这些语言工具。但是,真正的威胁来自于现代编译型语言,如Rust或者Go,它们学习了计算机语言几十年的优势,又没有需要维护的代码库。它们的语法有着非常便捷的特点(简单、并发、安全…),除此之外,依赖管理也很简单。简单的deps管理能够创造指数级别的循环增长。仅仅通过声明或者引入GUI、AI、graphics、server、serialization、ORM 等你需要集成到项目的库,你可以轻松地建立Rust或者Go应用程序、库或者系统。尽管C或C ++可以预期得到更好的性能,但是使用C或C++建立一个相同的项目需要花费更长的时间。

不管语言如何改进,只要这个问题没有被解决,我心爱的C和C++语言的未来就是悲观的。而开发出这样一个生态系统,那么它们不但不会下降,甚至会接管非传统领域,如Web应用和移动应用。

但是不管怎么,我心爱的C++大爷还是C++大爷,我是不会放弃的!

java 网线串口开发_C++标准语言不断被开发,C++却走向了下坡路!相关推荐

  1. 通过JAVA与串口(RS232)通信实例

    通过JAVA与串口(RS232)通信实例 博客分类: J2SE JavaVBthread  最近了解到的需求是需要需激光打刻机进行(RS232)串口通信,  这里使用的是RXTX开源包实现的.  之前 ...

  2. 用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...

  3. java 实现串口通信

    最近做了一个与硬件相关的项目,刚开始听说用java和硬件打交道,着实下了一大跳.java也可以操作硬件? 后来接触到是用java通过串口通信控制硬件感觉使用起来还不错,也很方便. 特拿出来和大家一起分 ...

  4. JAVA硬件开发板_用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? 这些都是怎么 ...

  5. 使用Java实现串口通信(二)

    1.写在前面 距离上一篇文章<使用Java实现串口通信>已经过去快两年的时间了,在此期间收到了很多读者的反馈,很高兴可以帮助到这么多人,根据收到的反馈,我对代码逻辑进行了优化整理,并增加了 ...

  6. arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境

    Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境 更多相关问题 听力原文:W: Hi, Steve, good to see you are up and around a ...

  7. Java开发web的几种开发模式

    Java开发web的几种开发模式 Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和W ...

  8. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  9. java webstock 在线直播_在线教育直播开发的这些知识你知道吗?

    线下教育在当代已经趋于落后了,随之而来的是大批的在线教育直播系统,许多大的互联网公司也想来分一杯羹,毕竟在线教育与线下教育相比,优势还是比较明显的,那么在线教育直播开发的相关知识您都知道多少呢? 1. ...

最新文章

  1. cmd怎么实现Java你好_java环境配置以及如何在cmd窗口运行java代码
  2. linux下挂载和卸载的命令的用法:mount 、umount
  3. 第三次作业-介绍一款原型设计工具
  4. html一个层下面两个小层并奇,我是一个奇数是一个两位数,十位数字与个位数字的积是2,猜猜看我是几?——青夏教育精英家教网——...
  5. 一个文件下载的工具类
  6. 智能包装结构,提高可测性
  7. 《Deep Learning》—— 数学基础
  8. 太畅销了!AirTag送货时间延长至4-5周
  9. “宇宙最强”GPU —— NVIDIA Tesla V100 面向开发者开放试用!
  10. OSEK network management
  11. 项目实训——语音转文字功能
  12. 幼儿园案例经验迁移_幼儿园故事教学的实施策略
  13. codeforces 1567 E. Non-Decreasing Dilemma
  14. Chrome OS 与 Android 的生死爱欲
  15. java基础程序设计
  16. Access数据库常用函数大全
  17. 云计算 linux运维工程师招聘,linux云计算运维工程师前景及薪资待遇
  18. 面试完还呗、拼多多、蚂蚁金服、趣头条、京东到家之后,我知道了这些
  19. 【SQL】:保留小数点后几位(除法)
  20. 如何进行CAN总线高效测试?

热门文章

  1. GlusterFS-FUSE
  2. 工作流引擎在视频网站架构中的应用
  3. C语言实现radon变换
  4. JQuery 表单验证--jquery validation
  5. MySQL修改root密码的各种方法整理
  6. CommunityServer研习心得(转)
  7. java 分配cpu使用率_Java-JVM-CPU使用率达到100%
  8. 木兰编程语言python_国产编程语言木兰换皮Python 中科院重罚当事人
  9. 网页提示未认证授权的应用服务器,授权认证(IdentityServer4)
  10. java latlng_【LBS】移动互联网基于LBS地理位置应用java开发必备