精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

結合使用 Python 和 Rust

開發
Rust 和 Python 的優勢互補??梢允褂?Python 進行原型設計,然后將性能瓶頸轉移到 Rust 上。

Python 和 Rust 是非常不同的語言,但它們實際上非常搭配。但在討論如何將 Python 與 Rust 結合之前,我想先介紹一下 Rust 本身。你可能已經聽說了這種語言,但可能還沒有了解過它的細節。

什么是 Rust?

Rust 是一種低級語言,這意味著程序員所處理的東西接近于計算機的 “真實” 運行方式。

例如,整數類型由字節大小定義,與 CPU 支持的類型相對應。雖然我們很想簡單地說 Rust 中的 a+b 對應于一條機器指令,但實際上并不完全是這樣!

Rust 編譯器鏈非常復雜。作為第一種近似的方法,將這樣的語句視為 “有點” 真實是有用的。

Rust 旨在實現零成本抽象,這意味著許多語言級別可用的抽象在運行時環境中會被編譯去掉。

例如,除非明確要求,對象會在堆棧上分配。結果是,在 Rust 中創建本地對象沒有運行時成本(盡管可能需要進行初始化)。

最后,Rust 是一種內存安全的語言。也有其他內存安全的語言和其他支持零成本抽象的語言。但通常這些是兩類不同的語言。

內存安全并不意味著不可能在 Rust 中出現內存違規。它確實意味著只有兩種方式可能導致內存違規:

  • 編譯器的錯誤。
  • 顯式聲明為不安全(unsafe)的代碼。

Rust 標準庫代碼有很多被標記為不安全的代碼,雖然比許多人預期的少。這并不意味著該語句無意義。除了需要自己編寫不安全代碼的(罕見的)情況外,內存違規通常是由基礎設施造成的。

為什么會有 Rust 出現?

為什么人們要創建 Rust?是哪些問題沒有被現有編程語言解決嗎?

Rust 被設計成既能高效運行,又保證內存安全。在現代的聯網世界中,這是一個越來越重要的問題。

Rust 的典型應用場景是協議的低級解析。待解析的數據通常來自不受信任的來源,并且需要通過高效的方式進行解析。

如果你認為這聽起來像 Web 瀏覽器所做的事情,那不是巧合。Rust 最初起源于 Mozilla 基金會,它是為了改進 Firefox 瀏覽器而設計的。

如今,需要保證安全和速度的不僅僅是瀏覽器。即使是常見的微服務架構也必須能夠快速解析不受信任的數據,同時保證安全。

現實示例:統計字符

為了理解 “封裝 Rust” 的例子,需要解決一個問題。這個問題需要滿足以下要求:

  • 足夠容易解決。
  • 能夠寫高性能循環來優化。
  • 有一定的現實意義。

這個玩具問題的例子是判斷一個字符在一個字符串中是否出現超過了 X 次。這個問題不容易通過高效的正則表達式解決。即使是專門的 Numpy 代碼也可能不夠快,因為通常沒有必要掃描整個字符串。

你可以想象一些 Python 庫和技巧的組合來解決這個問題。然而,如果在低級別的語言中實現直接的算法,它會非??欤⑶腋子陂喿x。

為了使問題稍微有趣一些,以演示 Rust 的一些有趣部分,這個問題增加了一些變化。該算法支持在換行符處重置計數(意即:字符是否在一行中出現了超過 X 次?)或在空格處重置計數(意即:字符是否在單詞中出現了超過 X 次?)。

這是唯一與 “現實性” 相關的部分。過多的現實性將使這個示例在教育上不再有用。

支持枚舉

Rust 支持使用枚舉(enum)。你可以使用枚舉做很多有趣的事情。

目前,只使用了一個簡單的三選一的枚舉,并沒有其他的變形。這個枚舉編碼了哪種字符重置計數。

#[derive(Copy)]
enum Reset {
    NewlinesReset,
    SpacesReset,
    NoReset,
}

支持結構

接下來的 Rust 組件更大一些:這是一個結構(struct)。Rust 的結構與 Python 的 dataclass 有些相似。同樣,你可以用結構做更復雜的事情。

#[pyclass]
struct Counter {
    what: char,
    min_number: u64,
    reset: Reset, 
}

實現塊

你可以在 Rust 中使用一個單獨的塊,稱為實現(impl)塊,為結構添加一個方法。但具體細節超出了本文的范圍。

在這個示例中,該方法調用了一個外部函數。這主要是為了分解代碼。更復雜的用例將指示 Rust 編譯器內聯該函數,以便在不產生任何運行時成本的情況下提高可讀性。

#[pymethods]
impl Counter {
    #[new]
    fn new(what: char, min_number: u64, reset: Reset) -> Self {
        Counter{what: what, min_number: min_number, reset: reset}
    }
    fn has_count(
        &self,
        data: &str,
    ) -> bool {
        has_count(self, data.chars())
    }
}

函數

默認情況下,Rust 變量是常量。由于當前的計數(current_count)必須更改,因此它被聲明為可變變量。

fn has_count(cntr: &Counter, chars: std::str::Chars) -> bool {
    let mut current_count : u64 = 0;
    for c in chars {
        if got_count(cntr, c, &mut current_count) {
            return true;
        }
    }
    false
}

該循環遍歷字符并調用 got_count 函數。再次強調,這是為了將代碼分解成幻燈片展示。它展示了如何向函數發送可變引用。

盡管 current_count 是可變的,但發送和接收站點都顯式標記該引用為可變。這可以清楚地表明哪些函數可能修改一個值。

計數

got_count 函數重置計數器,將其遞增,然后檢查它。Rust 的冒號分隔的表達式序列評估最后一個表達式的結果,即是否達到了指定的閾值。

fn got_count(cntr: &Counter, c: char, current_count: &mut u64) -> bool {
    maybe_reset(cntr, c, current_count);
    maybe_incr(cntr, c, current_count);
    *current_count >= cntr.min_number
}

重置代碼

reset 的代碼展示了 Rust 中另一個有用的功能:模式匹配。對 Rust 中匹配的完整描述需要一個學期級別的課程,不適合在一個無關的演講中講解。這個示例匹配了該元組的兩個選項之一。

fn maybe_reset(cntr: &Counter, c: char, current_count: &mut u64) -> () {
    match (c, cntr.reset) {
        ('\n', Reset::NewlinesReset) | (' ', Reset::SpacesReset)=> {
            *current_count = 0;
        }
        _ => {}
    };
}

增量支持

增量將字符與所需字符進行比較,并在匹配時增加計數。

fn maybe_incr(cntr: &Counter, c: char, current_count: &mut u64) -> (){
    if c == cntr.what {
        *current_count += 1;
    };
}

請注意,我在本文中優化了代碼以適合幻燈片。這不一定是 Rust 代碼的最佳實踐示例,也不是如何設計良好的 API 的示例。

為 Python 封裝 Rust 代碼

為了將 Rust 代碼封裝到 Python 中,你可以使用 PyO3。PyO3 Rust “crate”(即庫)允許內聯提示將 Rust 代碼包裝為 Python,使得修改兩者更容易。

包含 PyO3 crate 原語

首先,你必須包含 PyO3 crate 原語。

use pyo3::prelude::*;

封裝枚舉

枚舉需要被封裝。derive 從句對于將枚舉封裝為 PyO3 是必需的,因為它們允許類被復制和克隆,使它們更容易在 Python 中使用。

#[pyclass]
#[derive(Clone)]
#[derive(Copy)]
enum Reset {
    /* ... */
}

封裝結構

結構同樣需要被封裝。在 Rust 中,這些被稱為 “宏”,它們會生成所需的接口位。

#[pyclass]
struct Counter {
    /* ... */
}

封裝實現

封裝實現(impl)更有趣。增加了另一個名為 new 的宏。此方法被標記為 #[new],讓 PyO3 知道如何為內置對象公開構造函數。

#[pymethods]
impl Counter {
    #[new]
    fn new(what: char, min_number: u64,
          reset: Reset) -> Self {
        Counter{what: what,
          min_number: min_number, reset: reset}
    }
    /* ... */
}

定義模塊

最后,定義一個初始化模塊的函數。此函數具有特定的簽名,必須與模塊同名,并用 #[pymodule] 修飾。

#[pymodule]
fn counter(_py: Python, m: &PyModule
) -> PyResult<()> {
    m.add_class::<Counter>()?;
    m.add_class::<Reset>()?;
    Ok(())
}

? 顯示此函數可能失敗(例如,如果類沒有正確配置)。 PyResult 在導入時轉換為 Python 異常。

Maturin 開發

為了快速檢查,用 maturin develop 構建并將庫安裝到當前虛擬環境中。這有助于快速迭代。

$ maturin develop

Maturin 構建

maturin build 命令構建一個 manylinux 輪子,它可以上傳到 PyPI。輪子是特定于 CPU 架構的。

Python 庫

從 Python 中使用庫是最簡單的部分。沒有任何東西表明這與在 Python 中編寫代碼有什么區別。這其中的一個有用方面是,如果你優化了已經有單元測試的 Python 中的現有庫,你可以使用 Python 單元測試來測試 Rust 庫。

導入

無論你是使用 maturin develop 還是 pip install 來安裝它,導入庫都是使用 import 完成的。

import counter

構造函數

構造函數的定義正好使對象可以從 Python 構建。這并不總是如此。有時僅從更復雜的函數返回對象。

cntr = counter.Counter(
    'c',
    3,
    counter.Reset.NewlinesReset,
)

調用函數

最終的收益終于來了。檢查這個字符串是否至少有三個 “c” 字符:

>>> cntr.has_count("hello-c-c-c-goodbye")
True

添加一個換行符會觸發剩余操作,這里沒有插入換行符的三個 “c” 字符:

>>> cntr.has_count("hello-c-c-\nc-goodbye")
False

使用 Rust 和 Python 很容易

我的目標是讓你相信將 Rust 和 Python 結合起來很簡單。我編寫了一些“粘合劑”代碼。Rust 和 Python 具有互補的優點和缺點。

Rust 非常適合高性能、安全的代碼。Rust 具有陡峭的學習曲線,對于快速原型解決方案而言可能有些笨拙。

Python 很容易入手,并支持非常緊密的迭代循環。Python 確實有一個“速度上限”。超過一定程度后,從 Python 中獲得更好的性能就更難了。

將它們結合起來完美無縫。在 Python 中進行原型設計,并將性能瓶頸移至 Rust 中。

使用 Maturin,你的開發和部署流程更容易進行。開發、構建并享受這一組合吧!

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-10-21 14:54:02

RustGolang開發

2012-04-19 10:04:20

ibmdw

2024-09-13 09:55:38

RustP2P網

2023-05-04 07:33:39

Rust變量常量

2009-07-31 16:28:26

ibmdwJavaJSP

2013-03-18 11:05:26

HadoopCouchbase

2022-08-05 07:43:40

IoNT區塊鏈中心化

2024-08-07 09:33:58

2021-02-24 07:42:34

PythonRust語言

2023-06-15 17:00:11

Rust循環

2011-12-15 01:01:16

ibmdw

2011-07-08 17:49:38

WITH ASCTE

2015-04-20 10:06:37

PHP Rust 創建PHP 擴展

2023-05-23 18:11:12

Rust數組元組

2020-07-15 08:00:52

Rust語言技巧

2018-01-27 21:19:06

前端Rust Service

2024-09-06 11:34:15

RustAI語言

2024-02-26 07:26:27

RustC++開發

2022-04-14 09:19:34

Notion開源AppFlowy

2024-03-01 07:26:49

RustPolars機器學習
點贊
收藏

51CTO技術棧公眾號

91成人精品| 日韩电影精品| www激情久久| 国产精品福利网站| 日韩成人毛片视频| 三级精品视频| 欧美日韩中文字幕一区| 无颜之月在线看| 四虎精品成人影院观看地址| 丝瓜av网站精品一区二区| 最近2019中文免费高清视频观看www99 | 免费观看精品视频| 中文字幕在线观看日本| 国产成人精品亚洲午夜麻豆| 91av在线国产| 日韩精品一区二区亚洲av性色| 加勒比久久高清| 制服丝袜亚洲播放| 久久人妻精品白浆国产| 羞羞视频在线观看不卡| 中文字幕不卡的av| 国产一区二区三区无遮挡| 中文字幕永久在线视频| 亚洲精品123区| 爱福利视频一区| theav精尽人亡av| 日韩av综合| 欧美性一二三区| 日韩精品视频一区二区在线观看| 黄色国产网站在线播放| 国产色综合一区| 狠狠色噜噜狠狠狠狠色吗综合| 一本色道久久综合熟妇| 久久亚洲欧洲| 97在线视频免费播放| 欧美日韩国产黄色| 国产精品密蕾丝视频下载| 亚洲成av人乱码色午夜| 91在线第一页| 一区二区三区无毛| 欧美午夜电影网| 成人精品视频一区二区| 国产高潮在线| 亚洲一区二区黄色| 日韩不卡一二区| 日本三级视频在线观看| 国产婷婷色一区二区三区| 国产区一区二区三区| 精品欧美在线观看| 国产精品911| 91欧美日韩一区| 91精品国自产| 精品一区二区三区在线视频| 国产精品嫩草视频| 蜜臀99久久精品久久久久小说 | 欧美jizz19性欧美| 亚洲国产精品va| 亚洲欧美日韩偷拍| 国内毛片久久| 亚洲精品国精品久久99热 | 牛牛影视一区二区三区免费看| 欧美videos大乳护士334| 九色91porny| 国产精品久久久网站| 精品久久一区二区| 中文字幕免费在线播放| 亚洲国产欧美日韩在线观看第一区| 亚洲国产欧美自拍| 日韩乱码人妻无码中文字幕久久| 亚洲综合福利| 国产香蕉一区二区三区在线视频 | 小早川怜子一区二区三区| 色综合久久久| 欧美电影免费提供在线观看| 无码国产精品一区二区免费式直播| 91精品入口| 亚洲精品aⅴ中文字幕乱码| 日韩网站在线播放| 日本女优一区| 欧美裸体xxxx极品少妇| 动漫精品一区一码二码三码四码| 亚洲欧洲日本mm| 茄子视频成人在线| 一级黄色片视频| 成人久久视频在线观看| 久热这里只精品99re8久| av在线1区2区| 一区二区高清视频在线观看| 精品视频免费在线播放| 在线一区视频观看| 日韩欧美精品三级| 黄色a一级视频| 天天影视欧美综合在线观看| 欧美激情xxxx性bbbb| 无码人妻av免费一区二区三区| 欧美a级理论片| 高清不卡一区二区三区| 日本aaa在线观看| 亚洲人成伊人成综合网小说| www.爱色av.com| 欧洲亚洲精品| 国产丝袜一区二区三区| 99热在线观看精品| 国产欧美另类| 97国产超碰| 高清日韩av电影| 亚洲一区二区在线免费观看视频 | 国产电影一区二区三区| 免费一区二区三区| 天堂av在线电影| 欧美伊人久久大香线蕉综合69| 日韩女优在线视频| 第四色成人网| 91chinesevideo永久地址| 国产女主播福利| 国产人成一区二区三区影院| 免费超爽大片黄| 国产精品一区免费在线| 亚洲天堂男人的天堂| 日韩av男人天堂| 国产精品一二三四| 亚洲人成影视在线观看| 超碰超碰人人人人精品| 日韩欧美国产综合一区| 国产精品夜夜夜爽阿娇| 天堂在线亚洲视频| 国产一区高清视频| 岛国片av在线| 日韩欧美一二三| 182在线观看视频| 毛片一区二区三区| 日韩精品第一页| 涩涩涩视频在线观看| 欧美videofree性高清杂交| 情侣偷拍对白清晰饥渴难耐| 日韩激情中文字幕| 久久综合九色综合久99| 精品极品在线| 日韩电影在线观看中文字幕| 久久久久久久久久久97| 国产一区二区视频在线| 亚洲自拍三区| 青娱乐极品盛宴一区二区| 亚洲一区www| 欧美性猛交xxxx乱大交hd| 97久久精品人人做人人爽| 欧美日韩福利在线| 伊人精品综合| 久久久久久网站| 色欲av永久无码精品无码蜜桃| 亚洲综合色视频| av在线天堂网| 亚洲精品九九| 狼狼综合久久久久综合网| 99色在线观看| 亚洲男人7777| 成人午夜精品视频| 国产精品大尺度| 免费网站在线观看黄| 中文精品久久| 国产91aaa| 国产在线看片免费视频在线观看| 亚洲精品动漫久久久久| 色屁屁影院www国产高清麻豆| 久久日韩精品一区二区五区| 久久综合久久色| 日韩av免费大片| 亚洲综合精品一区二区| 欧美人与牲禽动交com| 亚洲白拍色综合图区| 五月天激情四射| 中文字幕一区二区三区在线播放| 在线观看国产福利| 亚洲人体大胆视频| 久久一区二区三区欧美亚洲| 成人国产激情在线| 欧美成人黄色小视频| 日本黄色三级视频| 91福利视频久久久久| 国产视频精品免费| 丁香一区二区三区| 亚欧在线免费观看| 在线一区免费| 欧美日韩三区四区| 国产精品igao视频网网址不卡日韩| 欧美日韩第一页| 美女欧美视频在线观看免费| 欧美日韩专区在线| 91精品国产高潮对白| 国产亚洲欧美在线| 亚洲成人激情小说| 狂野欧美一区| 黄色成人在线免费观看| 神马影视一区二区| 亚洲专区国产精品| 一区一区三区| 欧美成人精品一区二区| 亚洲三区在线观看无套内射| 欧美精品第一页| 美日韩一二三区| 亚洲欧美激情在线| 久久精品国产亚洲av久| 国产精品一区二区在线观看不卡 | 99久久精品情趣| 亚洲污视频在线观看| 精品9999| 欧美aaa在线观看| 九九在线高清精品视频| 99久久精品免费看国产四区| 我爱我色成人网| 久久久免费电影| 免费a级在线播放| 精品调教chinesegay| 国产强被迫伦姧在线观看无码| 欧美色视频日本高清在线观看| 亚洲欧美精品久久| 国产欧美一区二区精品秋霞影院 | 91国偷自产一区二区三区的观看方式 | 国产一区在线观看视频| 国产成人手机视频| 99精品免费视频| 国产性生活免费视频| 欧美色女视频| 日韩高清国产一区在线观看| 欧美日韩一本| caoporen国产精品| 动漫一区二区三区| 国产在线日韩在线| 黄瓜视频成人app免费| 2020久久国产精品| √8天堂资源地址中文在线| 欧美大尺度激情区在线播放| 在线日本中文字幕| 中文字幕av一区中文字幕天堂| 日本人妖在线| 亚洲美女自拍视频| 日韩电影免费| 亚洲嫩模很污视频| 日韩大胆视频| 亚洲色图35p| 久青草国产在线| 亚洲欧美日韩中文视频| 欧美精品少妇| 亚洲天堂精品在线| 成年人免费在线视频| 国产亚洲精品美女久久久| 国产在线视频你懂得| 亚洲日韩中文字幕在线播放| 国产免费av高清在线| 国产亚洲欧美日韩精品| 高清性色生活片在线观看| 中文字幕亚洲欧美| 永久免费av片在线观看全网站| 日韩中文理论片| 黄视频网站在线| 欧美大片免费看| 爱啪视频在线观看视频免费| 欧美一级片免费在线| 一区二区三区四区日本视频| 国产精品久久久久久久久久ktv| 992tv国产精品成人影院| 国产精品久久久久久av| 日韩黄色三级| 97se在线视频| 羞羞色国产精品网站| 少妇免费毛片久久久久久久久| 日本午夜一区| 伊人久久在线观看| 夜夜精品视频| 久久精品影视大全| 国产一区二区三区香蕉| 在线精品视频播放| 久久久亚洲欧洲日产国码αv| 国产成人免费观看网站| 亚洲欧美日韩国产综合| 日产欧产va高清| 欧美私模裸体表演在线观看| 国产男女无套免费网站| 亚洲成人在线网| 国产乱理伦片a级在线观看| 久久综合伊人77777蜜臀| 第一福利在线视频| 国产免费亚洲高清| 大陆精大陆国产国语精品| 欧美一二三四五区| 91精品国产乱码久久久久久久| 成人性生活视频免费看| 日本不卡的三区四区五区| 图片区乱熟图片区亚洲| 91在线一区二区三区| 日韩av片在线免费观看| 亚洲成人中文在线| 在线免费观看高清视频| 日韩av一区二区在线| 人人干在线视频| 欧美在线视频导航| 国产一区二区三区免费观看在线| 久久综合伊人77777麻豆| 欧美福利影院| 黄色在线视频网| 99久久伊人网影院| 免费在线黄色网| 欧美性生活影院| 性xxxxbbbb| 欧美黄色免费网站| 色8久久久久| 日韩亚洲欧美精品| 亚洲精品一二| 免费国偷自产拍精品视频| 国产欧美日韩一区二区三区在线观看| 欧美黄色一级网站| 欧美日韩国产美| 国产香蕉在线| 欧美在线性爱视频| 97青娱国产盛宴精品视频| 在线免费观看成人网| 久久精品中文| 在线视频 日韩| 一个色妞综合视频在线观看| 丰满人妻一区二区三区四区| 日韩不卡在线观看| 国产经典三级在线| 91情侣在线视频| 我不卡影院28| 福利片一区二区三区| 亚洲国产精品精华液2区45| 久久久精品福利| 日韩国产欧美精品在线| 亚洲男同gay网站| 91欧美日韩一区| 91精品国产乱码久久久久久久| 91极品视频在线观看| 久久精品亚洲精品国产欧美kt∨| 国产高潮久久久| 亚洲精品国产美女| 久久影院午夜精品| 狠狠综合久久av| 国产日本精品| 无码人妻精品一区二区三应用大全| 亚洲主播在线播放| 亚洲精品久久久久久久久久久久久久| 久久亚洲影音av资源网| 日韩一区中文| 黄色网址在线免费看| 国产乱人伦偷精品视频不卡 | 天天爽夜夜爽夜夜爽精品视频| 亚洲产国偷v产偷v自拍涩爱| 欧美乱大交xxxxx| 亚洲成人黄色| www..com日韩| 91在线精品一区二区| 日韩久久中文字幕| 亚洲欧美三级伦理| 成人av集中营| 好色先生视频污| 国产不卡高清在线观看视频| 久久久久久久9999| 日韩av综合中文字幕| 日本免费一区二区三区四区| 日本在线播放不卡| 蜜桃av一区二区三区| 日本在线一级片| 精品日韩av一区二区| 久草在线资源站手机版| 涩涩日韩在线| 国产裸体歌舞团一区二区| 国产一级黄色av| 国产婷婷97碰碰久久人人蜜臀| 欧美xxxx做受欧美护士| 在线免费观看成人网| 成人国产亚洲欧美成人综合网| 亚洲第一在线播放| www国产91| 国产精品色呦| wwwwww.色| 玉足女爽爽91| 牛牛热在线视频| 91视频免费在线| 国产日韩欧美三区| 手机看片国产日韩| 精品国产凹凸成av人网站| 2022成人影院| 国产一二三四五| 91色综合久久久久婷婷| 亚洲一级av毛片| 91高清在线免费观看| 久久精品国产www456c0m| 精品伦一区二区三区| 在线欧美日韩精品| 亚洲精品白浆| 日韩资源av在线| 成人一级片网址| 中文字幕乱码在线观看| 欧美极品少妇与黑人| 国产一区二区电影在线观看| 三大队在线观看| 欧美在线不卡视频| 精精国产xxxx视频在线播放| 中文字幕一区二区三区精彩视频| 99久久精品国产导航|