“Rust难学”只是一个谎言

近年来Rust的存在感日渐升高,但是其陡峭的学习曲线似乎总是令人望而生畏。不过谷歌的一项内部调查表明,关于Rust的“难学”或许只是一种谣传。

Rust到底难不难学?谷歌有了Go,为何还要支持Rust?频频陷入内斗的Rust领导团队于近日彻底重组,这会为Rust发展带来哪些变化?且看下文分解。

 

1、不难学,但新手勿入

谷歌的这项调查主要针对1000多名受雇于谷歌的软件开发人员,其中约有13%的人有Rust经验,但多数人还是来自C/C++、Python、Java、Go或Dart。结果显示,Rust并不比其他编程语言更难学习。

Rust语言因其高性能以及C和C++等其他系统语言所缺乏的安全保证而受到推崇,但也经常听人抱怨Rust学习门槛高,尤其是对于所有权等陌生概念的理解往往会耗费时间。

根据调查,对于开发人员来说,掌握Rust的三大挑战是:宏、所有权和借用、异步编程。尽管如此,开发人员仍然很快掌握了这项语言。

如下图所示,约有27%的被调查者有信心在2-3周内上手Rust,超2/3的受访者表示用两个月或更短时间就能为Rust代码库做出贡献。此外,1/3的受访者利用两个月或更短的时间,使用Rust编写代码的效率就和其他语言一样高。

图源:googleblog

图源:googleblog

报告指出:“没有任何数据表明Rust相对于任何其他语言有任何生产力损失。”

值得一提的是,开发人员普遍认为Rust代码的质量很高。当问及他们是否认为Rust代码的正确性高于用其他语言编写的代码时,超过85%的受访者表现出了信心。

关于Rust的难学与否,国内外各大论坛都曾讨论过相关话题。综合来看,还是应了那句老话“难者不会,会者不难”。有人倒在了“入门阶段”,认为其语法逆天、泯灭人性,也有人如下面这位有过C++经验的网友所描述的,“学习成本不大”。

图源:知乎

图源:知乎

当然,对于编程新手或者没有其他语言经验的人来说,Rust肯定不会是首选。不过,对于有一定编程经验的开发者来说,是否可以摈弃先入为主的观念,愿意尝试接纳Rust的玩法,才是关键。毕竟,从来没有完美而全能的语言,只有适合与否的语言。

2、为何科技巨头力推Rust

根据Stack Overflow的年度开发人员调查,Rust已经连续数年坐镇全球最受欢迎编程语言Top5。不止于开发者,诸多大型科技公司对于Rust也颇为青睐。

由于其内存安全性和多线程功能等,Rust正在大公司的技术堆栈中得到广泛采用。谷歌、苹果、微软、Meta等都以某种形式采用了Rust。

  • 谷歌使用Rust为Android编程,甚至开源了全面的Rust课程
  • 苹果在其许多项目中使用 Rust,包括机器人、AR/VR 工程、云工程和视频工程
  • 微软是Rust的大力支持者,用它来减少Windows中内存安全问题的数量;
  • Meta不仅加入了 Rust 基金会,还指定Rust为官方支持的服务器端编程语言之一

问题来了:为什么这些大型科技公司在投入资源开发自己的编程语言后又转向Rust?

例如,由谷歌创建的Go在其产品中被广泛使用。同样,由苹果开发的Swift也用于为iOS,MacOS等构建应用程序。Microsoft开发的C#也在内部推动,但所有这些公司之间的共同点是,尽管他们有自己的语言,但他们还是找到了对Rust的需求。

究其根本,Rust填补了拥有大型旧代码库的公司的一个非常重要的利基市场:现代低级编程语言。每种语言都有其独一无二的个性,如果两种语言都以或多或少相同的方式行动,那么我们就不会真的需要两种不同的语言。

举个例子,Go和Rust。这两者都是流行的、现代的、广泛使用的语言,但具体来说,两者的编程方法和适用场景截然不同。资深软件开发工程师Andrew Lader描述道:

“如果你希望有更好的开发效率,或是有非常多不同的服务需要实现,或者开发团队较为庞大,Go是一个很好的选择。Go提供了一流的并发能力,不允许不安全的内存访问(Rust也是如此),也不会强迫你管理每一个细节。Go是高效且强大的,避免开发人员陷入困境,专注于简单性和统一性。

另一方面,如果你需要榨干每一滴性能,那么你应该选择Rust。与Go相比,Rust更像是C++的竞争对手。与C++同样强大,还提供了许多令人愉快的改进。Rust使开发者能够更细致地控制线程的其他行为、错误处理、变量生命周期!还有,Rust设计的目的之一是能够与C互操作。Go也可以,但为了实现这个目标需要付出很多,这并不是Go的重点。”

由此可见,Go和Rust各有所长,因为他们针对的是完全不同的使用情况,至于到底选Go还是Rust,终究还是要看哪种语言更适合你和你的团队的实际情况。

 

3、结束“抓马”大乱斗,社区治理开始新故事

不管是在开发者群体中,还是在各大科技公司里,Rust正以不容忽视之姿呈现上升之势,但今年以来,关于Rust的一些争议新闻不时出现在公众视野。

6月初,我们发布了 《果然,Rust还是分叉了!》一文,提到了Rust团队内部的混乱治理,以及一些和技术无关的激烈“政治斗争”事件。社区对Rust管理团队这种无休止的“混乱无序”状态感到担忧,认为这会损害Rust语言的声誉和发展。

种种治理弊端的暴露促使Rust团队内部也开始了整顿。不久前,他们宣布对组织结构进行重大调整。

此前,Rust项目创建了包括core、language、mod、library和cargo在内的若干团队。其中核心(core)团队主要负责监督其他Rust团队出现的问题。但时移世易,由于核心团队拥有对Rust语言动态的最高决策权,又不受其他团队监督,就导致事态走向了失序。

调整后,此前“抓马”不断的Rust核心团队被移除,临时领导者地位彻底终结。取而代之的是,Rust项目的每个顶级团队选派一名代表,共同组成Rust领导委员会(Rust Leadership Council),负责顶级治理问题。

“我们希望在成功的基础上再接再厉,在失败的基础上加以改进,最终导致更大的透明度和问责制。”Rust领导委员会如是表态。如何提高Rust领导层的透明度,偿还可能的“治理债务”才是今后工作的重点。

而Rust项目的大部分发展和维护工作,如编译器和核心工具的维护、基础设施的管理等,仍由九个顶级团队负责。这九个团队涵盖以下内容:编译器、crates.io、开发工具、基础结构、语言、启动板、库、审核和发布。

有趣的是,回溯过往,可以发现,Rust之所以会陷入治理危机与其发展历程息息相关。Rust语言最初只是Mozilla员工Graydon Hoare 在2006年创建的一个业余项目,直到在2021年2月,Rust被移交给独立的Rust基金会,这门语言才真正开始起飞。也正因为如此,Rust从诞生之初就缺乏一位标志性的技术权威的领导。

与之形成鲜明差异的是Python。Guido van Rossum不仅是Python的创始人,还被冠以“终身仁慈独裁者”(Benevolent Dictator For Life-BDFL)称号(龟叔在2018年时宣布不再出任BDFL)。对于一门语言而言,社区出现争议时拥有最终决定权的是谁,很大程度上会决定其生态发展的最终导向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/57516.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣 C++|一题多解之动态规划专题(2)

动态规划 Dynamic Programming 简写为 DP,是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理&…

【前端|Javascript第1篇】一文搞懂Javascript的基本语法

欢迎来到JavaScript的奇妙世界!作为前端开发的基石,JavaScript为网页增色不少,赋予了静态页面活力与交互性。如果你是一名前端小白,对编程一无所知,或者只是听说过JavaScript却从未涉足过,那么你来对了地方…

MPAndroidChart学习及问题处理

1.添加依赖 项目目录->app->build.gradle dependencies {implementation com.github.PhilJay:MPAndroidChart:v3.0.3 }项目目录->app->setting.gradle dependencyResolutionManagement {repositories {maven { url https://jitpack.io }} }高版本的gradle添加依…

QGraphicsView实现简易地图1『加载离线瓦片地图』

最简单粗暴的加载方式,将每一层级的所有瓦片地图全部加载 注:该方式仅能够在瓦片地图层级较低时使用,否则卡顿!!! 瓦片地图数据来源:水经注-高德地图-卫星地图 瓦片地图瓦片大小:25…

【高级程序设计语言C++】二叉搜索树

1. 二叉搜索树的概念2. 二叉搜索树的功能2.1. 二叉搜索树的简单模型2.2. 二叉搜索树的查找2.3. 二叉搜索树的插入2.4. 二叉搜索树的删除 3. 二叉搜索树的性能分析 1. 二叉搜索树的概念 二叉搜索树(Binary Search Tree,简称BST)是一种常见的二…

C# Onnx Paddle模型 OCR识别服务

效果 项目 可运行程序exe下载 Demo(完整源码)下载

03 制作Ubuntu启动盘

1 软碟通 我是用软碟通制作启动盘。安装软碟通时一定要把虚拟光驱给勾选上,其余两个可以看你心情。 2 镜像文件 我使用清华镜像网站找到的Ubuntu镜像文件。 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 请自己选择镜像…

探索 GPTCache|GPT-4 将开启多模态 AI 时代,GPTCache + Milvus 带来省钱秘籍

世界正处于数字化的浪潮中,为了更好理解和分析大量数据,人们对于人工智能(AI)解决方案的需求呈爆炸式增长。 此前,OpenAI 推出基于 GPT-3.5 模型的智能对话机器人 ChatGPT,在自然语言处理(NLP&a…

Word导出高清PDF

通过word导出pdf清晰度较高的方法_word如何导出高分辨率pdf_Perishell的博客-CSDN博客通过打印机属性设置,让word打印出比较高清的pdf_word如何导出高分辨率pdfhttps://blog.csdn.net/weixin_45390670/article/details/129228568?ops_request_misc%257B%2522reques…

卡片的点击事件通过点击进行路由传参

下面是详情页 通过 接收 <template><div class"detail"><img :src"row.imgUrl"><van-icon name"arrow-left" click"back" /></div> </template><script> export default {created() {let …

2023年第四届“华数杯”数学建模思路 - 案例:随机森林

## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff1f; 随机森林属于 集成学习 中的 Bagging&#xff08;Bootstrap AGgregation 的简称&#xff09; 方法。如果用图来表示他们之…

喜报 | 《中国AIOps现状调查报告(2023)》发布!擎创科技案例再度入选

&#xff08;本文部分内容来自《中国AIOps现状调查报告&#xff08;2023&#xff09;》&#xff0c;丝小编扣1&#xff0c;领取完整版报告&#xff09; 2023年7月18日&#xff0c;信通院Xops产业创新发展论坛于北京成功举办。大会旨在提高企业研发运营水平&#xff0c;加强XOp…

【Linux】进程间通信——管道

目录 写在前面的话 什么是进程间通信 为什么要进行进程间通信 进程间通信的本质理解 进程间通信的方式 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 什么是匿名管道 匿名管道通信的原理 pipe()的使用 匿名管道通信的特点 拓展代码 命名管道 什么是命…

问题:idea启动项目错误提示【command line is too long. shorten command line】

问题&#xff1a;idea启动项目错误提示【command line is too long. shorten command line】 参考博客 问题描述 启动参数过长&#xff0c;启动项目&#xff0c;错误提示 原因分析 出现此问题的直接原因是&#xff1a;IDEA集成开发环境运行你的“源码”的时候&#xff08…

java:解决报错非法字符: ‘\ufeff‘以及什么是BOM

背景 运行 JAVA 项目后&#xff0c;报错提示&#xff1a;非法字符: \ufeff&#xff0c;如图&#xff1a; 但是我在这个报错的文件中并没有搜到这个字符&#xff0c;那到底是什么原因 什么是BOM BOM&#xff08;Byte Order Mark&#xff09;&#xff0c;隐藏字符&#xff0c…

Pytorch深度学习-----神经网络之线性层用法

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

python与深度学习(十一):CNN和猫狗大战

目录 1. 说明2. 猫狗大战2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存2.7 模型训练结果的可视化 3. 猫狗大战的CNN模型可视化结果图4. 完整代码5. 猫狗大战的迁移学习 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;猫狗大战&#xff0c…

Go -- 测试 and 项目实战

没有后端基础&#xff0c;学起来真是费劲&#xff0c;所以打算速刷一下&#xff0c;代码跟着敲一遍&#xff0c;有个印象&#xff0c;大项目肯定也做不了了&#xff0c;先把该学的学了&#xff0c;有空就跟点单体项目&#xff0c;还有该看的书.... 目录 &#x1f34c;单元测试…

realsense-viewer 不识别 T265——Realsense SDK 在 v2.54.1 版本以后不再支持T265相机的解决办法

由于T265停产&#xff0c;Intel RealSense™ SDK 2.0 (v2.54.1) 在该版本中移除了对T265相机的支持&#xff0c;以后的版本也不会支持了。为了继续使用 T265 相机&#xff0c;最好千万不要升级 realsense 相关的 package&#xff0c;但是还有新装机的需求啊。经测试Intel RealS…

深度学习Redis(4):哨兵

前言 在 Redis&#xff08;3&#xff09;&#xff1a;主从复制 中曾提到&#xff0c;Redis主从复制的作用有数据热备、负载均衡、故障恢复等&#xff1b;但主从复制存在的一个问题是故障恢复无法自动化。本文将要介绍的哨兵&#xff0c;它基于Redis主从复制&#xff0c;主要作…