Rust学习笔记001:HELLOW WORLD + Cargo

news2025/1/22 16:48:39

Rust介绍

Rust(中文称为“锈”)是一种由Mozilla开发的系统编程语言,它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题,如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来实现这一目标,而不是依赖于垃圾回收机制。

以下是Rust的一些关键特点和概念:

  1. 所有权系统(Ownership): Rust引入了所有权的概念,通过所有权系统,确保在任何时刻只有一个部分的代码可以访问数据,从而避免了内存泄漏和悬挂指针等问题。

  2. 借用和生命周期: Rust允许通过借用(borrowing)来访问数据,而不是直接拥有它。借用有严格的生命周期(lifetimes)概念,确保引用的有效性。

  3. 模式匹配(Pattern Matching): Rust支持强大的模式匹配语法,这使得代码更加清晰和可读,同时也提高了代码的表达力。

  4. 零成本抽象(Zero-cost Abstractions): Rust提供了高度抽象的功能,如泛型、trait等,但同时它能够在不引入运行时开销的情况下实现这些抽象。

  5. 并发安全性: Rust在语言级别提供了并发安全性,避免了数据竞争和其他并发问题。它使用所有权和借用系统来保证多线程代码的安全性。

  6. 无空指针: Rust在语言层面上消除了空指针引用问题,确保不会出现野指针和悬挂指针。

  7. 高性能: Rust的设计注重性能,可以用于开发高性能的系统级应用和底层组件。

  8. 社区支持: Rust拥有一个活跃的社区,提供丰富的文档、库和工具,帮助开发者更容易地学习和使用这门语言。

由于这些特性,Rust在一些领域取得了广泛的应用,包括系统编程、嵌入式系统、网络服务和操作系统等。它的设计理念使其成为一种强大的编程语言,适用于需要高性能和内存安全的应用场景。

Rust 特别擅长的领域

  • 高性能 Web Service
  • WebAssembly
  • 命令行工具
  • 网络编程
  • 嵌入式设备
  • 系统编程

Rust 的用户和案例

  • Google:新操作系统 Fuschia,其中 Rust 代码量大约占30%
  • Amazon:基于Linux开发的直接可以在裸机、虚机上运行容器的操作系统System76:纯Rust 开发了下一代安全操作系统 Redox
  • 蚂蚁金服:库操作系统 Occlum
  • 斯坦福和密根大学:嵌入式实时操作系统,应用于 Google 的加密产品·微软:正在使用 Rust 重写 Windows 系统中的一些低级组件。
  • 微软:WinRT/Rust 项目
  • Dropbox、Yelp、Coursera、LINE、Cloudflare、Atlassian、npm、Ceph、百度、华为、Sentry、Deno…
  • Neural-Chat-7B-v3-1 是一个基于 Mistral-7B-v0.1 调整的模型,并在Open-Orca/SlimOrca开源数据集上进行了训练。该模型在2023年9月至10月间进行了训练。它融合了直接偏好优化(DPO)算法,凸显了其先进的微调和优化能力。
    我们将使用 Rust + Wasm 技术栈来开发和部署这个模型的应用程序。不需安装复杂的 Python 包或 C++ 工具链!
    如何在你自己的设备上运行 Neural-Chat-7B-v3-1如何为 Neural-Chat-7B-v3-1 创建与 OpenAI 兼容的 API 服务 具体教程见https://zhuanlan.zhihu.com/p/665968480

编译与运行 Rust 程序

。编译: rustc main.rs
。运行:

  • Windows:. main.exe
  • Linux/mac: ./main

编译和运行是单独的两步
。运行 Rust 程序之前必须先编译,命令为: rustc 源文件名-rustcmain.rs
。编译成功后,会生成一个二进制文件
-在Windows 上还会生成一个 .pdb 文件,里面包含调试信息。Rust 是 ahead-of-time 编译的语言

  • 可以先编译程序,然后把可执行文件交给别人运行(无需安装 Rust)rustc 只适合简单的 Rust 程序…

开发工具

base

Windows

在这里插入图片描述

linux

  • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

IDE

。Visual Studio Code

  • Rust 插件
    。Clion (Intelli ldea 系列)
  • Rust 插件

在这里插入图片描述

Hello World

在这里插入图片描述

Rust 程序解剖

  • 定义函数:fn main(){没有参数,没有返回
  • main 函数很特别:它是每个 Rust 可执行程序最先运行的代码
  • 打印文本; println!("Hello, world!");
  • Rust的缩进是4个空格而不是 tab
  • println! 是一个 Rust macro (宏)。如果是函数的话,就没有!
  • “Hello World”是字符串,它是 println!的参数
  • 这行代码以;结尾

Cargo创建构建项目

介绍

  • Cargo 是 Rust 的构建系统和包管理工具- 构建代码、下载依赖的库、构建这些库。安装 Rust 的时候会安装 Cargo,使用cargo --version查看。
    在这里插入图片描述

使用 Cargo 创建项目

  • 创建项目: cargo new hello_cargo
    在这里插入图片描述

src/main.rs

  • cargo 生成的 main.rs 在 src目录下
  • 而 Cargo.toml在项目顶层下
  • 源代码都应该在 src目录下
  • 顶层目录可以放置:README、许可信息、配置文件和其它与程序源码无关的文件·如果创建项目时没有使用 cargo,也可以把项目转化为使用 cargo:把源代码文件移动到 src 下创建 Cargo.toml并填写相应的配置

构建命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见的数据类型

基本类型
类型描述
i8, i16, i32, i64, i128有符号整数
u8, u16, u32, u64, u128无符号整数
isize, usize与计算机架构相关的整数(通常用于索引和长度)
f32单精度浮点数
f64双精度浮点数
bool布尔类型(truefalse
char字符类型
复合类型
类型描述
struct结构体类型,用于创建自定义的数据结构
enum枚举类型,允许创建具有多个变体的类型
array具有固定大小的相同类型元素的数组 ,如果想让你的数据存放在 stack(栈)上而不是 heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处。但是数组没有 Vector 灵活(以后再讲)。
tuple元组类型,将多个不同或相同类型的值组合在一起
slice数组切片类型,对数组的引用表示数组的一部分
&T引用类型,对类型 T 的不可变引用
&mut T引用类型,对类型 T 的可变引用
*const T不可变指针
*mut T可变指针
fn函数类型

数组访问不能越界

  • Rust数组访问不能越界(C和C++中如果使用如果你使用 operator[] 越界访问,程序会进入未定义行为的状态,可能导致程序崩溃或产生不可预测的结果。c++的vector的 at() 成员函数,提供边界检查。)
    在这里插入图片描述

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

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

相关文章

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口)

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口) 我们常常会遇到这样一个问题,就是前端要实现的样式是一个级联菜单或者是下拉树,如图 这样的数据接口是怎么实现的呢,是什么样子的呢? 我们可以看看 …

【jdk与tomcat配置文件夹共享防火墙设置(入站出站规则)】

目录 一、jdk与tomcat配置 1.1 jdk配置 1.2 tomcat配置 二、文件夹共享 2.1 为什么需要配置文件夹共享功能 2.2 操作步骤 2.2.1 高级共享 2.2.2 普通共享 2.3 区别 三、防火墙设置(入站规则&出站规则) 3.1 入站规则跟出站规则 3.2 案例…

【低代码平台】10个开源免费Airtable 的替代方案

Airtable是一个易于使用的简单低代码平台,有助于团队协作管理复杂的数据表,并创建定制的工作流程。把它想象成一个类固醇上的云电子表格。 Airtable还简化了数据输入过程,连接和集成第三方服务和应用程序,并提供了许多数据导入/导…

第二部分 离散型随机变量

目录 求分布律里的未知数 例1 例2 根据X的分布律写Y的分布律 例3 根据(X,Y)的分布律写Z的分布律 例4 根据(X,Y)的分布律写边缘分布律 例5 X与Y相互独立时的联合分布律 例6 根据分布律求期望、方差 例7 求分布律里的未知数 例1 已知X的分布律为 X-202P0.40.3k ,试求k 解 0.40…

普中STM32-PZ6806L 使用FlyMcu串口烧录程序

简介 我的串口下载电路坏掉了, 所以研究了下如何通过USB转TTL进行程序的下载, 为后续Bootloader部分做准备;连接 我的板几乎是十年前买的, 所以电路与现有网上的资料有些差异, 所以仅供参考 USB 转 TTL线 与开发板 连接, 如图图中 ①, 需要去掉第一个…

[2024区块链开发入门指引] - 比特币运行原理

一份为小白用户准备的免费区块链基础教程 工欲善其事,必先利其器 Web3开发中,各种工具、教程、社区、语言框架.。。。 种类繁多,是否有一个包罗万象的工具专注与Web3开发和相关资讯能毕其功于一役? 参见另一篇博文👉 2024最全面…

RFC6749-OAuth2.0

前言 最近在项目中需要实现SSO(单点登录)功能,以实现一处注册,即可在任何平台之间登录的功能。我们项目中并没有直接对接第三方认证系统而是通过集成keycloak 完成一系类安全协议的对接工作。如果我们在代码级别自己完成各种安全协议的对接是一项十分大的工程。不仅要走统一的…

提取 PE 文件的各种信息

前段时间项目需要实现对 Windows PE 文件版本信息的提取,如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用,简单方便。 我们先看一下PE文件结构,PE文件由DOS首部&#xff0…

【网络面试(4)】协议栈和套接字及连接阶段的三次握手原理

1. 协议栈 一直对操作系统系统的内核协议栈理解的比较模糊,借着这一篇博客做一下简单梳理, 我觉得最直白的理解就是,内核协议栈就是操作系统中的一个网络控制软件,就是一段程序代码,它负责和网卡驱动程序交互&#xff…

【nodejs】前后端身份认证

前后端身份认证 一、web开发模式 服务器渲染,前后端分离。 不同开发模式下的身份认证: 服务端渲染推荐使用Session认证机制前后端分离推荐使用JWT认证机制 二、session认证机制 1.HTTP协议的无状态性 了解HTTP协议的无状态性是进一步学习Session认…

appium入门基础

介绍 appium支持在不同平台的UI自动化,如web,移动端,桌面端等。还支持使用java,python,js等语言编写自动化代码。主要用于自动化测试脚本,省去重复的手动操作。 Appium官网 安装 首先必须环境有Node.js用于安装Appium。 总体来…

接入Cloudflare后Nginx和Django获取用户真实IP的办法

可以用Nginx的real_ip的相关命令来实现这个需求。 01-real_ip命令集详解 real_ip命令的使用分为两个步骤: 01-1-设置从哪些代理IP获取真实IP 第1个步骤:通过set_real_ip_from命令设置从哪些代理IP请求获取真实的IP,比如下面的命令: set_real_ip_from…

2022年全球软件质量效能大会(QECon北京站2022)-核心PPT资料下载

一、峰会简介 当前,新一轮科技革命和产业变革正在重塑全球经济格局,以云计算为代表的新一代信息技术创新活跃,与实体经济深度融合,推动泛在连接、数据驱动、智能引领的数字经济新形式孕育而生。 新兴技术的出现给测试乃至整个软…

探索 Vue 异步组件的世界:解锁高效开发的秘密(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

JavaScript 基础通关

快速熟悉 JavaScript 的基础语法,比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端(浏览器)的编程语言,实现人机交互的效果。实现网页特效、表单验…

SpringBoot学习(一)

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Spring Boot 是一种基于 Spring 框架的开发模式,旨在简化 Spring 应用程序的创…

学生管理系统(vue + springboot)

学生管理系统(vuespringboot)资源-CSDN文库 项目介绍 这是一个采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 Spring boot Mybatis 开发。 项目部署 ⭐️如果你有 docker 的话,直接 docker compose up 即可启动&#…

NullByte

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-29 09:23 CST Nmap scan report for 192.168.1.1 Host is up (0.00038s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for …

使用软件解决T490笔记本57摄氏度温度墙的问题

项目场景: 提示:这里简述项目相关背景: 客户使用LenovoT490跑GQRX SDR,接入SDR在5MHz采样率下,机器卡顿。这对于10代i7CPU显然是不正常的。后续发现上网页也卡,卸载杀毒、重装系统、BIOS电源设置、系统最…

uniapp的css样式图片大小截图展示

目录 截取图片前截取图片后第一种方式&#xff1a;代码第二种方式&#xff1a;代码最后 截取图片前 截取图片后 第一种方式&#xff1a;代码 <view class"swiper-box-img"><image class"swiper-box-img-img" :src"item.file_path" mod…