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

Elixir 和 Rust 是一個很好的組合

譯文 精選
開發(fā) 前端
這篇文章是關于將 Rust 與 Elixir 結合使用,幾分鐘內(nèi)搞定并運行。

一、?問題

我們需要執(zhí)行 CPU 密集型或系統(tǒng)級編程任務,而hex.pm中沒有好的解決方案,在這個例子中,我們假設沒有好的方法可以使用 Elixir 進行圖像處理。

通常情況下,有一個名為image的高質(zhì)量 Rust 庫聲稱它就是解決方案!但是糟糕,我們的整個應用程序已經(jīng)用 Elixir 編寫了,我們真的不知道如何很好地使用Rust。

Elixir 如何轉(zhuǎn)向 Rust 代碼以實現(xiàn)高性能操作?

二、解決方案

輸入rustler,這個庫旨在使使用 Rust 及其包生態(tài)系統(tǒng)變得簡單。讓我們開始吧!

按照入門指南,首先將rustler添加到我們的mix.exs文件中:

{:rustler, "~> 0.27.0"}

一旦我們運行mix deps.get使用內(nèi)置的 mix 任務來生成我們的空 rust 項目:

mix rustler.new

This is the name of the Elixir module the NIF module will be registered to.

Module name > MyApp.RustImage

This is the name used for the generated Rust crate. The default is most likely fine.

Library name (myapp_rustimage) > rust_image

* creating native/rust_image/.cargo/config.toml

* creating native/rust_image/README.md

* creating native/rust_image/Cargo.toml

* creating native/rust_image/src/lib.rs

* creating native/rust_image/.gitignore

Ready to go! See /Users/me/projects/my_app/native/rust_image/README.md for further instructions

你應該去打開它README.md,但我會幫你省去麻煩,我們需要制作一個 Elixir 模塊,其中l(wèi)ib/my_app/rust_image.ex包含以下內(nèi)容:

defmodule MyApp.RustImage do

use Rustler, otp_app: :my_app, crate: "rust_image"

# When your NIF is loaded, it will override this function.

def add(_a, _b), do: :erlang.nif_error(:nif_not_loaded)

end

從那時起,我們準備好做一些 Rust。默認的生成器給了我們一個add/2實現(xiàn)的函數(shù)讓native/rust_image/src/lib.rs我們來看看

#[rustler::nif]

fn add(a: i64, b: i64) -> i64 {

a + b

}

rustler::init!("Elixir.MyApp.RustImage", [add]);

三、什么是 NIF?

Native Implemented Functions 是 BEAM 允許進程直接調(diào)用本地函數(shù)的方法。他們通常有大量的樣板文件,你需要認真清理內(nèi)存、處理錯誤和確保安全。幸運的是,這就是 Rust 的全部!例如這里是 Erlang NIF 教程。我們不需要做任何這些!

我們的超級優(yōu)化代碼將添加兩個大小為 i64 的整數(shù)并返回結果。請注意此處 Rustler 的特定部分:

  • #[rustler::nif]是一個宏,告訴 Rustler 將此函數(shù)公開為 NIF。
  • rustler::init!("Elixir.MyApp.RustImage", [add]);這將初始化 Erlang NIF 運行時,以便 beam 可以將add/2函數(shù)放在模塊上Elixir.MyApp.RustImage并替換我們留下的存根。

這太棒了。看看這是否有效,讓我們開火iex -S mix

iex(1)> MyApp.RustImage.add(100, 20)

12

如果第一次一切正常,你應該已經(jīng)看到 cargo 在發(fā)布模式下構建應用程序并在打開 iex 術語之前成功。如果你還沒有安裝 Rust,它會顯示一個錯誤,你可以按照通常的方式安裝 Rust 。

Rustler 甚至很聰明,會自動重新編譯,保持 iex 打開并更改我們的lib.rs

#[rustler::nif]

fn add(a: i64, b: i64) -> i64 {

a + b + 1

}

保存然后再次打開正在運行的 iex 會話:

iex(2)> r(MyApp.RustImage)

... truncated output of cargo doing it's thing an maybe some beam warnings

{:reloaded, [MyApp.RustImage]}

iex(3)> MyApp.RustImage.add(1,1)

3

極好的!我們得到了相同的工作流程和與 Elixir 一起工作的好處,而對 Rust 的煩惱最少。

四、圖片

首先將我們的圖像依賴項添加到我們的Cargo.toml文件中:

[dependencies]

rustler = "0.27.0"

image = "0.24.6"

然后改變我們lib.rs創(chuàng)建一個函數(shù),它接受一個input路徑,一個output路徑,quality并將任何圖像更改為具有我們設置質(zhì)量的 JPEG。

use image::io::Reader as ImageReader;

use image::codecs::jpeg::JpegEncoder;

use std::fs::File;

#[rustler::nif]

fn jpg(input: String, output: String, quality: i64) -> Result<String, String> {

let img = ImageReader::open(&input).unwrap().decode().unwrap();

let out_file = std::fs::File::create(&output).unwrap();

let mut jpg = JpegEncoder::new_with_quality(&out_file, quality as u8);

jpg.encode_image(&img).unwrap();

Ok(output.to_string())

}

// add code...

rustler::init!("Elixir.MyApp.RustImage", [add, jpg]);

我們還想更新我們的 RustImage 模塊以包含一個存根jpg/3,但這留給讀者作為練習。

現(xiàn)在讓我們試試吧!iex -S mix

iex(1)> MyApp.RustImage.jpg("input.png", "output.jpeg", 75)

{:ok, "output.jpeg"}

和繁榮!我們已將 PNG 轉(zhuǎn)換為 JPEG,質(zhì)量為 75%。

五、做一個良好的 BEAM 公民

我們還應該在這里考慮一件事,那就是 CPU 負載。雖然此功能可能會在我們的筆記本電腦上立即運行,但在部署時可能需要更長時間才能共享 CPU/RAM。

而且因為 BEAM 直接運行我們的代碼,它會鎖定運行時直到它完成運行。我們所說的直接意思是,當使用 NIF 時,beam 會像對待任何其他代碼一樣對待它,主要的警告是它不能自動搶占 Rust 代碼。

在 BEAM 上,這是一個大問題,因為整個運行時都希望能夠隨時在數(shù)百萬個進程之間切換上下文。

幸運的是 Rustler 和 BEAM 團隊已經(jīng)想到了這一點并給了我們一個解決方案。只需將該宏更改為此jpeg即可

-- #[rustler::nif]

++ #[rustler::nif(schedule = "DirtyCpu")]

這告訴 Rustler 和 BEAM 以一種在它工作時不會阻塞整個世界的方式自動安排它。再次令人驚嘆,這被稱為 DirtyNif,當你通過 C 手動使用它時,使用起來會更加困難。

六、部署

使用 Docker 將其部署到 Fly.io 并不是那么自動,我們需要進行一些小的更改,以便我們的 Docker 環(huán)境可以構建 Rust。首先,通過在我們的 Elixir 構建步驟之前添加一個構建步驟來更新 Dockerfile:

#... ARG stuff..

FROM rust:1.68.0 as rust

# install build dependencies

RUN apt-get update -y && apt-get install -y build-essential git \

&& apt-get clean && rm -f /var/lib/apt/lists/*_*

workdir /app

COPY native/rust_images ./

RUN cargo rustc --release

#..Elixir builder.....

# compile assets

RUN mix assets.deploy

#NEW STUFF

COPY --from=rust /app/target/release/librust_images.so priv/native/librust_images.so

#/NEW

# Compile the release

RUN mix compile

然后更新我們config/prod.exs添加以下行:

config :my_app, MyApp.RustImage,

crate: :rust_image,

skip_compilation?: true,

load_from: {:my_app, "priv/native/librust_image"}

我們在這里所做的是在其自己的 Docker 構建器上下文中構建庫,因此它與我們其余的 Docker 步驟并行運行并且可以輕松緩存。然后我們告訴 Rustler 跳過編譯并直接從我們放置它的地方加載它。

我們都準備好了,fly deploy你就可以出發(fā)了!

七、討論

關于結合使用 NIF 和 Rust 的強大功能,我們只是真正觸及了皮毛。從加載海量數(shù)據(jù)集到做科學研究再到通過 WebRTC 進行連接,Rust 社區(qū)已經(jīng)構建了一套令人印象深刻的包和工具,現(xiàn)在我們也可以使用這些包和工具。Rustler 使之成為可能!

原文鏈接:https://fly.io/phoenix-files/elixir-and-rust-is-a-good-mix/

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2021-04-13 06:35:13

Elixir語言編程語言軟件開發(fā)

2015-11-23 16:27:35

人工智能

2023-04-24 12:57:01

數(shù)據(jù)中心綜合布線

2023-07-11 13:34:19

Rust開發(fā)軟件

2024-06-07 08:59:35

2025-02-27 00:00:15

2020-09-16 23:00:15

Rust編程語言開發(fā)

2010-09-10 15:32:53

SQL函數(shù)日期格式化

2021-01-03 16:30:34

Rust編程語言

2012-07-20 09:51:56

贊揚管理藝術管理

2017-07-13 12:33:15

戴爾

2012-09-18 01:33:34

程序員創(chuàng)意開發(fā)者

2024-01-09 18:00:22

Rust后端slvelte

2024-02-28 07:48:05

Rust項目框架

2024-07-10 08:51:29

2024-02-27 07:33:32

搜索引擎Rust模型

2022-04-10 23:02:08

GoRust語言

2016-11-02 00:22:13

數(shù)字化改造數(shù)字化

2021-07-06 14:36:05

RustLinux內(nèi)核模塊

2021-08-02 08:21:53

Python編程語言開發(fā)
點贊
收藏

51CTO技術棧公眾號

www黄色日本| 韩国成人av| 日韩欧美国产成人精品免费| 99tv成人影院| 亚洲五码中文字幕| 久久伦理网站| 一区二区不卡视频在线观看| 99精品视频在线观看播放| 欧美三电影在线| 91免费版看片| 国产一级在线| 成人美女在线观看| 国产精品久久久久久久久久小说| 国产精品白嫩白嫩大学美女| 亚洲宅男一区| 日韩一区二区免费在线观看| 国产熟人av一二三区| 伊人手机在线| 欧美国产激情一区二区三区蜜月| 99在线视频首页| 国产在线一级片| 日韩午夜在线| 麻豆成人在线看| 中文字幕 自拍| 久久精品论坛| 日韩欧美资源站| 91n.com在线观看| 理论片午夜视频在线观看| 亚洲视频免费看| 色播亚洲婷婷| 美丽的姑娘在线观看免费动漫| 国产福利91精品| 国产精品午夜一区二区欲梦| 国产精品男女视频| 影音先锋中文字幕一区| 久久综合88中文色鬼| www亚洲色图| 亚洲人成网站77777在线观看| 日韩久久免费av| 老司机午夜性大片| 国产精品亲子伦av一区二区三区| 黄色精品一区二区| 国产va亚洲va在线va| 日本在线观看大片免费视频| 综合分类小说区另类春色亚洲小说欧美| 日韩欧美精品一区二区三区经典| 丝袜视频国产在线播放| 成人在线综合网| 国产精品theporn88| 99久久一区二区| 国产综合久久久久久久久久久久 | 国产真实乱在线更新| av亚洲免费| 亚洲网站在线看| 美女久久久久久久久久| 亚洲人成伊人成综合图片| 亚洲国产精品一区二区久| 久久福利小视频| 国产精品1luya在线播放| 欧美成人精品高清在线播放 | 国产第一页在线观看| 亚洲一区一卡| 国产成人综合一区二区三区| 国产成人无码专区| 日韩成人一区二区三区在线观看| 国产v综合ⅴ日韩v欧美大片| 一级片免费在线播放| 石原莉奈在线亚洲三区| 国产精品久久久久7777婷婷| 亚洲男人天堂网址| 九九热在线视频观看这里只有精品| 国产精品香蕉在线观看| 国产成人三级一区二区在线观看一 | 国产成人福利av| 亚洲精品电影久久久| jizz欧美性20| 日韩免费在线| 欧美黑人又粗大| 欧美三级一区二区三区| 久久国产精品亚洲77777| 国产精品视频免费在线观看| 国产剧情久久久| 99热国产精品| 视频一区三区| 青草视频在线免费直播| 欧美日韩中文字幕日韩欧美| 亚欧美在线观看| 99ri日韩精品视频| 亚洲四色影视在线观看| 伊人久久久久久久久久久久久久| 国内久久精品| 国产精品91久久| 国产毛片久久久久| 99国内精品久久| 亚洲自拍偷拍二区| 成入视频在线观看| 欧美日韩二区三区| 日本xxxx裸体xxxx| 久久久久久美女精品| 欧美一级大片视频| 精品区在线观看| 国产欧美中文在线| 久久成人福利视频| 国产精品麻豆成人av电影艾秋| 亚洲第一黄色网| 中国特黄一级片| 亚洲欧洲一区| 91久久精品视频| 你懂的在线看| 亚洲午夜免费视频| 中文av字幕在线观看| 丝袜连裤袜欧美激情日韩| 精品国产一区二区三区久久| 久草视频在线观| 国产69精品久久久久毛片| 亚洲精品人成| 另类专区亚洲| 亚洲精品电影网在线观看| 神马午夜精品91| 日日夜夜精品视频天天综合网| 国产精品v欧美精品∨日韩| 日本免费视频在线观看| 91高清在线观看| 97人妻精品一区二区三区免| 欧美高清日韩| 91视频免费在线| 1024免费在线视频| 色婷婷综合五月| 一本加勒比波多野结衣| 亚洲婷婷免费| 亚洲综合在线做性| 久操视频在线播放| 精品1区2区3区| 亚洲码无人客一区二区三区| 国产欧美一区二区色老头| 99久热re在线精品996热视频| 男女啪啪在线观看| 欧美无砖专区一中文字| 日本精品在线观看视频| 翔田千里一区二区| 久久五月天婷婷| 久草免费在线视频| 日韩成人在线视频| 国产成人在线播放视频| 99re66热这里只有精品3直播| 日韩激情视频一区二区| 91成人噜噜噜在线播放| 欧美黑人又粗大| 成人毛片在线免费观看| 亚洲影院免费观看| 女同性αv亚洲女同志| 中文字幕日韩一区二区不卡| 69174成人网| 三级福利片在线观看| 日韩欧美一区二区不卡| 免费一级全黄少妇性色生活片| 国产成人一区二区精品非洲| 久久福利一区二区| 成人动态视频| 51久久精品夜色国产麻豆| 欧美香蕉爽爽人人爽| 欧洲国产伦久久久久久久| 美女100%露胸无遮挡| 麻豆成人免费电影| 异国色恋浪漫潭| 538任你躁精品视频网免费| 久久久久久久久久久国产| 天堂在线观看视频| 色菇凉天天综合网| 国产大屁股喷水视频在线观看| 精品一区二区三区在线播放视频 | 成人性生交大免费看| 日本麻豆一区二区三区视频| 伊人久久大香线蕉精品| 欧美专区一区| 51精品国产黑色丝袜高跟鞋| 二区在线观看| 91精品国产欧美日韩| 免费一级特黄特色大片| 95精品视频在线| 亚洲国产精品三区| 欧美高清不卡| 欧美久久综合性欧美| 成人在线视频国产| 性欧美亚洲xxxx乳在线观看| 国产中文字幕在线播放| 69堂亚洲精品首页| 精品国产乱码一区二区| 国产精品嫩草影院av蜜臀| 绯色av蜜臀vs少妇| 日韩精品一二三| 国产免费内射又粗又爽密桃视频| 美女主播精品视频一二三四| 国产精品高潮呻吟久久av黑人| 最新国产在线拍揄自揄视频| 亚洲精品永久免费精品| 国产精品久久久久毛片| 狠狠色噜噜狠狠狠狠97| 91大神福利视频| 99在线视频精品| 国产精品自在自线| 美女日韩在线中文字幕| 成人在线观看毛片| 欧美日韩精品一区二区视频| 国产98在线|日韩| 日韩福利影视| 日韩av手机在线| 俺来俺也去www色在线观看| 少妇精69xxtheporn| 五月婷婷开心中文字幕| 欧美日韩一区二区在线观看 | 久久精品一二三区| 激情不卡一区二区三区视频在线| 国产脚交av在线一区二区| 黄色小说在线播放| 久久成人精品视频| 中文日本在线观看| 亚洲区一区二区| 人妻少妇一区二区三区| 欧美一区二区精品| 一区二区视频免费| 一本到一区二区三区| 日韩少妇高潮抽搐| 夜夜嗨av一区二区三区| 操她视频在线观看| 中文字幕成人在线观看| 熟女俱乐部一区二区| 99麻豆久久久国产精品免费优播| 天堂网成人在线| 老司机精品视频一区二区三区| 免费在线激情视频| 夜久久久久久| 秋霞无码一区二区| 精品成人国产| 日本天堂免费a| 欧美激情四色| 国产免费一区二区三区四在线播放| 日韩视频在线观看| 日本欧美色综合网站免费| 香蕉精品久久| 鲁鲁视频www一区二区| 精品精品国产毛片在线看| 91国产丝袜在线放| 久久av网站| 亚洲综合成人婷婷小说| 久久九九精品视频| 97人人澡人人爽| 亚洲天堂中文字幕在线观看| 粉嫩高清一区二区三区精品视频 | 久久久无码精品亚洲国产| 亚洲老司机在线| 久久久久久久九九九九| 亚洲愉拍自拍另类高清精品| 久久久久成人精品无码| 亚洲综合色婷婷| 国产精品suv一区二区69| 黑人巨大精品欧美一区二区三区| 天天干天天干天天操| 色综合一个色综合| 中文字幕你懂的| 4438x成人网最大色成网站| 国产av无码专区亚洲av麻豆| 日韩区在线观看| 亚洲欧洲精品视频| 在线播放日韩欧美| a视频在线播放| 性亚洲最疯狂xxxx高清| 在线观看的黄色| 国产精品一区电影| 日韩在线网址| 国新精品乱码一区二区三区18| 免费视频一区三区| 亚洲综合欧美日韩| 黄色在线一区| 男人插女人下面免费视频| 久久精品国产免费看久久精品| www.偷拍.com| 97精品国产97久久久久久久久久久久| 国产成人精品无码免费看夜聊软件| 国产精品视频免费| 九九久久免费视频| 在线看国产一区二区| 99热这里只有精品1| 亚洲跨种族黑人xxx| 免费黄色电影在线观看| 羞羞色国产精品| 中文字幕日韩亚洲| 激情伦成人综合小说| 日韩一区三区| 欧美一区二区三区爽大粗免费| 蜜臀va亚洲va欧美va天堂| 亚洲婷婷在线观看| 中文字幕高清一区| 久久精品亚洲无码| 欧美三级中文字| 天天色天天操天天射| 日韩一区二区三区xxxx| 日韩深夜视频| 97超碰最新| 日韩精品永久网址| 亚洲欧洲日产国码无码久久99| 激情六月婷婷综合| av中文字幕免费观看| 一区二区高清免费观看影视大全| 看黄色一级大片| 亚洲国产小视频| 2020国产在线视频| 国产精品自产拍在线观看| 牛牛影视久久网| 黄色污污在线观看| 日韩av成人高清| 国产中文字幕一区二区| 亚洲影院理伦片| 国产免费久久久| 一本一道久久a久久精品逆3p| 97在线超碰| 999国产在线| 91精品国产调教在线观看| 男人舔女人下面高潮视频| 成人黄色大片在线观看 | 欧美做受喷浆在线观看| 亚洲欧美日韩国产一区二区三区| 亚洲图片欧美日韩| 亚洲精品一区二区网址| 超级白嫩亚洲国产第一| 99蜜桃在线观看免费视频网站| 国产精品成久久久久| 黄色免费网址大全| 久久综合九色综合97婷婷女人 | 日韩三级电影| 在线亚洲激情| 屁屁影院国产第一页| 亚洲一区二区av电影| av 一区二区三区| 久久伊人精品天天| 色999久久久精品人人澡69| 日韩午夜视频在线观看| 日日夜夜精品免费视频| 中文字幕一区二区三区人妻| 狠狠干狠狠久久| 国产区视频在线| 国产精品极品美女粉嫩高清在线| 欧美激情在线免费| 天天干在线影院| 国产精品天美传媒| 亚洲熟女乱色一区二区三区久久久| 中文字幕精品www乱入免费视频| 91tv亚洲精品香蕉国产一区| 日本一区二区三区在线视频| 老司机午夜精品视频在线观看| 91国模少妇一区二区三区| 日本韩国一区二区三区视频| 国产高清在线看| 国产精品日日做人人爱| 日韩在线看片| 久久久精品视频国产| 亚洲一本大道在线| 天堂在线视频免费| 欧美在线视频观看| 精品国产91乱码一区二区三区四区 | 51漫画成人app入口| 精品国产乱码久久久久软件 | 亚洲黄网站黄| 国产中文字幕一区二区| 色999日韩国产欧美一区二区| 成人精品一区二区三区校园激情| 国产一区视频在线播放| 亚洲欧美一级二级三级| 亚洲精品国产成人av在线| 欧美丝袜第一区| 在线观看二区| 91九色蝌蚪嫩草| av不卡免费看| 日韩黄色中文字幕| 日韩欧美国产wwwww| 亚洲欧美se| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲欧美综合一区二区| 国产精品一久久香蕉国产线看观看| 91精品一区二区三区综合在线爱| 中文字幕视频观看| 日韩欧美在线网址| 免费黄网在线观看| 精品在线观看一区二区| 蜜桃久久久久久久| 久草成人在线视频| 国产亚洲欧美aaaa| 久久久久久爱| 成人精品视频一区二区| 亚洲三级理论片| 三级视频在线| 亚洲自拍偷拍第一页| 日韩激情一二三区| 久久机热这里只有精品| 国产亚洲视频在线| 爱爱精品视频| 不用播放器的免费av| 日韩欧美在线网址| av资源一区| 宅男一区二区三区|