Rust lang编程语言推荐

sibenx · · 4620 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一门新的编程语言要发展离不开广大程序员的『抹黑』,比如……还是不得罪人了,反正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性能评测


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:sibenx

查看原文:Rust lang编程语言推荐

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4620 次点击  
加入收藏 微博
2 回复  |  直到 2017-08-17 14:41:55
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传