首先我无意引战,但是今天看到某位同学的文章里有某些错误,不得不指正一下。

1. 测量时间的时候我们使用 `std::time::SystemTime::elapsed` 即可,不必蹩脚的使用两个 system 输出出来还得手动算一下。(当然你说对Rust不熟也就无所谓了)

2. 最重要一点。 执行 rust 代码的时候请用 `--release` ,cargo 项目请直接执行 `cargo run --release`

在我本机的测试过程:

```

➜  demo pwd

/Users/wayslog/go/src/demo

➜  demo go version

go version go1.7.1 darwin/amd64

➜  demo cat demo.go

package main

import (

"fmt"

"runtime"

"time"

)

func main() {

runtime.GC()

t := time.Now()

sum := 0

for i := 0; i < 20000; i++ {

for j := 0; j < 20000; j++ {

sum = sum + i*j

}

}

fmt.Println(time.Now().Sub(t))

fmt.Println(sum)

}

➜  demo go run demo.go

236.312079ms

39996000100000000

➜  demo go build

➜  demo ./demo

289.696142ms

39996000100000000

➜  demo cd ~/rust/baka

➜  baka git:(master) ✗ cat src/main.rs

use std::time::SystemTime;

fn main() {

let sys_time = SystemTime::now();

let mut x = 0;

let mut i = 0;

let mut y: u64 = 0;

while x < 20000 {

i = 0;

while i < 20000 {

y = y + x * i;

i = i + 1;

}

x = x + 1;

}

println!("{:?}", sys_time.elapsed());

println!("The value of y is: {}", y);

}

➜  baka git:(master) ✗ cargo run --release

Finished release [optimized] target(s) in 0.0 secs

Running `target/release/baka`

Ok(Duration { secs: 0, nanos: 0 })

The value of y is: 39996000100000000

➜  baka git:(master) ✗ cargo build --release

Finished release [optimized] target(s) in 0.0 secs

➜  baka git:(master) ✗ ./target/release/baka

Ok(Duration { secs: 0, nanos: 0 })

The value of y is: 39996000100000000

```

Rust这里为什么会跑到0秒0ns呢?

将rust编译到asm我们能看到, 地址在这:https://is.gd/CyE36H:

```

```

编译时计算掉了么?

OK,既然编译时计算掉了这个情况,那么,我们让用户自己输入数字吧,这样编译时计算总优化不掉吧?

```

➜  baka git:(master) ✗ cat src/main.rs

use std::time::SystemTime;

use std::env;

fn main() {

let mut args = env::args();

args.next().unwrap();

let max_range = args.next().unwrap().parse::().expect("not num");

let sys_time = SystemTime::now();

let mut x = 0;

let mut i = 0;

let mut y: u64 = 0;

while x < max_range {

i = 0;

while i < max_range {

y = y + x * i;

i = i + 1;

}

x = x + 1;

}

println!("{:?}", sys_time.elapsed());

println!("The value of y is: {}", y);

}

➜  baka git:(master) ✗ cargo build --release

Finished release [optimized] target(s) in 0.0 secs

➜  baka git:(master) ✗ ./target/release/baka 20000

Ok(Duration { secs: 0, nanos: 6000 })

The value of y is: 39996000100000000

➜  baka git:(master) ✗ ./target/release/baka 40000

Ok(Duration { secs: 0, nanos: 12000 })

The value of y is: 639968000400000000

```

这里,Rust编译器可能也做了其他的优化了,但是需要分析asm再来看了,这里不做赘述。

但是,无论怎么看, 6000 ns (0.006ms) 和 200 ms 都是数量级的差距吧?

总结一点,不会别瞎说,这位 gopher 不行啊,深表同情。

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

rust风化速度_反驳《Golang、Rust的执行速度的对照,让人大吃一惊。》——不会别瞎说...相关推荐

  1. 腐蚀rust服务器命令_【使用 Rust 写 Parser】2. 解析Redis协议

    系列所有文章 https://zhuanlan.zhihu.com/p/115017849​zhuanlan.zhihu.com https://zhuanlan.zhihu.com/p/139387 ...

  2. 笔记本玩rust卡顿_《腐蚀RUST》steam销量第一,延迟高用斧牛加速器!

    本周Steam如期公布了上周(1月4日至1月10日)的游戏销量排行榜.本期排行榜中老游戏<腐蚀>凭借打折冲到榜首,七连冠的<赛博朋克2077>跌至第三名.凭借着促销的热度,&l ...

  3. rust的矿坑_转: Rust中的Pin详解 【Rust语言中文社区】

    Rust中的Pin详解 原创 automanyang Rust语言中文社区 昨天 https://mp.weixin.qq.com/s/PjctbPbyR5OeaqTHZdB5uQ 相关概念 Pin ...

  4. python提高导入数据库速度_提高从MongoDB导入数据速度

    Python编写爬虫,用的是Scrapy框架,将数据存储到了本机的MongoDB数据库上.导数据的时候发现数据的转化,速度有点慢. from pymongo import MongoClient #建 ...

  5. 怎么放慢音乐速度_为什么我的相机放慢速度或停止连拍?

    怎么放慢音乐速度 Every camera has a burst mode: it's where you hold down the shutter button and it keeps tak ...

  6. python matlab 速度_关于python:MATLAB的速度是Numpy的两倍

    我是一名工程学研究生,目前出于数值模拟的目的,正在从MATLAB过渡到Python.我的印象是,对于基本的数组操作,Numpy将与MATLAB一样快.但是,对于我编写的两个不同程序,MATLAB的运行 ...

  7. pcie1 4 速度_守门员丨门将的各种速度训练方法

    "大家好,今天我们分享守门员的速度训练方法,希望大家喜欢! 比赛中,守门员在断球时要短而有力.扑救的效果在某种程度上取决于"速度".守门员在扑救或解围时,速度至关重要.当 ...

  8. 5g理论速度_严肃科普:5G的速度到底能有多快?

    2020年已到.这一年正是国际电联5G愿景中的商用元年. 实际上,从2019年开始,5G的幼苗早已在欧美中日韩破土而出.今年,这批幼苗正在茁壮成长,并已在全球分蘖蔓延成燎原之势. 对于广大吃瓜群众来说 ...

  9. python和易语言爬虫速度_如何优化 Python 爬虫的速度?

    在开发爬虫的时候,对于老工程师的工作节奏一般是先实现爬虫的抓取逻辑,然后就要提升爬取的效率了. 众所周知想提升效率就要涉猎到并发编程姿势啦,所以今天我们抛砖引玉,不去过多的计较太原理和抽象的东西,而是 ...

最新文章

  1. Asp.net MVC 3实例学习之ExtShop(五)——产品详细页
  2. 只有ajax会跨域吗_ajax处理跨域有几种方式
  3. js jquery 数组的合并 对象的合并
  4. 易创课堂武汉站-NTES@百位创业者智慧众筹
  5. react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态
  6. java自定义线程_Java自定义线程池详解
  7. 孩子学计算机最佳年龄,孩子学编程最佳年龄是多少
  8. 赵平C语言,赵平智与OIOIC
  9. 神级代码编辑软件(Sublime Text 3) v3.3114 汉化特别版
  10. 中国象棋口诀及要领精髓
  11. java小新人 带着萌新看springboot源码
  12. 全球及中国钢铁行业供需格局与未来前景分析报告2022版
  13. android 如何读取u盘中数据恢复,U盘数据恢复常见问题及恢复方法汇总
  14. java微信支付 需要证书吗_java引用微信支付的p12证书文件
  15. 中国信通院:2017年Q3共享单车行业发展指数报告(附下载)
  16. mBio | 海洋所孙超岷组在深海原位验证了微生物介导的单质硫形成新通路
  17. 滚烫出炉:06中国IT十大财经人物
  18. window删除多余的操作系统
  19. 电路的基本概念和分析方法
  20. RGB图像之灰度级和通道的理解

热门文章

  1. select查询语句执行顺序
  2. OSChina 周四乱弹 ——妹子喜欢的是程序员 这是标准……
  3. 认识软件性能测试10大误区
  4. 2月份Web服务器份额:排名不变 仅Microsoft份额上扬
  5. MySql创建一个存储过程
  6. ImageView倒影效果
  7. winform 与WPF
  8. 旁门左道也谈cacti安装
  9. koa2异常处理_读 koa2 源码后的一些思考与实践
  10. 熊猫烧香分析报告_熊猫分析进行最佳探索性数据分析