(图片来源网络,侵删)
在深入研究这个主题的细节之前,我强烈建议您阅读我之前关于编程语言比较的文章因为我们将使用那篇文章中提供的心态来决定这些语言未来的编程语言如果你没有读过另一篇文章,我想告诉你我自己的情况我专注于性能关键型软件,因此,我通常使用C、C++和Rust等编译语言此外,对于脚本,我正在使用Python由于我没有足够的其他编程语言专业知识,如果你对其他语言感兴趣,你应该自己研究它们,或者你应该找到其他文章让我们深入研究并分析我们将考虑的语言的利弊PythonPython是一种脚本语言它非常简单,而且精简,里面有很多库可以做任何你想做的事软件包管理器pip和conda非常强大,自动虚拟环境创建系统可以很好地使用其他库的不同特定版本来运行python软件另一方面,Python是一种解释语言在python中创建的类型总是分配在堆内存中,并且有一个垃圾收集器来防止内存泄漏此外,对于多线程方法,有一个全局解释器锁(GIL)机制,这对提高计算性能非常没有帮助但是,您可以使用它来优化I/O队列因此,在考虑其他Python时,Python的性能并不那么好CC是一部杰作它非常精简和简单如果你读了我之前写的文章,它是最好的能源和性能友好的编程语言语言的优化非常好,由于这些原因,Linux大多是用C语言编写的老实说,我是这种语言的忠实粉丝,一般来说,如果一个项目有性能需求,人们更喜欢使用C例如,VideoLAN视频编码器项目主要通过使用C来实现同样,OpenGL、GIMP和其他一些著名的软件都是用C编写的然而,像其他一切一样,C也有缺点如果您想要面向对象的功能,C中没有它不是类型或内存安全,所以你需要知道你在做什么;否则,你开发的软件会造成很多问题此外,我认为C中最大的缺失部分是通用类型如果您想为不同类型的算法设计,通常您需要单独定义它们此外,没有自动编译系统或软件包管理器您需要创建制作文件,这些文件基本上是编译软件的食谱生锈Rust是一种相对较新的语言它于2010年发布该语言背后的主要理念是迫使开发人员遵循某些规则,使用生锈内存安全、类型安全、线程安全和空安全编写的软件编译器以非常好的方式编写,它为修复代码提供了很好的建议(然而,在习惯它之前,它会让你发疯)Rust中有泛型和特征——基本上是接口——这对设计非常有用的库非常有帮助能源和性能效率分数非常接近C,这对于内存安全语言来说是惊人的此外,它有一个内置的软件包和依赖管理器,称为Cargo那么缺点是什么?它看起来没有缺点,因为它的性能接近C和许多安全问题,同时通过内置的软件包管理器提供通用和特征功能当然有缺点,例如,如果Rust是一种面向对象的语言,但事实并非如此,则会进行讨论Rust中没有引入继承等对象关系机制另一方面,在一些与内存相关的操作中,Rust根据其竞争对手使用大量内存,这使其成为一个糟糕的选择,特别是对于嵌入式软件开发此外,许多库都是用C和C++编写的,因此,如果您想在C中使用这些语言中使用的库,则有一个C API,但是,由于编译器机制非常不同,有时会造成问题另一个缺点是,尽管该语言提供了内存安全保护,但仍有可能导致内存泄漏C++C++基本上是具有面向对象功能的C它可以做C可以做的任何事情,几乎可以做Rust可以做的一切——是的,它可以实现类似的所有权和像Rust这样的借阅机制,但它不是编译器强迫的——此外,C++有一个非常强大的标准库,其中包含智能指针来提供内存安全,以及容器来高效存储数据它有一个模板机制,与泛型非常相似,有助于开发高质量的软件然而,C++有太多的功能,可能会不时令人困惑如果您不知道自己在做什么,可能会导致分割错误和内存损坏有很多细节,没有内置的软件包管理器此外,由于它提供的机制和功能,与竞争对手相比,用C++编写的软件的性能略低,能耗也略高什么时候使用哪个?虽然Python的性能明显低于其他Python,但测试你的想法和算法非常简单和快速因此,如果您需要测试您的想法,并实现概念验证软件的状态,Python可能是开始的最佳选择在Python中实现您的想法后,如果您需要性能,您可以将性能关键部分转换为C,由于Python中有一个C API,因此将它们一起使用非常容易事实上,有一个名为Cython的库,用于将Python代码转换为C代码然而,它没有那么优化,所以如果你需要一个非常优化的代码,那么最好的方法是自己用C编写您可以通过用C、C++或Rust编写软件来优化软件如果您不需要C库,或者如果您想强迫您的队友遵循某些所有权借阅规则来保持系统安全,那么Rust可能是最佳选择您的软件的性能将接近C,同时使其也是内存、线程、类型和空安全此外,亚马逊和Facebook宣布,他们开始使用Rust开发公司工具,这意味着我们未来可能会看到更多的RustC和Rust都是非常优化和良好的语言但是,如果您将与大团队或开源一起管理和维护一个非常大的项目,那么面向对象的功能可能会非常有帮助如果您也需要性能,那么您的语言是C++简而言之,你应该选择你最需要的东西大多数公司对他们开发的系统都遵循非常相似的方法例如,DeepMind购买了一个名为MuJoCo的库,用于强化学习的物理模拟这种语言的界面是用Python编写的,因为他们需要将其与其他深度学习库相结合,以快速测试他们的人工智能想法然而,性能关键部分一开始是用C编写的,随着项目越来越大,他们添加了C++,以更好地维护和管理代码库同样的事情也适用于性能关键型的Python库,如NumPy、Tensorflow和PyTorch另一方面,在开源社区中,实现了一个名为RipGrep的库,这是一个文件系统中的文本搜索软件它非常有用,由于它不需要与其他库交互,所以它是用Rust编写的,其性能令人印象深刻正如您从这些例子中可以理解的那样,重要的不是对工具的狂热,而是考虑权衡,并根据您的需求选择最适合您的工具Carbon呢?如果你从未听说过Carbon,让我解释一下:Carbon是C++的后续编程语言,由谷歌启动它尚未发布,仍在实验中,但如果没有意外问题,它计划于2024年发布正因为如此,我无法将这种语言与其他语言进行比较,因为这种语言还没有完成在Quora中,我看到了很多关于碳取代C++的问题我不明白这些问题,因为在项目的GitHub页面上,它的创建者清楚地写道,Carbon不是关于取代C++这就像C++的又一个抽象层其他语言也是如此,例如,TypeScript是为JavaScript设计的,Kotlin是为Java设计的然而,他们还没有取代他们的祖先语言让我来证明一下:我们将再次看看谷歌的趋势JavaScript和TypeScript谷歌趋势比较Java和Kotlin谷歌趋势比较如您所见,人们通常仍然使用主要语言但这并不意味着后续语言没有用我听取了许多开发人员的意见,他们对后续语言的功能非常满意我希望,我们也会喜欢Carbon,老实说,根据他们在项目GitHub页面上写的内容,这听起来非常好,很有趣有很好的潜力编写更多更好的代码,其性能可能接近C++然而,什么都不会改变我们只会有另一个工具在我们的项目中使用,我们仍然会根据我们的需求做出决定因此,我建议您对新项目和新工具持开放态度,但要小心它们之间的权衡,并明智地选择哪一个
0 评论