2021年,Python又获得了TIOBE年度编程语言,排名已经是第一。而Rust依然在20名以外。但依然有人认为,Rust甚至可能取代Python。不过这不重要,认清两者的优缺点,进而合适的地方使用合适的语言,这才最重要。 在这个指南中,我们将比较Rust和Python这两门语言,同时将讨论它们各自的应用场景,回顾使用Rustvs。Python的优缺点,并解释Rust为什么越来越受欢迎(甚至可能取代Python)。01Rust是什么? Rust〔1〕是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C类似,但是设计者想要在保证性能的同时提供更好的内存安全。Rust最初是由Mozilla研究院的GraydonHoare设计创造,然后在DaveHerman,BrendanEich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。 Rust拥有优秀的文档〔2〕、友好的编译器和有用的错误消息,以及顶级工具,包括集成包管理器、构建工具、支持自动完成和类型检查的智能多编辑器、自动格式化程序等等。 Rust发布于2010年。虽然和Python相比,Rust是一门年轻的语言,但是它的社区正在稳步增长。事实上,Rust已经连续五年(2016,2017,2018,2019,2020)在StackOverflow开发者调查的最受喜爱编程语言评选项目中摘取桂冠。 乍一看,Rust的静态化和强类型化可能看起来有点极端。但从长远来看,这有助于防止意外的代码行为。02Python是什么? Python〔3〕是一门旨在帮助开发人员更有效地工作和更有效地集成系统的编程语言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。如果速度是最重要的,可以使用较低级别的API调用,如CPython〔4〕。 1991年GuidovanRossum推出了Python,以其代码的可读性、无分号和花括号而著称。 除了可扩展性之外,Python还是一门解释型语言,这使得它比大多数编译型语言要慢。正如您可能期望的那样,Python拥有一个庞大的库生态系统和一个庞大的专业社区。03什么时候使用Rust Rust被应用于系统开发、操作系统、企业系统、微控制器应用、嵌入式系统、文件系统、浏览器组件、虚拟现实的仿真引擎等。 当性能很重要的时候,Rust是一种常用的语言,因为它能很好地处理大量数据。它可以处理CPU密集型的操作,如执行算法,这就是为什么Rust比Python更适合系统开发的原因。 Rust保证了内存的安全性,让你可以控制线程行为和线程之间的资源分配方式。这使你能够构建复杂的系统,也使得Rust比Python更有优势。 总而言之,你应在以下情况下使用Rust:你的项目需要高性能你正在构建复杂的系统你重视内存安全而不是简单性04什么时候使用Python Python可以用于许多应用领域,从Web开发,到数据科学和分析,到AI和机器学习,再到软件开发。 Python被广泛用于机器学习,数据科学和AI,因为它:简单且容易灵活包含大量面向数据的软件包和库有出色的工具和库生态系统支持 在以下情况下,你应该使用Python:你需要一种灵活的语言来支持Web开发,数据科学和分析以及机器学习和AI你重视可读性和简单性你需要一种对初学者友好的语言与性能相比,你更喜欢语法简单和开发速度05为什么Rust可以取代Python 考虑到Rust的迅速普及、受欢迎程度和广泛的使用案例,它几乎不可避免地会在不久的将来超越Python,以下是一些原因。性能 Rust超越Python的一个主要原因是性能。因为Rust是直接编译成机器代码的,所以在你的代码和计算机之间没有虚拟机或解释器。 与Python相比,另一个关键优势是Rust的线程和内存管理。虽然Rust不像Python那样有垃圾回收机制,但Rust中的编译器会强制检查无效的内存引用泄漏和其他危险或不规则行为。 编译语言通常比解释语言要快。但是,使Rust处于不同水平的是,它几乎与C和C一样快,而且没有额外开销。 让我们看一个用Python编写的O(logn)程序的示例,并使用迭代方法计算完成任务所需的时间:importrandomimportdatetimedefbinarysearcher(searchkey,arr):low0highlen(arr)1whilelowhigh:midint(low(highlow)2)ifsearchkeyarr〔mid〕:returnTrueifsearchkeyarr〔mid〕:highmid1elifsearchkeyarr〔mid〕:lowmid1returnFalse 输出:pythonmbinny。pyIttook8。6stosearch 现在,让我们来看一下使用迭代方法用Rust编写的定时O(logn)程序:userand::threadrng;usestd::time::Instant;usefloatingduration::TimeFormat;fnbinarysearcher(searchkey:i32,vec:mutVeci32)bool{letmutlow:usize0;letmuthigh:usizevec。len()1;letmutmid:usize0;whilelowhigh{midlow(highlow)2;ifsearchkeyvec〔mid〕{returntrue;}ifsearchkeyvec〔mid〕{highmid1;}elseifsearchkeyvec〔mid〕{lowmid1;}}returnfalse;}fnmain(){letmutrngthreadrng();letmutintvecVec::new();letmaxnum1000000;fornumin1。。maxnum{intvec。push(numasi32);}letstartInstant::now();letresultbinarysearcher(384723,mutintvec);println!(Ittook:{}tosearch,TimeFormat(start。elapsed()));} 输出cargorunFinisheddev〔unoptimizeddebuginfo〕target(s)in0。04sRunningtargetdebugalgorusty。exeIttook:4。6stosearch 在没有使用任何优化技术的情况下,Rust和Python在同一台机器上执行类似的操作分别需要4。6微秒和8。6微秒。这意味着Python花费的时间几乎是Rust的两倍。内存管理 Python和大多数现代编程语言一样,被设计成内存安全的。然而,即使没有垃圾回收。Rust在内存安全方面却让Python望尘莫及。 Rust采用了一种独特的方式来确保内存安全,其中涉及所有权系统和借用检查器(borrowchecker)。Rust的借用检查器确保引用和指针不会超过它们所指向的数据。错误检查与诊断 Python和其他语言一样,提供了错误检查和日志机制。但是在让开发者知道哪里出了什么问题的时候,Rust和Python之间有一些差异。 举一个Python变量错误的典型例子:apple15print(Theavailableapplesare:,aple) Python输出Traceback(mostrecentcalllast):Filebinny。py,line2,inmoduleprint(Theavailableapplesare:,aple)NameError:nameapleisnotdefined Rust中的类似示例:fnmain(){letapple15;println!(Theavailableapplesare:,aple);} Rust输出println!(Theavailableapplesare:,aple);help:alocalvariablewithasimilarnameexists:apple 在这里,Rust推荐了可能的变量,这些变量可能是你想输入的。Python只会抛出错误,而不会给出如何修复的建议。 再举个例子:fnmain(){letgrass13;grass1;} 此代码引发错误,因为默认情况下Rust中的变量是不可变的。除非它具有关键字mut,否则无法更改。 错误:letgrass13;firstassignmenttograsshelp:makethisbindingmutable:mutgrass 修正错误:fnmain(){letmutgrass:i3213;grass1;} 如你所见,现在它不会引发任何错误。除此之外,Rust不允许不同的数据类型相互操作,除非将它们转换为相同的类型。 因此,维护Rust代码库通常很容易。除非指定,否则Rust不允许更改。Python是允许这种性质的更改的。 与大多数编译语言相比,Rust因其速度快、内存安全有保证、超强的可靠性、一致性和用户友好性而备受青睐。在编程中,我们已经到了速度开始变得毫不费力的地步。 随着技术的发展,它变得越来越快,试图在更短的时间内做更多的事情,而不需要那么多的权衡。Rust帮助实现了这一点,同时又不妨碍开发者的工作。当技术试图推动可以实现的边界时,它也会考虑系统的安全性和可靠性,这是Rust背后的主要思想。并行运算 除了速度外,Python在并行计算方面也有局限性。 Python使用全局解释器锁(GIL),它鼓励只有一个线程同时执行,以提高单线程的性能。这是一大局限,因为它意味着你不能使用多个CPU核进行密集计算。社区 如前所述,StackOverflow的2020开发人员调查中有86的受访者将Rust称为2020年最喜欢的编程语言。 同样,2020HackerRank开发人员技能报告的受访者将Rust列为他们计划下一步学习的十大编程语言: 相比之下,2019年的调查将Rust排在列表的底部,这表明Rust开发人员社区正在迅速增长。 这些数据表明,Rust正在成为主流开发者社区的一部分。许多大公司都在使用Rust,一些开发者甚至用它来构建其他编程语言使用的库。著名的Rust用户包括Mozilla、Dropbox、Atlassian、npm和Cloudflare等等。 AmazonWebService还对Lambda,EC2和S3中的性能敏感组件采用了Rust。在2019年,AWS宣布赞助Rust项目,此后为Rust提供了AWS开发工具包。 公司正越来越多地用更高效的编程语言(如Rust)取代速度较慢的编程语言。没有其他语言能像Rust一样在简单和速度之间做出平衡。06总结 Rust已经发展成为一门易于使用的编程语言,因此它的使用率有所提高。尽管Python在机器学习数据科学社区中占有坚实的地位,但Rust在未来很可能被用作Python库更有效的后端。 Rust具有取代Python的巨大潜力。目前的趋势是,在应用程序、性能和速度方面,Rust不仅仅是一种编程语言,它还是一种思维方式。 各位看官你们觉得呢?评论区留下你的看法!