一门新的编程语言要发展离不开广大程序员的『抹黑』,比如……还是不得罪人了,反正PHP是世界上最好的语言。 当然也离不开寡头的推广,比如Golang就有个厉害的干爹。一直听别人黑Rust lang有多糟糕、多没前途,为了和别人一起黑Rust我觉得有必要学习学习,因为无脑黑不符合我码农的身份……
初学Rust编程,写了个简单的Demo,写完后第一感觉是"这是什么玩意儿?"上手居然能这么快,不看文档都能猜到怎么写,写了10多个函数编译居然没报bug?一个waring都没有?烫烫烫也没看到?现在已经对这门语言爱不释手,就像最初用Python一样,用的越多惊喜越多。Rust的语法非常优美,在我心中只有经常被人嘲讽的C#能媲美。不过更让人爱不释手的还是Rust的包管理工具Cargo,用起来就像飞一样,太爽了。如果你用过npm,composer,glide,maven,pip你会懂我的意思,和Cargo比起来他们就像是上一个时代的产品(不服的自己体验一下,不接受无脑喷)。
我测试的方法简单粗暴,先随机生成1千万行随机的整数,然后通过算法排序这一千万行数据,并将排序后的结果保存到文本文件。
首先生成随机数,并写入一个文件,代码如下:
extern crate rand;
extern crate bit_set;
extern crate time;
use std::fs::File;
use std::io::prelude::*;
use rand::Rng;
use std::io;
use bit_set::BitSet;
use time::*;
use std::io::BufReader;
//生成1千万随机数
fn init(){
const FILE_NAME : &'static str = "sorting/sort.txt";
let mut file = File::create(FILE_NAME).expect("file create fail");
file.write_all(b"").expect("file write fail");
let mut rd = rand::thread_rng();
for _ in 0..10000000 {
let tand = rd.gen_range(1,20000000).to_string() + "\n";
file.write(tand.as_bytes()).expect("file write fail");
}
}
fn main(){
let start = time::now();//获取开始时间
init();
let end = time::now();//获取结束时间
println!("duration:{:?}",end-start);
}
执行程序耗时17秒,生成了大小为81M的随机数文件。
有了数据之后,开始写排序算法,这里采用位图排序。代码如下:
extern crate rand;
extern crate bit_set;
extern crate time;
use std::fs::File;
use std::io::prelude::*;
use rand::Rng;
use std::io;
use bit_set::BitSet;
use time::*;
use std::io::BufReader;
fn main() {
let start = time::now();//获取开始时间
sort_by_self(limit,offset+limit);
let end = time::now();//获取结束时间
println!("duration:{:?}",end-start);
}
fn sort_by_self(limit:u32,offset:u32){
let mut byte:Vec<u32> = vec![0;625000];
let mut file = File::open("sorting/sort.txt").expect("file create fail");
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
let hh = buffer.split("\n");
for ll in hh {
match ll.parse::<u32>() {
Ok(num) => {
set_bit(&mut byte,num);
},
Err(_) => println!("That was not a number..."),
}
}
let mut i = 1;
let mut myFile = File::create("sorting/new.txt").expect("file create fail");
for x in 0..20000000 {
let aa = get_bit(&mut byte,x);
if aa != 0{
myFile.write((x.to_string() + "\n").as_bytes()).expect("file write fail");
}
}
}
fn set_bit(byte:&mut Vec<u32>,n:u32){
byte[(n/32) as usize] |= 1<<(n%32); // 设置
}
fn get_bit(byte:&mut Vec<u32>,n:u32) -> u32{
return (byte[(n/32) as usize] & (1<<(n%32)));
}
先读取1千万行整数,然后进行排序,最后将排序结果写入另一文件,执行程序耗费12秒。性能相当感人,完全可以与C&C++一较高下。Rust的语法非常容易理解,我这种初级程序员分分钟都上手了,最主要的是完全不需要关心CG。
我尝试过很多编程语言的『入门』。比如Java,看到那些配置文件就不想写了,我还在改配置文件别人都C轮了……比如C++,我觉得我大部分时间是在编译,别人结婚了我在编译,别人二婚了我还在编译……比如Python,我京东买的游标卡尺还没送到别人都上市了(这个是网上找的段子,算无脑黑)。最后还是推荐大家试试Rust lang,说不定爱上了呢
更多相关文章请移步我的博客-原文链接:Rust lang性能评测