分享
  1. 首页
  2. 文章

Rust lang编程语言推荐

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

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏