20天学rust(一)和rust say hi

news2024/9/24 13:21:11

关注我,学习Rust不迷路

工欲善其事,必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具,然后写一个简单的小程序。

安装 Rust环境

Rust 官方有提供一个叫做 rustup 的工具,专门用于 rust 版本的管理,网址是:https://rustup.rs/,提供了很多实用的功能。 不过在这之前,我们需要先做一个配置。
因为一些特殊原因,rustup 官方源在中国大陆境内访问速度很慢,因此需要配置一个国内的源,主要有字节和中科大的,这里我们配置字节的源:https://rsproxy.cn/,从而加速访问。
接下来,这两行加入到你的 shell 配置文件(~/.zshrc 或者 ~/.bashrc)的末尾:

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"

然后 reload 或者 source 一下你的配置文件,让配置生效。

source ~/.bashrc

然后,还需要创建一个cargo的配置文件,依次执行以下命令

mkdir -p ~/.cargo
cd ~/.cargo
touch config

然后将以下几行放到你的~/.cargo/config文件中:

[source.crates-io]
replace-with = 'rsproxy'

[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"

[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"

[net]
git-fetch-with-cli = true 

然后,执行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh

然后一路回车(默认)就好,最后执行一下:

source "$HOME/.cargo/env"

打造趁手工具

rust的ide有很多:Visual Studio Code、IntelliJ IDEA、 CLion、Rust-analyzer等,社区主流的是VSCode 和 rust-analyzer组合。VSCode 的安装直接参照官方说明就好:VSCode QuickStart
打开 VSCode 后,我们按照 https://rust-analyzer.github.io/ 这里的 QuickStart 说明,在 MarketPlace 中下载并安装一下 rust-analyzer。
好了,大功告成。
最后的最后,强烈推荐大家安装一个初学者神器——chatgpt - Bito:一个代理了chatgpt的插件,学习过程中遇到的任何问题都可以问它。
在这里插入图片描述

Say Hi

接下来,我们就要进入到真正的 Rust 实战中啦。 首先要介绍下rust的项目管理工具:Cargo,Rust 社区使用 Cargo 来作为包管理和构建工具,之后的所有示例都会以 Cargo 作为我们使用的工具。
先输入以下命令,来创建我们的项目目录:

cargo new practice-01

然后,我们用 VSCode 打开这个目录,这时候 practice-01 目录应当如下:

practice-01
├── Cargo.lock # Cargo 依赖版本锁定文件
├── Cargo.toml # Cargo 主要设置文件
└── src
    └── main.rs # Rust 程序入口

然后,我们在 main.rs 中加入以下代码(一定要自己手动敲,感受下rust语法):

use std::io;

fn main() {
    println!("Hello!");

    loop {
        let mut input = String::new();
        io::stdin()
            .read_line(&mut input)
            .expect("Failed to read input!");

        if input.contains("quit") {
            break;
        }
        i_say_what_u_say(input)
    }
}

fn i_say_what_u_say(str: String) {
    print!("{}", str)
}

好,接下来我们编译下代码,看看输出

cargo build

// 输出
    Finished dev [unoptimized + debuginfo] target(s) in 0.06s

上面结果表示构建成功了,我们在文件目录下也能看到一个target文件夹,就是刚刚编译好的文件。 目录结构如下

practice-01
├── Cargo.lock # Cargo 依赖版本锁定文件
├── Cargo.toml # Cargo 主要设置文件
├── targe # 编译后文件存放的目录
└── src
    └── main.rs # Rust 程序入口

然后再运行程序:

cargo run

// 输出
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/practice-01`

好,接下来我们试试输入一些内容,看看会发生什么:

Hello!
hi
hi
hhhhh
hhhhh
who are u? 
who are u? 

完美! 这样,我们就完成了我们自己写的第一个 Rust 程序啦。
but 等等,到这里相信大家还是一脸问号, 大括号我能理解,叹号个什么鬼? 重要的冒号(:说两遍??别着急,下一章给大家答案。

关注我,学习Rust不迷路

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

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

相关文章

安全学习DAY14_JS信息打点

信息打点——前端JS框架 文章目录 信息打点——前端JS框架小节概述-思维导图JS安全概述什么是JS渗透测试?前后端差异JS安全问题流行的Js框架如何判定JS开发应用? 测试方法(JS文件的获取以及分析方法1、手工搜索分析2、半自动Burp分析插件介绍…

实数信号的傅里叶级数研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

临床球囊扩张术中的压力精密控制解决方案

摘要:目前临床用气管导管套囊压力管理中缺乏操作简便和技术成熟的套囊压力自动控制仪器,现有压力测量和控制装置操作繁琐,存在充气增压和放气减压过程不及时和压力不稳定等问题。针对这些问题本文提出了套囊压力自动控制解决方案,…

ad+硬件每日学习十个知识点(20)23.7.31 (芯片和天线间的巴伦电路)

文章目录 1.什么是前端电路?2.什么是巴伦电路?3.巴伦电路的性能参数4.LC巴伦电路5.ADS是干什么的?6.HFSS是干什么的?7.ANSYS有限元软件8.常用的电路仿真软件都有什么?9.巴伦电路的复端阻抗LC10.微带巴伦(不…

RuntimeException:Duplicate class xxx found in modules xxx and xxx依赖冲突

在开发的过程中因为多个项目混杂,依赖冲突 在Terminal 中运行gradlew -q app:dependencies查看依赖树。 然后根据依赖树中的版本进行依赖排除,排除低版本的依赖或者冲突的依赖包 implementation (org.web3j:core:4.8.7-android){exclude group:org.bou…

LED光源均匀通用积分球

积分球又称光通球,是一个中空的完整球壳。内壁涂白色漫反射涂料,并且球内壁不同点漫射均衡。采用积分球测量光通量时,能够确保测量结果的可靠性,其可降低并过滤因光线形状、发散角度以及检测部件中不同位置相应度差异引起的测量误…

企业既要用u盘又要防止u盘泄密怎么办?

企业在日常生产生活过程中,使用u盘交换数据是最企业最常用也是最便携的方式,但是在使用u盘的同时,也给企业的数据保密工作带来了很大的挑战,往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式,直…

idea数据库快速上手-库操作与表结构和数据操作

引言 对数据库的操作无非就是执行SQL语句,要想熟练操作数据库,就要熟练运用SQL语句。 一,数据库操作 展示当前服务器内的数据库 -- 展示服务器内的数据库 show databases; show schemas; 执行结果: 创建数据库: --…

Matlab对TMS320F28335编程-新建工程闪烁led灯

前言 工具:Matlab2022b Matlab对接C2000插件,下载连接如下 Embedded Coder Support Package for Texas Instruments C2000 Processors - File Exchange - MATLAB Central 在Matlab中加载此插件后,按照要求一步一步的进行就可以&#xff0c…

JVM 学习—— 类加载机制

前言 在上一篇文章中,荔枝梳理了有关Java中JVM体系架构的相关知识,其中涉及到的有关Java类加载机制的相关知识并没有过多描述。那么在这篇文章中,荔枝会详细梳理一下有关JVM的类加载机制和双亲委派模型的知识,希望能够帮助到有需要…

负数的二进制转换成十进制

对于一个k位的二进制正数,其表示成十进制的结果是: pos[i]表示:这个正数的二进制形式的第i位是1。 i从最低位(第0位)开始,一直到k-1位。有符号数中,正数的第k-1为0,负数的第k-1位为…

ASP.NET Core学习路线图

说明 1. 先决条件 - [C#](https://www.pluralsight.com/paths/csharp) - [Entity Framework](https://www.pluralsight.com/search?qentity%20framework%20core) - [ASP.NET Core](https://www.pluralsight.com/search?qasp.net%20core) - SQL基础知识 2. 通用开发技能 -…

UG\NX二次开发 属性值连接到表达式

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 利用表达式参数驱动模型形状实现参数化建模,同时将表达式关联到部件属性中,实现自动更新属性值。这将为建模过程带来更大的灵活性和可扩展性。通过将属性值连接到表达式,可以动态地…

数据规约策略

有很多概念平时一直在说,但是具体的应用场景却一直不明确,这会导致我们在实际应用过程中对应该使用的方法不够明确,在此对常用的几种数据挖掘方法使用场景进行分类和整合。 数据降维 为什么要降维 数据稀疏,维度高高维数据采用…

资讯|巴西ANATEL扩展智能电视盒认证要求,ANTATEL认证

2023年7月13日,巴西国家电信局(ANATEL)发布了2023年7月5日的第9281号法案,规定了智能电视盒符合性评估的新技术要求。 国家电信局承认有必要扩大对该设备的现有认证要求,包括在合格评定程序中对可能侵犯音像版权的功能进行审查。这一调整是为了应对越来越多地利用电视盒非法获…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁

目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四:delay(u16 i)这个函数为什么i1时,大约延时10us? 前言 已经是第二个实验了,上一个实验是点亮第一个LED灯,这个实验是LED的闪烁。 一、原理图及知识点介绍…

最细致讲解yolov8模型推理完整代码--(前处理,后处理)

研究yolov8时,一直苦寻不到Yolov8完整的模型推理代码演示,大部分人都是基于Yolo已经封装好的函数调用,这个网上教程很多,本文就不赘述这方面的内容了,接下来将细致全面的讲解yolov8模型推理代码,也就是yolo…

【复习29-30天】【我们一起60天准备考研算法面试(大全)-第三十二天 32/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

对象拷贝初识mapstruct及与lombok的配置

项目中用到对象拷贝,做一个修改历史记录保存的功能,使用Spring AOP自定义注解实现修改记录的保存,历史记录表和业务表的字段差不多,保存的时候需要用到对象拷贝。下面是一些对象拷贝的工具,前3个都用过,这次…

某银行软件测试笔试题

(时间90分钟,满分100分) 考试要求:计算机相关专业试题 一、填空题(每空1分,共10分) 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分,软件测试可…