Rust学习
Rust 静态类型语言 Rust是静态类型语言,在编译时就必须知道所有变量的类型。
动态语言是指运行期间可以改变其结构的语言:例如增加或者删除函数、对象、甚至代码。比如JavaScript、Objective-C、Ruby、Python等,而C、C++等语言则不属于动态语言。静态语言与动态语言相反,在运行时不能改变其结构。尽管静态语言可以通过复杂的手段实现动态语言的特性,但是动态语言提供了直接的方法实现语言的动态性。
动态类型语言是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,第一次赋值给变量时,在内部将数据类型记录下来。JavaScript、Ruby、Python是典型的动态类型语言。静态类型语言与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、Java都是静态类型语言的典型代表。
大部分动态语言是动态类型的,但是不是所有都是。
一、依赖管理–cargo source 默认路径 ~/.cargo/config
[source.crates-io] registry = “https://github.com/rust-lang/crates.io-index" replace-with = ‘ustc’ [source.ustc] registry = “git://mirrors.ustc.edu.cn/crates.io-index”
cargo.lock cargo.lock相当于依赖锁,除非在cargo.toml中手动指定了其他依赖版本,否则编译时依赖版本始终保持不变,即项目构建可重现
cargo update cargo update会忽略cargo.lock,并计算出所有符合 Cargo.toml 声明的最新版本。如果成功了,Cargo 会把这些版本写入 Cargo.lock 文件。
注意:(当前版本0.5.5)
Cargo 默认只会寻找大于 0.5.5 而小于 0.6.0 的版本。如果 rand crate 发布了两个新版本,0.5.6 和 0.6.0,会更新到0.5.6,如果想要使用 0.6.0 版本的 rand 或是任何 0.6.x 系列的版本,需要修改cargo.toml
cargo doc –open 以文档形式查看本地项目的所有依赖
Rust 有一个静态强类型系统,同时也有类型推断 整数类型的变量默认为i32,不能和string类型进行比较,但是可以和u32类型作比较(rust的类型推断)
二、数据类型 常量 例如:const MAX_POINTS: u32 = 100_000;
在声明它的作用域之中,常量在整个程序生命周期中都有效,这使得常量可以作为多处代码使用的全局范围的值,例如一个游戏中所有玩家可以获取的最高分或者光速。
变量 mut与隐藏 隐藏(使用let):可以改变值的类型并且复用相同的变量名,实际上创建了一个拥有新类型的新变量。隐藏了之前创建的同名变量。
mut:如果给可变变量重新赋值,但是前面不加let,只能附相同类型的值
标量类型 四种标量类型:整形、浮点型、布尔类型、字符类型
go之channel
channel channel的作用 goroutine之间安全通信
hchan mutex
goroutine之间数据传递
FIFO语义
copying into and out of hchan buffer
先从 Channel 读取数据的 Goroutine 会先接收到数据; 先向 Channel 发送数据的 Goroutine 会得到先发送数据的权利; 可以使得goroutine阻塞和唤醒
hchan sudog queues
calls into the runtime scheduler(gopark, goready)
设计原理 多线程使用共享内存传递数据
Goroutine 使用 Channel 传递数据
先入先出 目前的 Channel 收发操作均遵循了先入先出(FIFO)的设计,具体规则如下:
先从 Channel 读取数据的 Goroutine 会先接收到数据; 先向 Channel 发送数据的 Goroutine 会得到先发送数据的权利; 数据结构 Channel 在运行时的内部表示是 runtime.hchan,该结构体中包含了一个用于保护成员变量的互斥锁,从某种程度上说,Channel 是一个用于同步和通信的有锁队列
Go 语言的 Channel 在运行时使用 runtime.hchan 结构体表示。我们在 Go 语言中创建新的 Channel 时,实际上创建的都是如下所示的结构体:
linux相关指令
Ubuntu命令大全 apt-get apt-get update:更新安装列表 apt-get upgrade:升级软件 apt-get install software_name :安装软件 apt-get –purge remove software_name :卸载软件及其配置 apt-get autoremove software_name:卸载软件及其依赖的安装包
罗列已安装软件 dpkg –list
//安装.debtmpfs 7.8G 133M 7.7G 2% /tmp /dev/sda 1.8T 155G 1.6T 9% /home/gongqi/MountFiles /dev/sdb1 300M 280K 300M 1% /boot/efi /dev/loop1 32M 32M 0 100% /var/lib/snapd/snap/snapd/10707
sudo dpkg -i <package.deb>
sudo uname -m
查看Ubuntu系统的位数
界面切换 ctrl+alt+f2 //命令行界面
ctrl+alt+f7 // 图形界面
查看帮助 –help
man 手册:
9卷:man man shell 命令帮助信息 系统调用 帮助信息 库函数 帮助信息 第5卷, 文件格式: 如,man passwd 命令使用技巧