rust風化速度_反駁《Golang、Rust的執行速度的對照,讓人大吃一驚。》——不會別瞎說...

首先我無意引戰,但是今天看到某位同學的文章里有某些錯誤,不得不指正一下。

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 不行啊,深表同情。

有疑問加站長微信聯系(非本文作者)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396155.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css flexbox模型_代碼簡介:CSS Flexbox有點像旅行

css flexbox模型Here are three stories we published this week that are worth your time:這是我們本周發布的三個值得您關注的故事&#xff1a; CSS Flexbox explained by road tripping across the country: 7 minute read CSS Flexbox在全國各地的旅途中進行了解釋&#…

Sharepoint 2013設置customErrors

原文地址&#xff1a;http://www.cnblogs.com/renzh/archive/2013/03/05/2944309.html#3407239 一、首先設置IIS中的Web.config文件 找到對應的IIS應用程序目錄&#xff0c;如&#xff1a;C:\inetpub\wwwroot\wss\VirtualDirectories\3000 在此文件夾下包含一個web.config文件&…

ddt數據驅動

數據驅動原理 1.測試數據為多個字典的list類型 2.測試類前加修飾ddt.ddt 3.case前加修飾ddt.data() 4.運行后用例會自動加載成三個單獨的用例 5.測試結果&#xff1a; Testing started at 21:51 ...start!{username: selenium\xe7\xbe\xa4, psw: 232607095}end!start!{username…

http協議報文體_HTTP報文基本概念學習

HTTP是什么HTTP是HyperText Transfer Protocol的縮寫,中文就是超文本傳輸協議,所謂的超,是個學術用語,是基于某種事物增加了更多的信息維度,比如超像素xxx之類的.協議是什么,協議說白了就是約定,約定就是模板,就是表格,就和你去銀行辦手續一樣,客戶不知道要提供什么信息,銀行又…

yeoman_使用yeoman輕松創建Yeoman生成器

yeomanby Krist Wongsuphasawat克里斯特旺蘇帕薩瓦(Krist Wongsuphasawat) 使用yeoman輕松創建Yeoman生成器 (Creating Yeoman generators easily with yeoman-easily) I’ve used Yeoman to start many of my projects. It’s an amazing web scaffolding tool.我已經用Yeoma…

linux 輕量化圖形界面,YOXIOS 入門教程--基于Linux的 輕量化GUI圖形系統和硬件平臺(41頁)-原創力文檔...

YOXIOS --基于 Linux 的輕量化 GUI圖形系統和硬件平臺YOXIOS 入門教程基于 Linux 的 輕量化 GUI圖形系統和硬件平臺(V1.0 2020-05)提示&#xff1a;閱讀此文檔需要有一定的單片機開發、C/C編程語言、和使用 IDE開發工具的基礎YOXIOS (C) 2020 游芯科技第 1 頁 共 41 頁YOXIOS -…

第一階段 XHTML.定位樣式

一位初學php的隨堂筆記&#xff0c;記錄自己的成長&#xff01; 1.清除浮動 (1)格式 clear:both清除兩邊|left清除左邊 right清除右邊 高度塌陷:父元素中的子元素都浮動&#xff0c;而父元素 沒有設置高&#xff0c;那父元素的高為0 &#xff08;2&#xff09;萬能清除(在父元素…

Canvas入門06-線段與像素邊界

我們知道&#xff0c;使用以下2個API可以繪制一條線段&#xff1a; moveTo(x, y) 向當前路徑中增加一條子路徑&#xff0c;該子路徑只包含一個點&#xff0c;此為線段的起始點lineTo(x, y) 將線段的下一個點加入子路徑中context.strokeStyle rgb(200, 200, 0); context.lineWi…

函數表達書-讀書筆記

定義函數的方式有兩種&#xff1a;一種是函數聲明&#xff0c;另一種就是函數表達式。函數聲明的語法如下&#xff1a; function functionName(arg0,arg1,arg2){//函數體 } 函數聲明&#xff0c;有一個重要特征就是函數聲明提升。也就是在執行代碼之前會先讀取函數聲明&#xf…

vue截取一個字符串_vue 截取字符串

let str abcdef;// 0str str.slice(0);//返回整個字符串 abcdefstr str.substring(0);//返回整個字符串 abcdefstr str.substr(0);//返回整個字符串 abcdef// 使用一個參數str str.slice(2);//截取第二個之后所有的字符 cdefstr str.substring(2);//截取第二個之后所有的…

網絡工程師需要哪些知識_成長工程師可以教給我們哪些工程知識

網絡工程師需要哪些知識I’ve been working as an engineer on the growth team at Airbnb for a couple of months now.我已經在Airbnb的成長團隊擔任工程師幾個月了。 Since I’m in an environment full of passionate developers, I wanted to share some of the good eng…

linux父進程循環,LINUX C 父進程建立多個子進程循環非堵塞回收列子

下面 代碼主要用于復習&#xff0c;留于此點擊(此處)折疊或打開/*************************************************************************> File Name: fork5.c> Author: gaopeng QQ:22389860 all right reserved> Mail: gaopp_200217163.com> Created Time: …

服務器自動運行python_在虛擬主機中安裝了python程序,如何使它在服務器上自動運行?...

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":3,"count":3}]},"card":[{"des":"IP地理位置庫(GeoIP Databases)是對運營商分…

模擬測試

題解&#xff1a; 3道水題。。 1。生活大爆炸版剪刀石頭布 忘記怎么打f[5][5]{}這個了。。 然后發現里面啥都不加也可以 加的話要是{} 2.送禮物 雙向搜 有點卡常數。。 我沒寫dfs 寫了dp求多少&#xff08;好智障啊。。 訪問數組挺慢的所以應該速度差不多。。&#xff09; lowb…

javascript閉包_通過郵寄包裹解釋JavaScript閉包

javascript閉包by Kevin Kononenko凱文科諾年科(Kevin Kononenko) 通過郵寄包裹解釋JavaScript閉包 (JavaScript Closures Explained by Mailing a Package) 如果您以前寄過包裹或信件&#xff0c;那么您可以了解JavaScript中的閉包。 (If you have mailed a package or lette…

linux 加入ad 用ssh,使用samba驗證AD用戶,允許AD用戶登錄到linux

使用samba驗證AD用戶&#xff0c;允許AD用戶登錄到linux2007年06月26日 星期二 14:101、先把samba加入到AD域中2、在smb.conf中添加一行&#xff0c;讓登錄進來的用戶使用bashtemplate shell /bin/bash3、運行authconfig&#xff0c;在驗證中選擇 使用smb和kerberos,winbind驗…

體會日子

體會日子 開通了博客園&#xff0c; 日子要記錄一下。 以后要好好上進了。 posted on 2016-05-01 23:16 體會日子 閱讀(...) 評論(...) 編輯 收藏 轉載于:https://www.cnblogs.com/yukunshi/p/5451485.html

selenium 難定位元素、時間插件

關于frame: 1. 如果網頁存在iframe的話&#xff0c;傳統的定位有時候找不到元素&#xff0c;需要切換frame&#xff1b; # 切換到leftFrame定位“測井設計” driver.switch_to_frame("leftFrame") driver.find_element_by_link_text(u"設計").click() # 切…

python kmeans聚類 對二維坐標點聚類_Kmeans均值聚類算法原理以及Python如何實現

第一步.隨機生成質心由于這是一個無監督學習的算法&#xff0c;因此我們首先在一個二維的坐標軸下隨機給定一堆點&#xff0c;并隨即給定兩個質心&#xff0c;我們這個算法的目的就是將這一堆點根據它們自身的坐標特征分為兩類&#xff0c;因此選取了兩個質心&#xff0c;什么時…