“Rust难学”只是一个谎言

news2024/11/18 13:52:44

近年来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)。对于一门语言而言,社区出现争议时拥有最终决定权的是谁,很大程度上会决定其生态发展的最终导向。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA学习——蜂鸣器实现音乐播放器并播放两只老虎

文章目录 一、蜂鸣器简介1.1 蜂鸣器分类1.2 PWM 二、C4开发板原理图三、如何产生不同的音调四、代码实现及分析五、总结 一、蜂鸣器简介 1.1 蜂鸣器分类 蜂鸣器一般分为有源蜂鸣器和无源蜂鸣器。二者的区别在于,有源蜂鸣器内部含有振动源和功放电路,只…

【雕爷学编程】 MicroPython动手做(35)——体验小游戏3

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

计算机和汇编语言

1.用电表示数字 我们已经学习过二进制来表示数字 二进制计数采用0和1组合表示数字 0和1很适合使用开关闭合,导线上有电流是1,无电流是 我们还可以加上小灯泡,来表示数 2.二进制加法机 上述这个加法机器是接受左边和下面的输入,把…

【沁恒蓝牙mesh】CH58x系统时钟配置与计算

本文主要记录了【沁恒蓝牙mesh】CH58x系统时钟配置与计算 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥🎉 支持我&am…

侧边栏的打开与收起

侧边栏的打开与收起 <template><div class"box"><div class"sideBar" :class"showBox ? : controller-box-hide"><div class"showBnt" click"showBox!showBox"><i class"el-icon-arrow-r…

云渲染:为你的设计作品增添细节与逼真感!

在设计作品中&#xff0c;细节和逼真感是展现作品品质和吸引观众眼球的关键要素。而云渲染技术则是让我们能够以更高的水平来增添细节和逼真感的利器。让我们一起深入了解云渲染&#xff0c;探索它如何为我们的设计作品带来更出色的效果。 云渲染技术利用云计算的强大能力&…

webshell详解

Webshell详解 一、 Webshell 介绍二 、 基础常见webshell案例 一、 Webshell 介绍 概念 webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做为一种网页后门。黑客在入侵了一个网站后&#xff0c;通常会将asp或php后门文件与…

千元左右初学者性价比吉他推荐,VEAZEN费森VZ90和布鲁克S25怎么样?各方面评测对比,哪一款更出众!

在1500元左右价位里的吉他品牌来说&#xff0c;可谓群雄割据&#xff0c;根本无法判断到底是谁更出众。那么今天就用这个价位里我们觉得比较受欢迎的两款产品&#xff0c;VEAZEN费森VZ90系列和BROOK布鲁克S25系列详细对比评测&#xff0c;希望能给琴友一个很好的选择参考。 15…

批量创建可配置物料参数文件

启用可配置物料之后&#xff0c;每次创建新的物料需要通过CU41创建可配置物料&#xff0c;没找大批量创建的程序&#xff0c;所以SHDB录屏搞了一个代码。 前提&#xff1a;物料主数据初始化通过程序导入时&#xff0c;可配置物料参数文件已按照物料代码赋值。 ​效果&#xf…

同比环比使用方法

一、解释&#xff1a; 1.同比&#xff1a;本期与去年同期相比 &#xff0c;如2023年8月 比 2022年8月 2.环比&#xff1a;本期与上期相比 &#xff0c;如2023年8月 比 2023年7月 二、应用&#xff1a; 1.场景&#xff1a;统计日报、周报、月报、年报下进店客流的同比和环…

Stable Diffusion教程(6) - 图片高清放大

放大后细节 修复图片损坏 显存占用 速度 批量放大 文生图放大 好 是 高 慢 否 附加功能放大 一般 否 中 快 是 图生图放大 好 是 低 慢 是 tile模型放大 非常好 是 高 快 是 通过文生图页面的高清修复 优点&#xff1a;放大时能添加更多细节&am…

LeetCode--HOT100题(18)

目录 题目描述&#xff1a;73. 矩阵置零&#xff08;中等&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;73. 矩阵置零&#xff08;中等&#xff09; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都…

【Linux】网络基础之IP协议

目录 &#x1f338;1、基本概念&#x1f33a;2、IP协议报文结构&#x1f368;2.1、4位版本号&#x1f369;2.2、4位首部长度和16位总长度&#x1f36a;2.3、8位生存时间&#xff08;TTL&#xff09;&#x1f36b;2.4、8位协议&#x1f36c;2.5、16位首部校验和&#x1f36d;2.6…

Manim(一款强大的数学可视化动画引擎)学习历程

相逢情便深&#xff0c;恨不相逢早 第一眼看见上面这种类型的视频我就深深被它的简约清楚所折服&#xff0c;我觉得它完全符合我的审美&#xff0c;我也相信只要了解过制作这种视频的软件的人都会喜欢上它。运用这种风格比较有名的是b站里的一位up主名叫3Blue1Brown&#xff0…

vue卡片轮播图

我的项目是vue3的&#xff0c;用的swiper8 <template><div class"tab-all"><div class"tab-four"><swiper:loop"true":autoplay"{disableOnInteraction:false,delay:3000}":slides-per-view"3":center…

快速上手字符串函数

文章目录 前言一、求字符串的长度strlen函数strlen函数学习使用strlen函数模拟实现strlen函数模拟实现方法1&#xff1a;计数器法strlen函数模拟实现方法2&#xff1a;指针减指针法strlen函数模拟实现方法3&#xff1a;递归方法 二、字符串的拷贝&#xff0c;拼接和比较strcpy函…

某科技公司提前批测试岗

文章目录 题目 今天给大家带来一家提前批测试岗的真题&#xff0c;目前已经发offer 题目 1.自我介绍 2.登录页面测试用例设计 3.如何模拟多用户登录 可以使用Jmeter,loadRunner性能测试工具来模拟大量用户登录操作去观察一些参数变化 4.有使用过Jmeter,loadRunner做过性能压…

为什么 CSS 这么难学?

前言 CSS难其实就难在其内容的多变上&#xff0c;我觉得这些其实都可以通过大量的练习来解决&#xff0c;去记再多的东西不如写几个demo或者小项目来的收获大&#xff0c;当然练完项目所需要的总结是必需的&#xff01;下面我推荐整理了一些学习css相关的网站和项目&#xff0…

谁会拒绝一篇关于【python装饰器】的友情分享呢~

一、什么是装饰器 1. python装饰器是用于拓展原来函数功能的一种函数&#xff0c;目的是在不改变原函数的情况下&#xff0c;给函数增加功能。2. 装饰器是通过闭包实现&#xff0c;所以讲装饰器首先得知道什么是闭包。 二、什么是闭包 1、什么是闭包 1. 一个定义在函数内部的…

【Jmeter】配置不同业务请求比例,应对综合场景压测

目录 背景 Jmeter实现&#xff08;Random&#xff09; 在测试计划下&#xff0c;我们右键“添加”——配置原件——Random Variable 设置随机数的变量名称为num&#xff0c;设置取值范围0到100 右键线程组添加“逻辑控制器”——如果&#xff08;if&#xff09;控制器 当…