环境
rust环境支持所有的都放在用户权限的目录,好处就是尽可能不依赖平台的限制,比如平台默认安装的版本可能比较老了。库版本的代码和编译中间文件也如此,好处就是编译速度会变快,缺点就是有些库可能因为 版本的关系,造成部分的不兼容。比如某个项目依赖A的版本从1.1(真实的支持版本)的api,但项目的依赖直接写了1.0的版本(非严格判断), 然后正好其他项目有一个1.0的版本依赖的缓存在本地,这时候编译 就会出现问题。这种方式在同类解决方案中也是相同的存在。
rust 交叉编译
列出所有支持的平台
rustup target list
安装
rustup target add x86_64-unknown-linux-musl
配置目标平台
.cargo/config(或者config.toml) 中添加或修改类似内容:
[target.x86_64-unknown-linux-musl] linker = "x86_64-linux-musl-gcc" [target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" ar = "x86_64-w64-mingw32-gcc-ar"
编译
cargo build --release --target x86_64-unknown-linux-musl
语法
表达式和语句
表达式可以有返回值,在代码块中可以返回内容。语句则不会。大部分情况下表达式加上分号就变成语句了。
语法🍬
宏
宏调用以 宏名! 的方式;宏声明使用 macro_rules! 宏名 的方式。 \#[macro_export] 注解用于导出宏. 宏的写法比较麻烦,主要是宏的语法匹配的是rust的结构。在本来已经复杂的结构中再弄个小语种。。。
‘语法
在代码块中作为标签;’a 显式生命周期,这一说明可以限定相关成员生命周期保持一致性;’static 静态生命周期,程序存活则一直存在,类似于静态变量了。
m..n
表示从m开始到n结束,可省略前后。用于分割,遍历,生成数组之类的等操作,类似于javascript
元组(tuple)
可能借鉴于erlang语言,与erlang的元组类似
结构体(struct)
rust的结构和函数是分开的,类似与C/C++的结构,但在结构体的函数中,又不相同。没有class的内容。方法通过 impl 的方式,可以给结构体添加各种自定义的函数,与C使用结构体和函数的方式相同点更多些。通过引入self 关键字来表示访问的变量指针或者this指针。Self关键字表示自身相同的结构体。结构体的变量支持访问权限。
枚举(enum)
rust极大的增强了枚举类型,相比其他语言,可以作为新的类型学习了。Option是基于enum的。
匹配(match)
可以和erlang的模式匹配 或者 elixir的模式匹配做对照学习。 if let 是match的语法糖
属性注解
用于标识各类额外的内容。以#开头, 格式: #[属性内容] ; 使用某个属性,则以 #![属性内容]的方式。 类似宏的定义和使用。通过属性注解可以实现部分编译或者运行运行,比如自动化测试代码
泛型
支持类似C++模板的操作。
trait
这个与c/c++的虚函数,java的interface 有些类似,与php的trait完全不同。 通过匹配泛型的属性(或者扩展特性),配合where条件限定,可以实现相同的函数名字,不同的函数签名?(感觉和erlang好相似)
生命期
rust对生命期的限定非常严格,这也增加了安全性。通过RC,RefCell等组合来进行突破生命期的限定,这个设定是程序在设计的时候完成的。可以认为是对同一段内存的所有权之争。
语言比较
rust语言的学习曲线在我看来,比C/C++,java等要高很多,更不用提和php,javascript,golang这种 碰到不懂的知识点一查便知道答案的语言了。就学习的费力程度而言,甚至比我学习erlang,elixir,汇编 这种还要累。主要原因是:
- 关键字更复杂,当看实际代码或者学习的时候,随时准备接受新的关键字的洗礼
- 例外情况比较多,同样一个字符,在不同的地方会有不用的意思。比如’字符,比如+字符,当碰到新的不明白的时候,各种查资料后,然后才知道原来如此。
- 注解复杂,很多时候,为了查一个注解而不得不暂停并且研究很多文档
- 一个项目中,代码组织太复杂,虽然通过注解来允许代码最高限度的重复使用,但看着是真的累阿
- 语法糖太多,太自由。。。我不知道很多的语法糖是语言自身的或者是其他库扩展的,但精通十八般武艺并不是说可以同时使用十八种武器
与erlang比较
泛型部分和erlang比较相似,支持where限定,rust主要是属性限定,erlang是值限定。match也有点相似。设计模式相比,erlang应该准球的是正确与优雅。 rust应该是追求安全与效率。虽然粗略来看,并没有指针,基本都通过生命期来控制内存。但rust中各种奇奇怪怪的写法或者用法很让人头疼。大概是 OK,OK,懵逼,原来如此,再次懵逼的感觉了。