当前位置: 首页 > 科技观察

Rust口碑这么好,为什么学它的人这么少?

时间:2023-03-12 00:00:59 科技观察

纵观编程语言世界,新旧势力的交替一直暗流涌动,精彩纷呈。近两年来,Rust的表现并不亮眼。根据SlashData2021开发者报告,在过去24个月中,使用Rust编程的开发者数量增加了两倍,达到220万。以前C/C++、Java等是各大厂商常用的语言,但是现在,字节跳动、亚马逊、谷歌、苹果都在使用Rust语言,也就是说如果你学好Rust语言,你将有机会找到一份高薪工作。  不过也有人认为Rust的学习门槛高,戏称“Rust的语法有点反人类”。那么真相是什么?“人气炸鸡”Rust:高效、安全但难学  Rust最初由Mozilla员工GraydonHoare于2006年设计并发布,目前由Mozilla团队和一群开源社区成员共同开发和维护.Rust能够流行起来并非偶然。GraydonHoare曾这样描述:“Rust是一种利用过去的知识来解决未来问题的技术”。站在前人的肩膀上,Rust很大程度上解决了许多其他编程语言的痛点。  首先,Rust利用了静态语言。相对于动态语言在调试和运行时的不确定性,静态类型语言允许预先对数据及其行为进行编译器级别的检查和约束,在运行时只保留少量的类型检查,大大避免了程序减少了工作人员的麻烦,同时有利于鼓励长期可维护性。  其次,Rust解决了并发条件下的数据竞争问题,让并发变得更简单。当两个线程同时访问同一内存时会发生数据竞争,这会导致一些不可预知的行为。Rust从编译阶段就把数据竞争解决在萌芽状态,保证了线程安全。用户可以以库的形式实现各种高效、安全的并发编程模型,从而在多核时代充分发挥硬件性能。  此外,Rust还实现了更好的内存安全特性。在内存管理方面,常见的有两种方式:要么像Java、Python那样使用垃圾回收算法,要么像C++那样手动管理内存。但是,自动垃圾回收必然会影响性能,而手动内存管理可能会导致内存泄漏、指针悬停等问题。与Rust不同,它的所有权系统在编译时分析程序的内存管理,没有额外的运行时开销。这种没有垃圾收集器的内存安全机制是Rust的经典和核心设计之一。另外,作为系统级编程语言,Rust的基本理念是“零成本抽象”。这个概念让Rust拥有高级语言表达能力,而不会造成性能损失。与其他系统级编程语言如C或C++相比,Rust不需要程序员将所有时间都花在细节上,而是通过添加更高级别的编程概念来确保所使用的抽象具有很少的运行时开销,这抽象与等效的手写代码一样高效。  总的来说,在性能方面,Rust的内存利用率极高,可以应对性能要求特别高的业务;在安全性方面,Rust丰富的类型系统和所有权模型保证了内存安全和线程安全。可以有效的阻止编译过程中各种错误的产生。拥有如此表现的Rust虽然在编程语言界仍是一颗“小鲜肉”,但很快就获得了开发者的青睐。根据StackOverflow2021开发者调查报告,Rust已连续六年成为最受开发者欢迎的编程语言。  但是,“最喜欢”并不意味着“最想要”。尽管享有盛誉和知名度,但Rust的学习成本几乎是众所周知的。在很多官方调查中,很多开发者都提到需要降低学习门槛,让Rust更容易学习。在2021年Rust调查中,47.41%的受访者认为采用Rust非常具有挑战性,只有17.14%的受访者认为不是很有挑战性。来源:网络  可以说,除了一些有一定C/C++经验的开发者,使用Rust会更容易,很多人会被Rust吓倒,因为它“太难上手”。Rust与C++:开始使用Rust是否值得付出努力?我们可以从它与其他语言的比较中窥见一斑。  Rust常被认为是C++的竞争语言,但这种说法也会被一些C++支持者称为“碰瓷”。不可否认,Rust很受欢迎,也有后劲,但就目前而言,C++的霸主地位依然不可动摇。从宏观上看,C++拥有更大的社区和更广泛的用例,在实战中得到了大多数公司的认可。但另一方面,Rust在安全性方面表现更好,没有C++沉重的历史包袱,作为新生力量的潜力更大,在生态更丰富的时候可能会发挥更大的作用。  内存安全:作为系统级的编程语言,C++为了保持速度并没有走内置垃圾回收机制的路子,把内存安全问题留给了开发者。另一方面,Rust通过其所有权系统全面实施和增强其内存安全性,从根本上消除了手动内存管理的需要。  智能指针:Rust和C++语言都广泛支持指针,在这两种语言中,智能指针都是首选。Rust标准库提供了几个类似C++的智能指针,比如Box相当于C++中的std::unique_ptr;Rc相当于C++中的std::shared_ptr。框架和库:Rust和C++都有大量可用的框架和库。尽管开发时间差距很大,但Rust目前有大量库可以用于web开发、游戏开发、区块链等。C++库主要是标准库,是类和函数的集合。两种语言都有大量活跃的贡献者。  包管理和工具:Rust的官方包管理器是Cargo,根据一般反馈,它相对容易使用并且非常有竞争力。C++在包管理方面也有Conan等工具,发展也不错。两者如何使用,不同的人有不同的看法。  并发性:两种语言都对并发性是健壮的。但在线程安全方面,面对难以定位并发漏洞的数据竞争,Rust的内存安全特性更有利于防止此类问题的发生。然而,对自己的代码非常有信心的程序员可能会觉得Rust在实现多线程应用程序时限制太多。  社区支持:C++有C++标准委员会的领导,Rust有Rust基金会的支持。两种语言的社区都很活跃。但是,因为C++的发展时间要长得多,所以它的生态肯定比Rust成熟得多,受众基数也大得多。  归根结底,所有的语言都是工具,真正使用的时候,要因地制宜。作为一门优缺点非常鲜明的语言,Rust在实战中的表现如何,还需要开发者去验证。一位C++程序员的评价或许能给我们更多启发:  》《Rust虽然定位为系统级编程语言,但并没有走C++兼容C的老路,完全没有历史包袱,可以轻用,充分吸取各种编程语言的长处,扬长避短。Rust的表现力和性能不亚于C++,解决了C++最大的痛点(内存安全,线程安全),非常“这对C++程序员来说无疑是非常有吸引力的。目前,C++仍然是我的主要编程语言,但我看好Rust。它不仅实用,而且反过来会促进对C++中关键概念和问题的理解。”展望:Rust会登顶吗?  在代码江湖中,编程语言总是呈现出“人才辈出”的趋势。作为一门年轻的语言,Rust面对一群老前辈,也展现出一颗冉冉升起的新星的朝气与雄心。今年上半年,Rust语言设计团队(LangTeam)在官博上公布了Rust语言2024年的更新路线图。该路线图展示了Rust语言的未来发展方向。它的重点有三个:首先,尝试拉平陡峭的学习曲线。面对学习Rust门槛高的问题,LangTeam试图通过各种方式简化程序,让开发者可以更轻松地表达代码意图,而不必处理逻辑实现的各种细节。第二个是更容易协调Rust库的生态系统。Lang团队希望通过帮助管理功能生命周期、扩展库功能和增强互操作性,使库作者能够更好地为用户服务。三是进一步扩大Rust项目规模。为了更有效地推动Rust的发展,LangTeam希望让开发者能够清楚地了解团队存在的问题和工作状态,更清楚自己可以提供哪些帮助,让开发者能够积极参与推动Rust他们热衷的工作。  不过对于Rust的前景,还是众说纷纭。  有人说Rust可能还是做不了老语言,终究难逃昙花一现的命运;还有人说Rust可能会吞掉C++的大部分应用场景,经过漫长的发展周期登顶……  至于程序员要不要学Rust,支持和反对阵营平分秋色。  支持者给出的理由主要集中在以下几点:站在巨人的肩膀上,Rust确实解决了C++的一些问题,很好地平衡了性能和开发效率。一些企业,尤其是大型企业,已经在使用Rust或计划使用Rust。未来对Rust开发人员的需求将持续上升,可以预见薪资将是可观的。作为一门年轻的语言,Rust的领域还没有那么广阔。抓住这个机会,有望成为这个“新世界”的淘金者。  反对者认为:从职业发展的角度来说,对于萌新来说,学习Rust得不偿失。因为Rust还是一门小众语言,未来会发展成什么样,还不得而知。其他比较成熟的语言,掌握后可以满足实践中的大部分业务需求。Rust的学习门槛决定了能够钻研其语法的程序员很少会犯Rust想从其他语言根源上消除的“低级错误”;对于基础薄弱、编程思维混乱的程序员来说,学习Rust是难得的。这种矛盾让Rust有点“上上下下”。程序真的是为人服务的,而不是为机器服务的。语法简单,易于理解,减轻程序员的精神负担,应该是未来编程语言的发展方向。Rust显然不符合该要求。  回顾这些争论,我们可以发现,作为博弈中的玩家,很难预测一门语言的发展,因为没有人能看到它发展的全貌。而且,每种语言的发展也需要遵循自己的生命周期。不同阶段的评价标准不同,得出的结论自然也不同。或许就像有人说的,“我不讨厌任何编程语言,我只是讨厌我还没有掌握的语言”。对于每一个开发者来说,所有的争论、疑惑、好恶,都要在尝试、学习、实践的过程中逐步解决。地球变化演变。  参考资料:  https://zhuanlan.zhihu.com/p/342849423  https://blog.csdn.net/oSuiYing12/article/details/106844271  https://www.toutiao.com/article/7083687609608339998/  https://lang-team.rust-lang.org/roadmaps/roadmap-2024.html  https://thestack.technology/rust-language-explosive-增长挑战-锈治理/