前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一起长锈:1 超好用的Rust工具链(Java与C++程序员转Rust之旅)

一起长锈:1 超好用的Rust工具链(Java与C++程序员转Rust之旅)

原创
作者头像
程序员吾真本
发布2024-04-24 15:35:58
2222
发布2024-04-24 15:35:58
举报

讲动人的故事,写懂人的代码

  • 故事梗概:
  • 在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;
  • 然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而不至被裁员,她必须领会编程如何"快速"才能有真正的意义。

女程序员赵可菲加班到深夜,正在修复老旧Java系统的nul pointer exception缺陷。

等到家后,老公、保姆和不满一岁的宝贝儿子都已经睡了。

她只能轻轻亲了下宝宝肉嘟嘟的小脸蛋儿。

赵可菲在父母的严格教育下成长,因此总是缺乏自信。

她从小就被父母催促着抓紧时间做作业,理由是“后面还有很多事情要做”。

所以,作为程序员,她养成了迅速完成任务的习惯,无论是在编写代码还是在生活和娱乐中。

她现在在公司负责一个有十多年历史的老旧Java系统。这个系统即将被淘汰,代码质量也很差。

每次上线都会出现很多bug,她不得不加班修复。

她的唯一愿望就是尽快解决这些问题,好回家陪伴她的宝宝。

有一次,赵可菲修的bug没过测试,测试人员就让她再修一下。

赵可菲看了半天,发现自己漏掉了一个异常的处理。

她说:“这个很快就能搞定。”

测试人员就问她:“赵可菲,你每次都能修得都挺快,但怎样才能一次就修好,别老返工呢?”

赵可菲轻描淡写地回答说:“那样就慢了。后面还有好多事等着我呢。”

赵可菲维护的那个Java老旧系统快要淘汰了

她的老板给她扔了个三个月的内部转岗的“救生圈”,说是如果转不出去,那就只能被裁了

赵可菲陷入了焦虑和不安。

她喜欢当前的公司文化和同事,希望能留下来继续做程序员。

但她的Java编程技能已经陈旧,内部转岗程序员不再占优势。

她得知公司可能会用Rust重写很多系统。另外,公司也提供Rust培训。

然而,她听说这门近两年大火的编程语言,入门难度有点大

她已经离30岁没差几年了,对自己能否再学习新的编程语言有点疑虑。

她对未来感到迷茫,不知道下一步该如何选择。

赵可菲听到了一个小道消息,她之前维护的那个Java老旧系统,可能会考虑用rust重写。

既然公司正在给大家上Rust培训,她想了想,编程其实还挺好玩的,于是就毫不犹豫地报名参加了培训。

在公司内部的Rust培训课上,赵可菲碰到了讲师贾克强。他是来自高性能网络服务项目组的Rust程序员。

她还碰到了她在课堂上结对编程的搭档席双嘉。他是一位C++程序员。

她还用上了AI编程助手艾极思(AiGeeCee)。这是公司最近在内部部署的大模型。程序员在编程时,可以与艾极思聊天,获得帮助。

赵可菲和席双嘉两个在学Rust的过程中,有啥不懂的就找贾克强帮忙解答,还会经常向艾极思提问。

贾克强和艾极思都是随叫随到,无微不至的帮助他们。

1.1 学习Rust的方法

贾克强提了个建议,对于那些在课堂上一起编程的伙伴们,回家后也可以一起看看Rust官网推荐的那本书:《The Rust Programming Language》。

这本书是Steve Klabnik和Carol Nichols一起写的。官网上有2023年中文版的第二版,还可以免费下载pdf版哦。

赵可菲和席双嘉已经开始看这本书了。

贾克强还说:“学Rust的最有效的办法只有三步。“

”第一步,看Rust的书。“

“第二步,把书上的例子改改,然后自己写一遍代码试试看。“

”第三步,把Rust的语言特点和你擅长的编程语言做个比较,帮助记忆。“

”如果遇到问题,先问问艾极思,如果还是不明白,我们再一起在课堂上讨论。”

1.2 如何安装最新版Rust

在课堂上,赵可菲和席双嘉俩人都在自己的电脑上访问了Rust语言的官网安装页面,按照上面的提示,他们用rustup顺利地安装了Rust。

贾克强来了一句:“rustup这个命令行工具是用来管理Rust版本和相关工具的,可以帮你在电脑上安装多个版本的Rust,切换起来也很方便。”

赵可菲接着说:“这跟Java世界的SDKMAN!好像啊。”

席双嘉叹了口气:“可惜C++世界就没有这样的工具。”

1.2.1 如何验证安装是否成功

安装妥妥的后,他俩就跑了显示rustc编译器版本的命令,来看看安装是不是成功了。

(小贴士:这个系列编程故事,所有命令都在macOS、Windows11、WSL2、Ubuntu这4个操作系统上试过,没问题的。如果同一命令在不同操作系统中有点儿不一样,我们会特别说明的哦。)

代码语言:javascript
复制
rustc --version

屏幕上跳出来rustc 1.77.2 (25ef9e3d8 2024-04-09)

他们两个又一次运行那个用来查看rustup工具版本的命令。

代码语言:javascript
复制
rustup -V

屏幕上弹出了rustup 1.27.0 (bbb9276d2 2024-03-08)

下面还多了两行字,贴心地提醒他们,这个命令其实并不是用来查看rustc编译器版本的哦。

1.3 超好用的Rust工具链

贾克强:“所谓的‘工具链’,就是我们Rust的一套安装和版本管理工具,也就是rustup。“

“这些工具就是我们编写Rust程序的好帮手。工具链里面包括了各种各样的组件,比如Rust编译器(rustc),包管理器(cargo),还有标准库,还有其他你可能需要的编译和管理Rust代码的工具和实用程序。”

“每个工具链通常都和特定的发布渠道和目标平台有关。我们Rust有三个主要的发布渠道。“

“第一个发布渠道,就是我们的Stable(稳定版)。这是我们最重要的发布渠道,每6周就会更新一次。带来的是在Nightly和Beta版中测试过的新功能和改进,给你最稳定和完善的体验。”

“第二个发布渠道,就是Beta版。这个渠道的更新是为了下一个Stable版服务的。在新特性稳定化之前,这里就是最后的测试场所。”

“第三个发布渠道,就是Nightly(每日构建版)。这个渠道里面包含了对Rust语言和工具的最新更改。新功能一般都会先在这里出现,但是可能在未来的版本中有所改变或者不稳定。”

“你的电脑可以同时安装多个版本的Rust工具链。你可以用rustup轻松地在这些版本之间切换。”

“这种灵活性让我们的开发者可以不需要更改整个开发设置,就能针对不同的Rust版本或者不同的平台(比如x86_64,ARM等)测试他们的代码。”

“每个工具链都可以根据你的需要添加额外的组件,比如交叉编译目标,Rust本身的源代码,还有其他各种实用的工具。”

1.3.1 Java工具链

赵可菲:“Java也有类似于工具链的东西。”

“比如Java开发工具包 (JDK),这就是Java程序员的主要工具,和Rust的工具链差不多。“

”它包括Java运行环境(JRE),一个编译器(javac),还有其他Java开发需要的各种工具和库。”

“还有像Apache Maven,Gradle和Ant这样的构建工具,这些和Rust的Cargo差不多。它们管理项目的依赖,自动化构建过程,还可以处理部署。”

“像SDKMAN!这样的版本管理工具也很有用,可以帮我们管理多个版本的JDK和其他与JVM相关的开发工具,让我们可以随时在不同版本之间切换。”

1.3.2 C++工具链

席双嘉:“对于编译器,C++就没有像Java或Rust那样的官方工具包,不过没关系。”

“它利用了像GCC(GNU编译器集合),Clang和MSVC(Microsoft Visual C++)这样的编译器,这些编译器包括标准库,有时候还会带点额外的工具。”

“在构建工具方面,像CMake,Make和Ninja这样的工具,它们就在这里帮你管理C++项目中的构建过程。这些工具可以处理那些构建配置复杂的大项目,还可以和各种编译器搭配使用。”

“说到包管理器,C++就没有像Rust的Cargo那样统一的包管理器。但也没关系,像Conan,vcpkg和Bazel这样的新工具,它们正在依赖关系管理和构建自动化这些领域慢慢变得流行起来。”

1.3.3 如何同时安装多个版本的Rust工具链

赵可菲:“多个版本的Rust工具链能一起装吗?那本Rust书上可没这个。我知道在Java世界里,SDKMAN!能做这个。”

贾克强:“想要装多个版本的Rust工具链,只要5步就行。”

1.3.3.1 如何列出已安装的工具链

贾克强:“第1步,我们得看看已经安装了哪些工具链。”

“如果你想一眼就看出已安装的 Rust 工具链有哪些版本,直接运行rustup toolchain list就行了。”

“然后你的屏幕上就会显示这些东西(以macOS为例):”

代码语言:javascript
复制
 jkq@mbp  ~  rustup toolchain list
stable-aarch64-apple-darwin (default)

“这就表示,我电脑里就只装了稳定版的工具链哦。”

“如果你想了解更多关于你的Rust开发环境的小秘密,像Rust工具链的版本列表,rustup的home目录在哪,或者rustc的版本号,只需运行一个简单的命令rustup show。”

“屏幕上会显示出更详尽的信息(以macOS为例):”

代码语言:javascript
复制
 jkq@mbp  ~  rustup show
Default host: aarch64-apple-darwin
rustup home:  /Users/jkq/.rustup

stable-aarch64-apple-darwin (default)
rustc 1.77.2 (25ef9e3d8 2024-04-09)

1.3.3.2 如何列出所有可供安装的Rust版本

贾克强:“第2步,我们来看看有哪些Rust版本可以安装。”

“唉,有点小遗憾,rustup工具并没有提供这个功能。不过别担心,上网搜一下‘rust versions’就能找到答案(参考图1.1)。”

图1.1 Rust版本列表
图1.1 Rust版本列表

赵可菲:“哈哈,Java工具链终于在某方面超越Rust工具链了。在Java的世界,我们只须用SDKMAN!运行一下sdk list java,就能列出所有能装的JDK版本,而且还会标出哪些是已经安装的版本哦。”

贾克强向赵可菲竖起了大拇指,表示赞同。

1.3.3.3 如何安装特定版本的Rust

贾克强:“那么,第3步,我们就来安装一下Rust的特定版本。”

“举个例子,如果我们想要安装Rust版本列表里的1.66.0这个版本,那就直接运行命令rustup toolchain install 1.66.0就行了。”

“装完以后,可以用rustup toolchain list这个命令来检查一下是否安装好了。”

“屏幕上现在显示的是1.66.0这个版本哦。”

代码语言:javascript
复制
 jkq@mbp  ~  rustup toolchain list
stable-aarch64-apple-darwin (default)
1.66.0-aarch64-apple-darwin

1.3.3.4 如何切换不同版本的Rust

赵可菲:“那个stable后面跟的(default)是啥意思呢?”

贾克强:“我来解释一下。在第4步,我们要切换rust的不同版本。“

"跟在某个Rust版本后面的‘default’的意思就是,我们现在正在用的,就是这个版本哦。”

“想换到1.66.0这个版本,运行命令rustup default 1.66.0就可以啦。”

“看,屏幕上显示default版本已经是1.66.0啦。”

代码语言:javascript
复制
 jkq@mbp  ~  rustup default 1.66.0
info: using existing install for '1.66.0-aarch64-apple-darwin'
info: default toolchain set to '1.66.0-aarch64-apple-darwin'

  1.66.0-aarch64-apple-darwin unchanged - rustc 1.66.0 (69f9c33d7 2022-12-12)

"再给rustup toolchain list跑一下,你就能看到default跑到1.66.0后面去了。"

代码语言:javascript
复制
 jkq@mbp  ~  rustup toolchain list
stable-aarch64-apple-darwin
1.66.0-aarch64-apple-darwin (default)

1.3.3.5 如何删除不需要的Rust版本

席双嘉:“如果我不想要1.66.0这个版本,怎么删掉它呢?”

贾克强:“哈哈!这就是我们的第5步,把不需要的Rust版本删掉。”

“你想删1.66.0版对吧。删之前,先看看1.66.0版是不是你现在在用的版本。”

“现在确实是。所以我们得先把Rust的当前版本切换到stable版本,再删1.66.0版。”

“否则,你要是不切换,直接把1.66.0版删了,rustup还是会记得你现在的版本是1.66.0。所以你再用Rust的时候,它还会从网上下载1.66.0版呢。”

“我现在就把当前版本切换到stable版。”

代码语言:javascript
复制
 jkq@mbp  ~  rustup default stable
info: using existing install for 'stable-aarch64-apple-darwin'
info: default toolchain set to 'stable-aarch64-apple-darwin'

  stable-aarch64-apple-darwin unchanged - rustc 1.77.2 (25ef9e3d8 2024-04-09)

"再看一下,切换成功了没?"

代码语言:javascript
复制
 jkq@mbp  ~  rustup toolchain list
stable-aarch64-apple-darwin (default)
1.66.0-aarch64-apple-darwin

“最后咱们再把1.66.0删了吧。”

代码语言:javascript
复制
 jkq@mbp  ~  rustup uninstall 1.66.0
info: uninstalling toolchain '1.66.0-aarch64-apple-darwin'
info: toolchain '1.66.0-aarch64-apple-darwin' uninstalled

“检查一下,删得怎么样了?”

代码语言:javascript
复制
 jkq@mbp  ~  rustup toolchain list
stable-aarch64-apple-darwin (default)

赵可菲:“嘿,删除成功了哦。1.66.0不见了。”

1.3.4 如何升级Rust工具链和rustup

贾克强:“Rust的版本更新嘛,简直就像快餐店的新菜一样,哗啦哗啦的。“

"Stable版本,就是大家都在用的那个,像咱们公司食堂菜谱一样,每6周就有新的一次。“

"所以啊,你要是想跟上Rust的步伐,那就得经常更新你的Rust工具链和rustup程序本身啦。"

"想要做到这一点,你得经常运行rustup update这个命令哦。“

代码语言:javascript
复制
 jkq@mbp  ~  rustup update
info: syncing channel updates for 'stable-aarch64-apple-darwin'
info: checking for self-update

  stable-aarch64-apple-darwin unchanged - rustc 1.77.2 (25ef9e3d8 2024-04-09)

info: cleaning up downloads & tmp directories

“这个命令嘛,先把所有已经安装的Rust版本给更新了,然后最后才轮到rustup工具本身更新。”

1.4 小结

  • 女程序员赵可菲负责维护一个老旧的Java系统,工作压力大,家庭生活也很忙,真是有点手忙脚乱呀。
  • Java系统老掉牙了,快要被淘汰,赵可菲现在面临着要不要转行的问题。
  • Rust编程语言可能是赵可菲的新选择,公司还提供了Rust的培训,但是Rust的入门难度有点大。
  • Rust培训课上,赵可菲遇到了讲师贾克强和搭档C++程序员席双嘉,还有个AI编程助手艾极思,真是人才济济啊。
  • 他们一起学习Rust,看看Rust的书,改改书上的例子,再比较一下其他编程语言,帮他们学习Rust。
  • Rust有一整套的工具链,包括rustup工具,这玩意儿可以帮助程序员管理Rust的版本和相关工具,真是太方便了。
  • 他们可以用rustup安装和管理多个版本的Rust工具链,想用哪个版本就用哪个,切换起来就跟玩儿一样。
  • Java和C++也有类似的工具链,不过在某些方面,比如发布渠道,Rust的工具链更胜一筹。
  • Rust、Java和C++在工具链方面的异同,这个问题值得我们深思呀。

工具链特性

Rust

Java

C++

编译器

Rust编译器(rustc)

Java开发工具包(JDK)包括Java运行环境(JRE)和编译器(javac)

无官方工具包,使用GCC(GNU编译器集合),Clang,MSVC(Microsoft Visual C++)等编译器

包管理器

包管理器(cargo)

无统一的原生包管理器,使用Apache Maven,Gradle,Ant等第三方构建工具

无统一的原生包管理器,使用Conan,vcpkg,Bazel等新第三方工具

版本管理工具

rustup,可以安装和切换多个版本的Rust

SDKMAN!,可以管理多个版本的JDK和其他与JVM相关的开发工具

无类似工具

发布渠道

有三个主要的发布渠道:Stable(稳定版),Beta版,Nightly(每日构建版)

无明确的发布渠道信息

无明确的发布渠道信息

其他

可以添加额外的组件,比如交叉编译目标,Rust本身的源代码,还有其他实用的工具

JDK包含其他Java开发需要的各种工具和库

编译器有时会带一些额外的工具

如果你想要了解Rust是如何通过超越传统赋值语句的binding,实现不变性、模式匹配和所有权设计理念的,那就关注我,继续看下去吧!

【未完待续】


如果喜欢我的文章,期待你的点赞、在看和转发。

如果不喜欢,在评论区留个言告诉我哪里不喜欢呗~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 学习Rust的方法
  • 1.2 如何安装最新版Rust
    • 1.2.1 如何验证安装是否成功
    • 1.3 超好用的Rust工具链
      • 1.3.1 Java工具链
        • 1.3.2 C++工具链
          • 1.3.3 如何同时安装多个版本的Rust工具链
            • 1.3.3.1 如何列出已安装的工具链
            • 1.3.3.2 如何列出所有可供安装的Rust版本
            • 1.3.3.3 如何安装特定版本的Rust
            • 1.3.3.4 如何切换不同版本的Rust
            • 1.3.3.5 如何删除不需要的Rust版本
          • 1.3.4 如何升级Rust工具链和rustup
          • 1.4 小结
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com