iT邦幫忙

0

Ubuntu巡航記(4) -- Rust 安裝

  • 分享至 

  • xImage
  •  

前言

Rust 是一個現代版的 C/C++ 程式語言,它加入物件導向、套件安裝(cargo)、函數式程式設計(Functional Programming)、WebAssembly...等等的設計模式與觀念,同時改善C最致命的缺點 -- 記憶體洩漏(Memory Leak),是一個值得投資的語言。

另外,也可以與Python整合,彌補Python直譯器不能建置為執行檔的缺憾,既可以加速執行的速度,程式碼又可以免於公開。

Rust 安裝

安裝程序非常簡單,只要兩步驟:

  1. 下載且安裝:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    按 Enter 即可。

  2. 驗證:
    rustc --version

  3. 建立 C 相關環境:
    sudo apt install build-essential

寫一支 Rust 程式

  1. 建立專案,不要用大寫:
cargo new hello_world
  1. 編譯專案:
cd hello_world
# 編譯
cargo build
# 執行
cargo run

顯示 Hello, world!

可修改 src/main.rs 程式。

也可以編譯 main.rs,成為執行檔:
rustc main.rs

之後就可以執行,不可以在檔案管理員 double click,因為目前路徑不在預設搜尋路徑中:
./main

可以修改登入檔(gedit ~/.bashrc),加入目前路徑在預設搜尋路徑中:
export PATH=$PATH:.

Python 與 Rust 整合

請參閱『Rust Inside Other Languages』說明,

  1. 建立專案,不要用大寫:
cargo new embed
  1. src/main.rs改名為lib.rs,程式碼如下,主要是產生10個執行緖,每個執行緖累加0至5百萬:
use std::thread;

#[no_mangle]
pub extern fn process() {
    let handles: Vec<_> = (0..10).map(|_| {
        thread::spawn(|| {
            let mut x = 0;
            for _ in 0..5000000 {
                x += 1
            }
        x
        })
    }).collect();

    for h in handles {
        println!("Thread finished with count={}",
        h.join().map_err(|_| "Could not join a thread!").unwrap());
    }
    println!("Rust done!");
}
  1. 修改 Cargo.toml,在檔案尾巴加入以下設定:
[lib]
name = "embed"
crate-type = ["dylib"]
  1. 建置專案:
cargo build --release

產生函數庫 target/release/libembed.so。

  1. 新增 Python 檔案 embed.py,程式碼如下:
from ctypes import cdll

# linux
lib = cdll.LoadLibrary("target/release/libembed.so")

# Windows
#lib = cdll.LoadLibrary("target/release/embed.dll")

lib.process()

print("done!")
  1. 測試,以 Python 呼叫 Rust:
python embed.py

輸出如下:

Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Thread finished with count=5000000
Rust done!
done!

勝利成功,Happy Coding !!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言