Rust学习笔记001:HELLOW WORLD + Cargo

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.hqwc.cn/news/312774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动学习—设备树及设备树下的platform总线

1、什么是设备树? 设备树是一种描述硬件资源的数据结构。他通过bootloader将硬件资源传给内核,使得内核和硬件资源 描述相对独立。 2、设备树的由来 2.1 平台总线的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先…

WPF 新手指引弹窗

新手指引弹窗介绍 我们在第一次使用某个软件时,通常会有一个“新手指引”教学引导。WPF实现“新手指引”非常方便,且非常有趣。接下来我们就开始制作一个简单的”新手指引”(代码简单易懂,便于移植),引用到我们的项目中又可添加一…

认识Linux基本指令之 “touch mkdir rm”

01.touch指令 语法:touch [选项]... 文件... 功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件 常用选项: -a 或--timeatime或--timeaccess或--timeuse只更改存取时间。 -c…

node版本管理器nvm的下载和使用

介绍 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 下载和安装 在下载和安装nvm前,需要确保当前电脑没有安装node,否则则需要先把原来的node卸载了。 下载地址&#…

【JavaFX】基于JavaFX11 构建可编辑、对象存储、修改立即保存、支持条件过滤的TableView

文章目录 效果设计思路二、使用步骤1. 创建实体类2.读取本地文件数据3. 定义表格TableView总结效果 如图所示,这是一个存储application.properties内容的表格。这里的文件application.properties是从Linux服务器上获取来的。 当点击检索按钮,并输入条件匹配字符时,TableVie…

【2024最新版】neo4j安装配置

neo4j安装 写在最前面下载配置环境(还是不行?)启动neo4jpython中调用 写在最前面 之前我安装过,还写了一篇笔记 结果意外发现没有了,而且和之前安装的步骤不一样了,因此再次记录安装过程 下载 https://ne…

Plantuml之JSON数据语法介绍(二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

x-cmd pkg | bat - cat 命令的现代化替代品

目录 简介首次用户功能特点进一步阅读 简介 bat 是 cat 命令的替代品,对 cat 命令进行功能扩展,如语法高亮、自动分页等,为用户提供更友好的显示和定制选项。对于需要在终端频繁查看文本内容的用户,推荐用 bat。 首次用户 使用 …

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中,提到过很多次,浏览器作为应用程序,本身是不具备向网络中发送网络请求的能力,要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动,通过网卡将请求消息发送出去,本篇博客就来探讨一下这个…

【操作系统】虚拟存储器

5.1 虚拟存储器概述 之前介绍的各种存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。于是,出现了下面这样两种情况: (1) 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全…

CDH 6.3.2集成flink 1.18 zookeeper版本不匹配Flink-yarn启动失败

CDH 6.3.2集成flink 1.18 zookeeper版本不匹配Flink-yarn不能正常启动,而在CHD Web页面,flink日志报错提示不明确,不能定位具体错误。CM WEB启动失败错误日志如下图所示: CM查看完成错误日志 [31/Dec/2023 10:45:09 0000] 26000…

EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装

[TOC](EOS链Ubuntu环境Install Prebuilt Binaries(安装预构建的二进制文件)的安装) EOS官网:https://eos.io/ 第一步 Ubuntu安装命令: 以下有两种安装方式,可以任选其一: 本文章已经上传绑定资源,也可以用命令安装。…