如何使用大数据和分析
|
最后说点闲话,C++ 不会淘汰 C 语言。有了对象后你会发现再简朴的对象也耗费资源,而且有了对象以后,总是不由自主的去想继承这个事,一但继承实现了,你会发现继承带来的麻烦远超过你的想象。Java 的发明人 James 被问到如果可以从新设计 Java 语言的话,第一个要做什么事?他说:“去掉对象”!作为一个已婚,有两个孩子的程序猿,我感同身受。如果大家感兴趣,我可以再写一个博客,聊聊 C++ 和 C 的真实区别所在。 如果你看到这里,还什么都没记住。那就只记住一点:没人能预测未来。 如果再有人对你说 C 语言已经过时了,最好自己思考一下,能求真最好,如果不能,至少要做到存疑。 02、为什么 C 仍占据统治地位?于一种计算机行业的技术来说尤其如此。自 1972 年诞生以来,C 语言一直保持生龙活虎的状态,时至今日它仍然是我们用来搭建软件世界的基础建筑材料之一。 但有时一种技术能够长期存在,只是因为人们还没有来得及发明新的东西来取代它而已。在过去的几十年里,出现了许多其他语言 —— 其中一些明确地被设计用于挑战 C 的主导地位,有些语言试图凭借自己的人气慢慢瓦解 C 语言的统治地位。 为 C 需要被替换掉的观点争辩是简单的。编程语言研究和软件开发实践都暗示了如何比 C 更好地去做事。但历经数十年的研究和开发,C 语言的地位却依旧稳固。很少有其他语言能够在性能、裸机兼容性或通用性等方面击败它。不过,2018 年 C 是如何与那些明星编程语言竞争的呢,其中细节仍值得一看。 C vs. C ++ 当然了,C 最常被拿来与 C ++ 进行比较,正如其名称本身所暗示的那样,C++ 作为对 C 语言的扩展而被创建出来。C ++ 和 C 之间的差异可以概括为 C++ 更加广泛(褒)或更加宽泛(贬),具体取决于这个问题你是问的 C 还是 C++ 程序员。(笑) 虽然 C ++ 的语法等方面仍然是类 C 的,但它提供了许多在原生的 C 中本不可用的非常实用的功能:命名空间(namespace),模板(template),异常(exception),自动内存管理(automatic memory management)等等。需要顶级性能的项目,例如涉及数据库,机器学习系统的项目通常是用 C ++ 编写的,以便项目能尽可能地榨取以及利用到每一点性能。 此外,与 C 相比,C ++ 在持续地更加积极地扩展。即将推出的 C ++ 20 会带来更多功能供开发者享用,包括模块,协同程序,同步库,以及概念,这些使模板更易于使用。C standard 的最新版本只进行了少量更新,并侧重于保持向后兼容性。 事实上,C ++ 中的所有附加功能同样也可能成为累赘。而且是很大的累赘。您使用的 C ++ 专属功能越多,引入的复杂度就越高,对结果的修正就越困难。将自己局限于仅一个 C ++ 子集的开发人员可以避免许多开发中严重的坑和额外负担。但是有些团队想要从根儿上防范 C ++ 的过度复杂性。坚持使用 C 能迫使开发人员将自己局限于一个子集。例如,Linux 内核开发团队就直接避开了 C ++。 选 C 而不选 C++ 对您 —— 以及任何将会维护你代码的开发人员 —— 来说都是可行的,通过采用强制简约主义来避免与 C ++ 的复杂性纠缠。当然,C ++ 拥有丰富的高级功能,这是有它自己的道理的。但如果极简主义更适合当前和未来的项目 —— 以及负责项目的团队 —— 那么还是选 C 更明智一些。 C vs. Java 几十年了,Java 仍然是企业软件开发的主力军之一 —— 并且也是宽泛而言的开发的主力军之一。许多最重要的企业软件项目都是用 Java 编写的 —— 包括绝大多数 Apache Software Foundation 项目 —— 而 Java 仍然是开发企业级需求项目的可行语言。 Java 的语法从 C 和 C ++ 中借鉴了很多东西。但是,与 C 不同的是,Java 默认情况下不会编译为本机代码。相反,Java 运行时环境,JVM,JIT(实时)编译 Java 代码以在目标环境中运行。在适当的情况下,JIT 编译后的 Java 代码可以接近甚至超过 C 的性能。 Java 背后的 “一次编写,随处运行” 的理念也允许 Java 程序在目标架构上进行相对较少的调整即可运行。相比之下,虽然 C 已被移植到许多架构中,但任何给定的 C 程序仍可能需要重新量身定做才能在,打个比方,Windows 与 Linux,两种不同的 os 之间正常运行。 这种可移植性和强大性能的结合,以及庞大的软件库和框架组成的生态,使 Java 成为构建企业应用程序的首选语言。 Java 输给 C 的地方是一个 Java 从未打算竞争的领域:靠近底层结构运行,或直接与硬件打交道。C 代码被编译成机器代码,由进程直接执行。Java 被编译成字节码,这是一种随后会被 JVM 解释器转换为机器代码的中间代码。此外,尽管 Java 的自动内存管理在大多数情况下都是个优点,但 C 更适合于必须充分利用有限内存资源的情况。 也就是说,在某些方面,Java 在速度方面可以接近于 C。JVM 的 JIT 引擎在运行时根据程序行为优化例程,允许进行许多类型的优化,而这些优化是在未提前编译的 C 中无法实现的。虽然 Java 运行时自动执行内存管理,但一些较新的应用程序可以解决这个问题。例如,Apache Spark 部分地通过使用绕过 JVM 的自定义内存管理代码来优化内存中处理。 C vs. C#和.Net 在推出近二十年后,C#和.Net 框架仍然是企业软件世界的主要组成部分。有人说 C#和.Net 是微软对 Java 的回应 —— 一个托管代码编译器系统和通用运行库 ——C 和 Java 之间的许多种对比也适用于 C 和 C#或.Net 之间。
与 Java(以及某种程度上来说 Python 也是如此)一样,.Net 提供跨各种平台的可移植性和庞大的集成软件生态系统。考虑到.Net 世界中有多少面向企业的开发,这些都是不小的优势。当您使用 C#或任何其他.Net 语言开发程序时,您可以使用为.Net 运行时编写的大量工具和库。 (编辑:孝感站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

