Rustlang语言逐行处理文件的基本方法
摘要:文件操作需求:将文件中的内容按行读取出来,然后对改行的数据进行处理,最后将处理后的行数据存放到新的文件中。使用RUST来处理的方法如下。首先引入需要的标准库:use std::io::prelude::*; use std::fs::File; use std::io::BufWriter; use std::io::BufReader; 然后将处理函数放到一个main函数中,这是我处...
阅读全文
高级主题
摘要:外部函数接口在Rust中,通过外部函数接口 (foreign function interface) 可以直接调用C语言库:extern crate libc; use libc::size_t; #[link(name = "snappy")] extern { fn snappy_max_compressed_length(source_length: size_t) -> size...
阅读全文
编程范式
摘要:编程范式Rust是一个多范式 (multi-paradigm) 的编译型语言。除了通常的结构化、命令式编程外, 还支持以下范式。函数式编程Rust使用闭包 (closure) 来创建匿名函数:let num = 5; let plus_num = |x: i32| x + num;其中闭包plus_num借用了它作用域中的let绑定num。如果要让闭包获得所有权, 可以使用move关键字:let ...
阅读全文
内存安全
摘要:Rust推崇安全与速度至上,它没有垃圾回收机制,却成功实现了内存安全 (memory safety)。所有权在Rust中,所有权 (ownership) 系统是零成本抽象 (zero-cost abstraction) 的一个主要例子。 对所有权的分析是在编译阶段就完成的,并不带来任何运行时成本 (run-time cost)。 默认情况下,Rust是在栈 (stack) 上分配内存,对栈上空间变...
阅读全文
程序测试
摘要:程序测试测试属性在测试函数前加上#[test]属性:#[test] fn it_works() { assert!(false); }其中assert!宏接受一个参数,如果参数为false,它会导致panic!。 运行cargo test命令,可见该测试失败。如果要反转测试失败, 可以加上#[should_panic]属性:测试模块在测试模块前加上#[cfg(test)]属性:测试目录对于...
阅读全文
模块系统
摘要:模块系统Rust有两个与模块 (module) 系统相关的独特术语:crate和module, 其中包装箱 (crate) 与其它语言中的 libary 或者 package 作用一样。 每个包装箱都有一个隐藏的根模块,在根模块下可以定义一个子模块树, 其路径采用::作为分隔符。包装箱由条目 (item) 构成,多个条目通过模块组织在一起。定义模块使用mod关键字定义我们的模块:// in src...
阅读全文
控制结构
摘要:IfIf是分支 (branch) 的一种特殊形式,也可以使用else和else if。 与C语言不同的是,逻辑条件不需要用小括号括起来,但是条件后面必须跟一个代码块。 Rust中的if是一个表达式 (expression),可以赋给一个变量:let x = 5; let y = if x == 5 { 10 } else { 15 };Rust是基于表达式的编程语言,有且仅有两种语句 (stat...
阅读全文
基本语法
摘要:变量绑定在Rust中,变量绑定 (variable bindings) 是通过let关键字声明的:let x = 5; let mut x = 5; let x: i32 = 5; let (a, b) = (3, 4);其中变量类型如i32一般都是可以省略的,因为Rust使用了类型推断 (type inference)。 Rust还通过模式匹配 (pattern matching) 对变量进行解...
阅读全文