2021年,Python获得TIOBE年度编程语言,排名第一。而Rust仍然排在前20之外。但是仍然有人相信Rust甚至有可能取代Python。但这并不重要,最重要的是认清两者的优缺点,然后在合适的地方使用合适的语言。在本指南中,我们将比较Rust和Python这两种语言,讨论它们各自的用例,回顾使用Rust与Python的优缺点,并解释为什么Rust越来越受欢迎(甚至可能取代Python)。01什么是铁锈?Rust[1]是一种系统编程语言,侧重于安全性,尤其是并发安全性,支持函数式、命令式和泛型编程范式。Rust在语法上类似于C++,但设计者希望在保持性能的同时提供更好的内存安全性。Rust最初由MozillaResearch的GraydonHoare设计和创建,并随着时间的推移在DaveHerman、BrendanEich和许多其他人的贡献下得到完善。Rust设计人员根据他们为Servo网络浏览器开发布局引擎的经验优化了Rust语言和Rust编译器。Rust拥有出色的文档[2]、带有有用错误消息的友好编译器和一流的工具,包括集成包管理器、构建工具、具有自动完成和类型检查功能的智能多编辑器、自动格式化程序等。Rust于2010年发布。尽管与Python相比,Rust是一门年轻的语言,但其社区正在稳步增长。事实上,Rust已连续五年(2016年、2017年、2018年、2019年、2020年)在StackOverflow开发者调查中获得“最喜爱的编程语言”称号。乍一看,Rust的静态和强类型似乎有点极端。但从长远来看,这有助于防止意外的代码行为。02什么是Python?Python[3]是一种旨在帮助开发人员更高效地工作和更有效地集成系统的编程语言。Python提供高效的高级数据结构和简单有效的面向对象编程。Python语法和动态类型,以及解释语言的性质,使其成为大多数平台上用于脚本和快速应用程序开发的编程语言。随着版本的不断更新和新语言特性的加入,逐渐被用于独立的、大型的项目开发。如果速度是最重要的,则可以使用CPython[4]等较低级别的API调用。Python由GuidovanRossum于1991年引入,以其代码可读性、没有分号和花括号而著称。除了可扩展性之外,Python还是一种解释型语言,这使得它比大多数编译型语言都慢。正如您所料,Python拥有庞大的库生态系统和庞大的专业社区。03何时使用RustRust用于系统开发、操作系统、企业系统、微控制器应用程序、嵌入式系统、文件系统、浏览器组件、虚拟现实模拟引擎等。当性能很重要时,Rust是一种常用语言,因为它处理大数据量好。它可以处理像执行算法这样的CPU密集型操作,这就是为什么Rust比Python更适合系统开发。Rust保证内存安全并允许您控制线程的行为方式以及线程之间的资源分配方式。这使您能够构建复杂的系统,并使Rust比Python更具优势。总而言之,您应该在以下情况下使用Rust:您的项目需要高性能您正在构建复杂的系统您重视内存安全而不是简单性04何时使用PythonPython可用于许多应用领域,从Web开发到数据科学和分析,再到AI和机器学习,软件开发。Python广泛用于机器学习、数据科学和人工智能,因为它:简单、容易和灵活包含大量面向数据的包和库由优秀的工具和库生态系统支持你应该在以下情况下使用Python:你需要一种支持Web开发、数据科学和分析以及机器学习和AI的灵活语言您重视可读性和简单性您需要一种对初学者友好的语言您更喜欢语法的简单性和开发速度而不是性能05为什么Rust可以取代Python鉴于Rust的快速流行度、流行度和广泛的用例,它在不久的将来超越Python几乎是不可避免的,这里有一些原因。性能Rust超越Python的主要原因之一是性能。因为Rust直接编译为机器代码,所以在您的代码和计算机之间没有虚拟机或解释器。与Python相比的另一个关键优势是Rust的线程和内存管理。虽然Rust不像Python那样具有垃圾收集功能,但Rust中的编译器会强制检查无效内存引用泄漏和其他危险或不规则行为。编译型语言通常比解释型语言更快。但是,让Rust处于不同层次的是它几乎与C和C++一样快,而且没有额外的开销。让我们看一个用Python编写的O(logn)程序示例,并使用迭代方法计算完成任务所需的时间:importrandomimportdatetimedefbinary_searcher(search_key,arr):low=0high=len(arr)-1whilelow<=high:mid=int(low+(high-low)//2)ifsearch_key==arr[mid]:returnTrueifsearch_keyarr[mid]:low=mid+1returnFalse输出:>python-mbinny.pyIttook8.6μstosearch现在,让我们看一下使用迭代方法用Rust编写的定时O(logn)程序:>userand::thread_rng;usestd::time::Instant;usefloating_duration::TimeFormat;fnbinary_searcher(search_key:i32,vec:&mutVec)->bool{letmutlow:usize=0;letmuthigh:usize=vec.len()-1;letmut_mid:usize=0;whilelow<=high{_mid=low+(high-low)/2;ifsearch_key==vec[_mid]{returntrue;}ifsearch_keyvec[_mid]{low=_mid+1;}}returnfalse;}fnmain(){letmut_rng=thread_rng();letmutint_vec=Vec::new();letmax_num=1000000;fornumin1..max_num{int_vec.push(numasi32);}letstart=Instant::now();let_result=binary_searcher(384723,&mutint_vec);println!("Ittook:{}tosearch",TimeFormat(start.elapsed()));}输出:>cargorunFinisheddev[unoptimized+debuginfo]target(s)in0.04sRunningtarget\debug\algo_rusty.exeIttook:4.6μstosearch未使用使用任何优化技术,Rust和Python分别需要4.6微秒和8.6微秒才能在同一台机器上执行类似的操作。这意味着Python花费的时间几乎是Rust的两倍。内存管理与大多数现代编程语言一样,Python被设计为内存安全的。但是,即使没有垃圾收集。在内存安全方面,Rust将Python远远甩在后面。Rust采用独特的内存安全方法,涉及所有权系统和借用检查器。Rust的借用检查器确保引用和指针永远不会超过它们指向的数据。错误检查和诊断Python和其他语言提供了错误检查和日志记录机制。但是在让开发人员知道哪里出了问题方面,Rust和Python之间存在一些差异。举一个Python变量错误的典型例子:apple=15print('Theavailableapplesare:',aple)Python输出:Traceback(mostrecentcalllast):File"binny.py",line2,inprint('Theavailableapplesare:',aple)NameError:name'aple'isnotdefined在Rust中类似的例子:fnmain(){letapple=15;println!("Theavailableapplesare:",aple);}Rust输出:println!("Theavailableapplesare:",aple);^^^^help:alocalvariablewithsimilarnameexists:`apple`在这里,Rust建议您可能想要导入的变量。Python只是抛出错误,而没有给出如何修复它们的建议。另一个例子:fnmain(){letgrass=13;grass+=1;}此代码会引发错误,因为Rust中的变量默认情况下是不可变的。除非它具有关键字mut,否则无法更改它。错误:letgrass=13;|-----|||第一次赋值给`grass`|help:makethisbindingmutable:`mutgrass`修复了错误:fnmain(){letmut_grass:i32=13;_grass+=1;}如你所见,现在它没有'不要抛出任何错误。除此之外,Rust不允许不同的数据类型进行互操作,除非它们被转换为相同的类型。因此,维护Rust代码库通常很容易。除非另有说明,否则Rust不允许更改。Python允许这种性质的改变。与大多数编译语言相比,Rust因其速度、有保证的内存安全、卓越的可靠性、一致性和用户友好性而受到青睐。在编程中,我们已经达到了速度开始变得毫不费力的地步。随着技术的发展,它变得越来越快,试图在更短的时间内做更多的事情而不需要太多的权衡。Rust有助于在不妨碍开发人员的情况下实现这一目标。当技术试图突破可实现的界限时,它还会考虑系统的安全性和可靠性,这是Rust背后的主要思想。并行计算除了速度,Python在并行计算上也有局限性。Python使用全局解释器锁(GIL),鼓励只有一个线程并发执行,以提高单线程性能。这是一个很大的限制,因为这意味着您不能使用多个CPU内核进行密集计算。社区如前所述,StackOverflow的“2020年开发人员调查”中有86%的受访者将Rust列为他们2020年最喜欢的编程语言。同样,2020年HackerRank开发人员技能报告的受访者将Rust列为他们计划学习的前10种编程语言之一next:相比之下,2019年的调查将Rust排在了榜单的最后,这表明Rust开发人员社区正在快速增长。这些数字表明Rust正在成为主流开发者社区的一部分。许多大公司都在使用Rust,一些开发人员甚至用它来构建其他编程语言使用的库。著名的Rust用户包括Mozilla、Dropbox、Atlassian、npm和Cloudflare,等等。AmazonWebService还在Lambda、EC2和S3中对性能敏感的组件采用了Rust。2019年,AWS宣布赞助Rust项目,并提供了AWSSDKforRust。公司越来越多地用Rust等更高效的语言替换速度较慢的编程语言。没有其他语言能像Rust那样平衡简单性和速度。06总结Rust已经成长为一种易于使用的编程语言,因此它的使用量增加了。尽管Python在机器学习/数据科学社区中占有一席之地,但Rust很可能在未来被用作Python库的更高效的后端。Rust具有取代Python的巨大潜力。当前的趋势是Rust不仅仅是一种编程语言,它是一种涉及应用程序、性能和速度的思维方式。