Rust语言尝鲜

2022-08-29 12:11:13 浏览数 (1)

首先,还是要吹捧一下这个编程语言。语法很严谨,Rust语言号称只要编译通过就不会崩溃(内存安全)。不像C 那种,概念混乱,连Bjarne Stroustrup都曾开玩笑说自己已经搞不懂C 了。而且一个报错信息就一万多行,然后必须是大师级的程序员,精通 Intel规范的汇编语言的那种C 程序员,才能搞清楚什么地方出了问题。个人认为Rust对于程序员的综合素质要求,是低于C 的。所以笔者决定将Rust作为首选。

下面牛刀小试一把。以函数式编程方式,计算数值积分。以定积分

为例。该积分精确值为-6.75.如果将积分区间500等分,计算结果为-6.723,相对误差为0.4%。Python以及C 编程实现点击这里:

函数式编程计算数值积分

Rust代码

代码语言:javascript复制
fn main() {
    let  steps = 500; // 区间500等分
    let a:f64 = 0.0;
    let b:f64 = 3.0;
    let dx = (b-a)/(steps as f64); //每个区间长度,注意整型变量显式转化成浮点型
    let f = | x:f64 | {
    x*x*x - 6.0*x
    }; //闭包,相当于匿名函数,这里定义的是被积函数

    let sub_area = | x:f64 | {
        f(x)*dx
    };//一个子区间的面积,还调用了被积函数

    let  res = (0..steps).map(|x| ( (x as f64) 1.0 )*dx ).map(|x| sub_area(x) ).sum::<f64>();
    println!("结果为:{}", res)

}

程序中计算res的部分相当于C 里面的管道操作符。将{0,1,2,3,4,5,...,500}通过第一个map映射成每一个子区间中点,而第二个map就是通过子区间中点计算每一个子区间的面积。最后通过sum()函数累加起来。

Python入门容易,想要提高却很难。有一些机器学习的Python代码,很难理解。在学习一些底层语言比如C ,Rust之后,再去思考,就会容易一些了。

比如下面的问题:

代码语言:javascript复制
use std::io::stdin;
fn main() {
    println!("What is 3 2? Type your answer and press enter.");
    let mut input = String::new();//字符串变量
    stdin()
    .read_line(&mut input)
    .expect("Unable to read standard input");
    if input == "5" {
        println!("Correct!");
    } else {
        println!("Incorrect!");
    }
}

键盘输入5,并由input接收,正常情况下input == "5"没毛病。可最后却输出"Incorrect!",为什么?原来我们在输入时按了enter键,n意味着换行。

代码语言:javascript复制
use std::io::stdin;
fn main() {
    println!("What is 3 2? Type your answer and press enter.");
    let mut input = String::new();//字符串变量
    stdin()
    .read_line(&mut input)
    .expect("Unable to read standard input");
    if input.trim() == "5" {
        println!("Correct!");
    } else {
        println!("Incorrect!");
    }
}

用trim方法将input多余的去掉,最后输出"Correct!"

0 人点赞