千万别学Rust!

Rust国内安装与镜像加速全攻略 本文提供了针对国内网络环境的Rust安装与镜像加速全攻略。详细介绍了如何通过配置国内镜像源(如中科大、清华源)来加速rustup工具链和crates.io依赖包的下载,涵盖macOS与Linux系统的分步安装、环境变量设置、故障排查及安装后工具链管理,帮助开发者快速搭建高效的Rust开发环境。 阅读详情

张大胖被别人安利了一个新的语言:Rust,说是将来会替代C语言,就连Linux都要使用Rust了。

03eebc1e5e25e908eda0834f9cbec417.jpeg

作为编程语言的狂热爱好者,他自然要尝试一番。 

第一个程序自然是hello world,太简单了,都懒得去写,看看就行了:

fn main() {
   println!("hello world");
}

张大胖原来用过C语言, 当时觉得非常不爽的是它本身没有内置常用的数据结构,比如一个可以动态增长的数组,这Rust怎么样呢?

fn main() {
    let v = Vec::new(); //创建了一个数组
    v.push(4);  // 向数组添加一个元素
}

张大胖写下let就意识到,这里是将值(数组)绑定到变量v , 应该是借鉴了Lisp的模式匹配,可以预见将来会遇到这样的代码: 

let (name,age) = ("Andy", 30);

还有就是这Rust具备自动类型推断能力,这点挺不错的。 

编译吧!咦,居然失败了,错误信息是:cannot borrow `v` as mutable, as it is not declared as mutable

Rust编译器:我们把对象分为可变的和不可变的,对于不可变的,一旦创建以后,就不能再改了。那就加个关键字mut,让它变成可变的就可以了:let mut v = Vec::new()

张大胖想起了《effective java》中的一条实践:把可变性限制到最小。他嘴里咕哝着:“嗯,Rust默认是不可变,这个思路也许是对的。”

所有权

他又探索着写下一些代码:

fn main() {
    //用另外一种方式创建了一个可变Vector 
    let mut v = vec![1,2];   
    let v1 = v;
    println!(" the 1st element is {}",v[0]);    
}

编译,又失败了,WTF!到底是怎么回事?这么简单的程序也会出错?!

Rust编译器:谁让你手贱!加了一行代码:let v1 = v

张大胖:这有什么关系?在Java中,这就相当于对同一个对象,又添加了一个引用而已!

Rust编译器:那是Java,在我Rust这里,你一定要放下Java的执念!要理解一下所有权的问题。

张大胖:什么所有权?

Rust编译器:对于任何给定的对象都只有一个绑定与之对应。你用let mut v = Vec::new()就意味着 v 和这个Vector对象绑定了!现在v拥有这个对象的所有权。这一行代码 let v1 = v ,让所有权发生转移了, 现在v1是新主人了。v就不能再访问这个Vector, 我把这种情况叫做“转移语义”。

31d9338422f4f249efbe3877288a09fa.png

码农翻身注:实际上, Rust也支持Copy语义,这里不在详述。

张大胖不满地说:这不是徒增烦恼吗?那我要是把v传递给另外一个函数呢?

fn main() {
    let mut v = vec![1,2,3,4]; //创建了一个可变Vector
    print_vector(v);
    println!(" the 1st element is {}",v[0]);

}
fn print_vector(v: Vec<i32>){
    for i in v {
        println!("{}", i);
    }
}

编译还是出错!

Rust编译器:这和刚才是一个道理,v的所有权在传递给函数时,被拿走了,所以在main中不能再访问v了 ! 

借用

张大胖:太变态了,我就是想在调用print_vector以后想访问再访问变量v,该怎么办?

Rust编译器: 你可以把所有权暂时借用(&v)给print_vector,等函数返回就可以接着使用了。

fn main() {
    let mut v = vec![1,2,3,4]; //创建一个可变Vector
    print_vector(&v);
    println!(" the 1st element is {}",v[0]);    
}
fn print_vector(v: &Vec<i32>){
  ......
}

这个借用就相当于Java语言的引用了,张大胖想,print_vector函数已经“借到”所有权,应该可以为所欲为了吧,于是在函数内做了修改:

fn print_vector(v: &Vec<i32>) {
    v.push(3);
    .....
}

再次编译,再次失败!张大胖感觉到要吐血了,这Rust实在太不讲道理了。 

Rust编译器:“你这个借用想要改变原来的对象,也得加上 &mut才行!”

fn main() {
    let mut v = vec![1,2,3,4]; //创建了一个Vector
    print_vector(&mut v);
    println!(" the 1st element is {}",v[0]);    
}

fn print_vector(v: &mut Vec<i32>) {
    v.push(3);
    ......
}

总结一下:

739b0fad856d7a803278a0242b9fdc71.png

张大胖继续写代码,想继续测试这个所谓“借用”:

fn main() {
    let mut x = String::from("hello");
    let x1 = &x;
    let x2 = &mut x;    
    println!("{}", x1);    
}

编译还是出错:‘x’已经有一个不可变借用了,不能再以可变的方式来借用!

张大胖彻底懵逼了!

想我叱咤编程界多年,先后学会了C,C++, Java, Ruby ,Python, 从来就没见过这么复杂的语言,这么简单的程序,编译都通不过。

Rust编译器:道理很简单,x1是不可变引用,x2是可变引用,使用x1的"用户"可不希望访问x1时,数据已经改变了。我告诉你一个简单的口诀,以后再遇到问题就迎刃而解了:共享不可变, 可变不共享。

(用严格的描述来说是这样: 同一时刻,要么只有一个可变(&mut)借用,要么有多个不可变(&) 借用,不能同时存在可变和不可变借用。 

)

cf1288096edfed92fa2cc8d0ab08e37b.png

(都对一个对象做读操作,安全!)

6b5fe6f9b157a0aef5f2052a42d1f2d9.png

(只有小张可以写,因为他是可变的借用)

张大胖琢磨了一下,这口诀用人话来说是这样的: 当大家都在读一个东西的时候,是不能写的。当一个人在写的时候,别人是不能读的, 这不就是经典的读写锁问题吗?这Rust居然在编译器级别做了这种限制 !

Rust编译器:我之所以由这么严格的限制,就是为了内存安全,我的这套体系是不需要GC的,只要你能按照我的规矩来,内存安全就能保证。

张大胖:你啊,是为了懒省事,把本来可以让虚拟机干自动做的事情,都交给程序员来做了,这是要把我们累死啊!

Rust编译器:你到底做过系统级编程没有?系统级编程要求:

1. 非常快

2. Runtime 很小(虚拟机就是一个巨大无比的Runtime)

3. 能直接访问内存,并且内存安全。 

C和C++基本满足,但是内存不安全, 像Java, Python,Ruby 除了内存安全之外,别的都不满足,只适合应用层编程。

张大胖无语了,这家伙的目标是要替换C/C++,自己也写过不少C代码,由于内存问题,不知道搞垮过多少个程序,悬空的指针就像幽灵一样到处飘荡,无踪可循,然后在一个未知的地点,未知的时刻突然爆裂。

这个Rust,每个对象都有唯一的“主人”,然后有对读写施加了这么严格的限制,如果程序员掌握了,确实比C语言安全, 我还是接着学吧!

全文完,觉得不错的话点个赞或者在看吧!

近期爆文:

1970年以来技术的发展趋势,怪不得程序员35岁就被裁......

这个大学生写了个免费软件,全世界网民抢着给他送钱,每月10万美元

全世界流浪的程序员,用最原始的技术,每月赚17.6万美元!

开源软件的叛徒,加入了微软

Chrome背后最大的秘密:印度人拯救了Google!

这两个程序员要花100万,彻底重写世界上最复杂的软件

造福无数打工人,世界第7大网站,为什么过得如此卑微

被哈佛扫地出门,他发明了让无数程序员痛不欲生的编程语言,获得了计算机最高奖!

这两个大龄程序员,打算搞垮一个世界软件巨头!

世界上最大的盗版网站,遇到麻烦了!

这个女生写的软件,解决了无数程序员最头疼的问题!

用 Rust 实现一个替代 WebSocket 的协议 用 Rust 实现一个可以替代 WebSocket 的全双工端对端加密协议 阅读详情

相关推荐

AI Agent开发选型:为什么TypeScript比Rust更高效?

在AI应用开发中,语言选型常成为团队争论焦点。AI Agent并非算法密集型组件,而是协调外部API与状态流转的调度器,性能瓶颈主要在上游LLM和工具调用延迟,而非语言本身。因此,衡量语言优劣的关键在于生态成熟度、迭代速度和工程化效率。TypeScript凭借丰富的Agent SDK、灵活的联合类型与全栈同构能力,能极大降低业务型Agent、工具调用型Agent及智能体产品的开发门槛;同时,MCP协议与边缘运行时支持进一步巩固其基础设施红利。Rust在底层网关、向量检索等高性能场景仍有不可替代的价值,但在应

weixin_33912638的博客 282

王垠:对 Rust 语言的分析

文章目录1.变量声明语法2.变量可以重复绑定3.类型推导4.动作的“返回值”5.return 语句6.数组的可变性7.内存管理8.完 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法。由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的。任何“新语言”对我来说,不过是把早已存在的语言特性(或者毛病),挑一些出来放在一起。所以一般情况下我都不会去评论...

秋夜无霜 4625

SRT公网点对点传输及搭建SRT流媒体服务器

SRT是一种开源传输技术,它是基于UDP协议的,与RTMP不同的是,它具有高码率低延迟的传输特性,加强了在复杂不稳定网络环境中的传输可靠性,提升了不可预测的网络环境上的流传输性能。它不像NDI那样只适用于局域网传输,它更适用于公网环境下的信号传输。 S代表Secure,即安全加密的视频流,R代表Reliable,即具有从数据严重丢包中恢复的可靠性,T代表Transport,即动态适应变化的网络状况。 在音视频数据包传输的过程中,SRT会检测并适应两个传输点之间的实时网络状况,有助于补偿由于网络的拥塞而引起的

罗宇。的媒体技术工作室 1万+

实战一个项目后,谈谈 Rust 语言的优点和缺点

最近做了一个知识库的产品开发,服务器端完全用 Rust 编写的。现在项目的核心功能已经完成,我来谈谈 Rust 的初步印象。 1. Rust 的开发效率 Rust 的入门门槛稍有些高。如果有 C/C++ 的经验,说实话,我觉得也不算太高。刚开始用的时候,会发现 Rust 没完没了地提示编译错误。在这个阶段,我发现自己很多不严谨的编程习惯。 幸运的是,这个过程很快就过去了。接下来,就会享受到 Rust 语言的高效率编程的乐趣了。目前,我觉得 Rust 是一个能够高效产出高质量代码的工具,让我有些爱不释手了!

程序猿视角 4万+

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2076

AUTOSAR R20-11标准下载!

这是公众号的第2篇推文,粉丝数49 Document Search Classic Platform Adaptive Platform Foundation 文档截图 以为会在明天的发布会之后才上线,没想到官网现在就悄悄放出来了。 中国由于网络问题,下载速度比较慢或者会中断。 “阅读原文”提供多种下载方式,可以在线浏览,可以集中下载也可单个文档下载。 如有增减我也会及时在公众号里通知大家,不过我觉得不会变动了。 整理不宜,好东西要分...

Adaptive_AUTOSAR的博客 1893

rust 各种骚操作

rust 代码确实简单,但是各种操作做层出不穷,这里记录一下一些难以理解的晦涩语法。

白嫩豆腐 783

HIC测序数据生信分析——第三节,HIC数据挂载

(取决于是否运行①prune模块,若①运行,则③运行;#HIC预处理后的比对文件Unknown_BM942-001H0001_1_val_1.Unknown_BM942-001H0001_2_val_2.hicup.bam 和contig基因组序列文件genome.fa。#HIC预处理后的比对文件Unknown_BM942-001H0001_1_val_1.Unknown_BM942-001H0001_2_val_2.hicup.bam 和contig基因组序列文件genome.fa。#这个方法简单一点。

weixin_44616693的博客 3602

【Rust日报】 2019-06-01:知乎开源了Rust实现的搜索引擎 rucene

rucene 知乎开源了Rust实现的搜索引擎 rucene 据@Chaos了解,目前开源的部分只包括 lucene library 部分,搜索引擎的部分太多业务内容而且跟内部的一个分布式框架有强绑定就没开源,等后续弄好了应该还会出一篇文章,详细介绍这个项目。未来估计还会有一次代码重构,可能会带来break change的修改,想要贡献的朋友可以缓一缓。 Read more Bz...

nostrud ipsum6 1098

第二十七届华东杯数学建模A 题 跳台滑雪问题 完整思路模型及代码

考虑到滑行过程中的空气阻力和摩擦力对速度的影响,我们引入了不同姿态下运动员迎风面积和空气阻力系数的变化,利用牛顿第二定律建立加速度表达式,并通过数值模拟比较常见姿态下的终端速度。针对问题二,我们构建了二维空中飞行动力学模型,结合起跳速度、身体迎角、滑雪板倾角等因素,模拟运动员在空中飞行的轨迹与姿态变化,采用欧拉法对运动过程进行仿真,优化飞行路径和稳定性。仿真结果表明,运动员应在起跳后保持滑雪板与身体成“V”字形打开、重心略后倾的姿态,以增强升力、延长飞行距离并提高姿态得分。,并模拟出跳跃的轨迹和最终得分。

lichensun的博客 3212

STM32CubeIDE之SHT3X温湿度传感器移植HAL库

有了前面的OLED的学习,这个学习起来也很快。 分以下几步走 1.你要有个温度传感器,SHT3X这个型号的,因为我要讲这个 2.你要有个STM32开发板(我用的是STM32L431RCT) 3.顺便找台电脑下载一个STM32CubeIDE 4.简单的找一个SHT3X的驱动,我是去某宝嫖的,一般卖这个的都有,这个驱动分两个文件,是.c和.h的,我直接把这两个放在下边 读了我上一篇的人,看这个应该很熟悉吧,一样的套路,学习方法是一样的,你就照搬就行 下面是sht3x.c的原文档,里面有个CRC..

qq_47736089的博客 2316

知乎高赞:听说Rust要取代C++?

从Rust语言基础出发,关注Rust语言本身特点,使用最简程序,排除使用场景少、概念理解困难的分支内容干扰,就能很快的在最短时间内上手Rust开发,领略Rust编程之美。一些程序员非常沉迷于Rust的使用,主要是因为Rust的性能和标准的C++的性能真的是不相上下,结合来看,Rust相较于C++略胜一筹。现阶段的 Rust 在向上走, C++ 却在向下走,但C++毕竟是老牌编程语言,底蕴在那呢,Rust作为新语言,未来或许只能取代C++某个应用场景的一部分,但要想真正取代,势必要有非常漫长的一段路要走。

mukewangguanfang的博客 1万+

光电二极管探测器电流信号处理与指令输出系统

本文提出了一种基于Python的光电二极管电流信号处理系统设计方案。该系统能够实时采集、处理光电二极管输出的电流信号,并根据预设阈值输出控制指令。系统采用模块化架构,包含数据采集、信号处理、阈值检测、指令生成等核心模块。其中数据采集模块提供了模拟器实现和硬件接口框架,支持噪声模拟和脉冲信号生成。系统设计考虑了实时性、可靠性和可扩展性,适用于光强测量、光电检测等多种应用场景。

huanghm88的专栏 1180

千万别学Rust

现在v拥有这个对象的所有权。张大胖无语了,这家伙的目标是要替换C/C++,自己也写过不少C代码,由于内存问题,不知道搞垮过多少个程序,悬空的指针就像幽灵一样到处飘荡,无踪可循,然后在一个未知的地点,未知的时刻突然爆裂。Rust编译器:我之所以由这么严格的限制,就是为了内存安全,我的这套体系是不需要GC的,只要你能按照我的规矩来,内存安全就能保证。这个Rust,每个对象都有唯一的“主人”,然后有对读写施加了这么严格的限制,如果程序员掌握了,确实比C语言安全, 我还是接着学吧!

m0_74825526的博客 1280

科研问答:医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

MD Code 1512

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Rust 中的三个“写手“:print!、format!、write! 的详细区别

print!是喊话,format!是造纸,write!是写作业。我只是想在终端显示吗?→ println!我需要一个 String 变量来存这个结果吗?→ format!我需要写入文件、网络,或者实现 Display trait 吗?→ write!记住:在实现自定义打印逻辑时,你绝对不能用print!(写死到屏幕),也极其不推荐format!(浪费内存)。你只能用write!,乖乖地把内容写进 Rust 递给你的f(接收器)里。

2401_88363404的博客 1071

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Rust入门 (1.1)—— 配置环境

Rust入门 (1.1)—— 配置环境

wangxianshen_666的博客 1229

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

rust地基蓝图在哪找_rust蓝图是什么样的?,怎么

RUST腐蚀 解蓝图谁有,有的话能发给我吗?跪求解蓝图 2639843700 我的Q我有个群,你要你去看看 在就追问关于腐蚀rust的问题 怎么获取食物?怎么获取布?石头哪里来?有一个农场一样的地方有烟囱,那是什么关于腐蚀rust的问题怎么获取食物?怎么获取布?石头哪里来?有一个农场一样的地方有烟囱,那是什么地方,为什么靠近哪里会有弹珠弹来弹去的声音?在饥饿值下面的那个数值是什么意思?新人求教,请...

weixin_28725949的博客 1580

用 AI 学编程的最大误区:不是让 AI 代写代码,而是让 AI 教你理解代码

写这篇文章的时候,我翻了一下 GitHub Copilot 的使用统计:过去三个月,它提供了 43% 的代码建议,我接受了其中 27%。这 27% 里,有多少是"理解之后的选择",有多少是"图省事的复制粘贴"?我诚实地说:差不多对半分。自学出身让我对"理解"有天然的执念。因为我知道,如果我对一个概念没有彻底的理解,下一次面试官或者线上 bug 就会用它来打我脸。而 AI 恰恰是那种"让你感觉懂了但其实没懂"的工具——就像你看了十分钟教学视频觉得学会了游泳,下水之后才发现手脚不协调。

no1coder的博客 2970

rust睡觉按键没反应_睡觉时,手千万别放这个部位!否则……看完一身冷汗

来源/家庭医生(jtys1983)你永远不知道,平静的被子下,是如何的风起云涌……掀被子前,安静的小脸让人好想亲一口!(图源/网络)掀被子后,宝贝,你是在梦中练体操了吗(图源/网络)话说,成年人的睡姿也没好到哪啊!(图源/网络)当然,对健康人来说,不需要太计较自己入睡的姿势。毕竟,咱们脑子很聪明,身体也不笨,当身体觉得不舒服时,它自然就会调整姿势,消除疲劳~不过,不管你的睡姿有多妖娆,必...

weixin_26905487的博客 527

Rust 生态纯属炒作?3 年写了 10 万行代码的开发者吐槽:当初用 Rust 是被忽悠了

自 2021 年年中以来,我们基本在所有游戏上都在使用 Rust。BITGUN 最初只是作为 Godot/GDScript 项目,之后我们在 Godot 上遇到了寻路问题(性能和功能都不理想),于是我开始研究替代方案,并相继找到 gdnative 和 godot-rust。这已经不是我第一次接触或者使用 Rust,但却是在游戏开发中第一次严肃使用 Rust——在此之前只在 game-jam-y 项目中用过。从那时起,Rust 成了我唯一坚持使用的语言。

IT界那些事儿 1080

《Rust语言圣经》Rust教程笔记1:入门介绍(关于本书、进入 Rust 编程世界、避免从入门到放弃、社区和锈书)

在 Rust 中千万别这么干,因为这是地狱难度!rust在实现链表时的由于无gc特性产生的自引用问题非常复杂。

Dontla的博客 1816

人红是非多!Rust 社区冲突不断,创始人:别 Call 我了,我也救不了!

”他甚至公开了一个指向“Rust prehistory”GitHub repo 的链接,其中存放着 13 年前的 Rust 代码。可以看到,Hore 当初是想在类型参数中使用方括号的,他补充说“我个人一直觉得,类型参数就应该使用方括号,根本不需要争论。Hoare 还反对在引用中显式使用生命周期,在他看来“生命周期几乎肯定可以推断出来,所以无论具体使用哪种语法,都没必要让开发者单独编写。但很明显,Rust 最后没有顺着这个路子走。

IT界那些事儿 250

【桌面应用开发】Rust+Tauri框架项目打包操作

Tauri 提供了一个 tauricon 的命令,该命令可以输入图片路径(默认情况下为 ./app-icon.png,尺寸为 1240 x 1240 的 PNG )来创建各种平台所需的所有图标。或者如果是第一次执行tauricon此命令则会提示需要安装命令,输入y回车等待安装就行​​生成好的图标默认放在 src-tauri/icons 目录下。

linhao's 博客 5155

从Rust到Python:开源项目第一个PR实战指南

在开源社区中,跨语言协作日益普遍,Rust与Python的组合凭借高性能核心与灵活接口成为热门架构。本文从基础概念出发,解析Rust与Python混合项目的设计原理,探讨如何通过绑定层实现高效通信。通过参与这类项目,开发者不仅能提升编码能力,还能掌握GitHub协作流程。对于想提交第一个PR的新手,选择合适的开源项目、配置环境、理解代码结构是成功关键。文章结合实战经验,分享了从Rust模块改造到Python调用层对接的完整过程,并提供了常见问题避坑指南。无论你是Rust爱好者还是Python开发者,都能从中

weixin_34174105的博客 268

2023年,Rust能“干掉”JavaScript吗?

来源:AI前线作者:Josh Mo译者:核子可乐策划:冬梅如果大家已经拥有一定的 Rust Web 开发经验,应该听说过在前端 Web 开发上用 Rust(通过 WASM)还是用 JavaScript 这个充满争议性的话题。不少人旗帜鲜明表示反对,认为 Rust“不适合生产”,而且速率“比 JavaScript 还慢”。这种说法也有道理:从历史上看,因为 WASM 无法访问 DOM,所以从 Jav...

人工智能学家 763
上一篇: 未来三年,AI将编写大部分软件,程序员将变成代码审核者!
下一篇: 全世界两万多Linux内核贡献者,出现了一个杀人犯
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值