精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品情趣视频| 葵司免费一区二区三区四区五区| 亚洲欧美日本在线| 成人性生交大片免费看小说| 麻豆av免费观看| 99久久精品一区二区成人| 91蝌蚪porny九色| 国产在线视频欧美| 日韩av一二三区| 欧美一区二区三| 欧美一区二区福利在线| 91制片厂免费观看| 日本精品久久久久久| 亚洲精品欧洲| 中文字幕精品久久| 国产av一区二区三区传媒| 亚洲精品一线| 国产亚洲视频系列| 国产成人精品自拍| 91久久精品国产91性色69| 日韩高清欧美| 日韩精品一区二区三区第95| 国产青青在线视频| 毛片在线播放a| av一区二区三区四区| 亚洲**2019国产| 麻豆精品一区二区三区视频| 日韩一区二区三区色| 悠悠色在线精品| 日韩欧美视频一区二区三区四区| 免费精品一区二区| 亚洲精品男同| 色综合久久精品亚洲国产| 97免费公开视频| 成人国产精品一区二区免费麻豆| 中文字幕乱码一区二区免费| 91亚洲va在线va天堂va国| 久久99久久99精品免费看小说| 成人黄色理论片| 欧美一a一片一级一片| 亚洲人体一区| 可以直接在线观看的av| 日本不卡中文字幕| 国产98色在线| 麻豆精品久久久久久久99蜜桃| 成人羞羞网站入口| 亚洲欧美日韩一区在线| 欧美日韩精品区别| 国产精成人品2018| 欧美性xxxxxx少妇| 亚洲色图38p| 欧美与亚洲与日本直播| 亚洲日本在线看| 亚洲综合网中心| 日本亚洲精品| 亚洲女同ⅹxx女同tv| 精品一区久久久| 特黄视频在线观看| 不卡的av网站| 久久国产精品久久精品国产| 在线免费观看av片| 久久99国产精品尤物| 97香蕉久久超级碰碰高清版| 91在线无精精品白丝| 日韩精品一区国产| 精品国产免费一区二区三区四区 | 久久99久久精品国产| 波多野结衣电车痴汉| 88国产精品视频一区二区三区| 日韩av中文字幕在线| 国产探花在线看| 国产日韩一区二区三免费高清| 欧美午夜精品久久久久久久| 色撸撸在线观看| 在线免费观看的av| 夜夜亚洲天天久久| 免费无码毛片一区二三区| 四虎久久免费| 亚洲四区在线观看| 免费拍拍拍网站| 日日av拍夜夜添久久免费| 亚洲午夜久久久久久久久电影院 | 亚洲女同中文字幕| 欧美理论电影在线观看| 男人天堂资源网| 亚洲最新色图| **欧美日韩vr在线| 中文字幕视频二区| 高清国产午夜精品久久久久久| 国产区精品在线观看| 无码人妻黑人中文字幕| 亚洲一级影院| 国产a∨精品一区二区三区不卡| 国产一级大片在线观看| 国产精品二区不卡| 久久久久亚洲精品| 高潮无码精品色欲av午夜福利| 日韩视频在线一区二区三区 | 天天想你在线观看完整版电影免费| 日韩电影免费| 国产精品免费av| 国产曰肥老太婆无遮挡| 97超碰资源站在线观看| 国产精品久久久久久久岛一牛影视| 久久艳妇乳肉豪妇荡乳av| 深夜福利视频网站| 中文字幕一区三区| 99爱视频在线| 一区二区三区国产好| 欧美精品一区二区精品网| 又色又爽又黄18网站| 日韩精品成人在线观看| 日韩亚洲欧美综合| 一级黄色录像毛片| 在线一区欧美| 99理论电影网| 免费在线视频欧美| 色婷婷精品久久二区二区蜜臀av | 日韩伦理在线一区| 777午夜精品视频在线播放| 又色又爽又黄视频| 狠狠色狠狠色综合婷婷tag| 亚洲图片制服诱惑| 五月天婷婷网站| 国产又粗又猛又爽又黄91精品| 92看片淫黄大片看国产片| 99热这里只有精品在线观看| 国产一区二区三区免费观看| 亚洲精品免费av| 波多野结衣一区二区| 国产精品久久午夜| 黄色a级片免费| 北条麻妃一区二区三区在线| 日韩av在线导航| 久久在线视频精品| 国产九九视频一区二区三区| 国产一级特黄a大片99| 精品无人乱码| 欧美日韩午夜剧场| 亚洲欧美日韩偷拍| 亚洲国产高清一区| 国产成人免费观看| 丁香花在线观看完整版电影| 日韩欧中文字幕| 国产麻豆剧传媒精品国产av| 精品日韩一区| 日韩av电影国产| 免费资源在线观看| 色老头久久综合| 亚洲国产av一区| 老司机精品福利视频| 91视频国产一区| 成人在线视频亚洲| 欧美一级在线观看| 欧美丰满艳妇bbwbbw| 老司机一区二区三区| 成人自拍性视频| 99自拍视频在线观看| 色欧美日韩亚洲| 久久只有这里有精品| 欧美96在线丨欧| eeuss一区二区三区| 91精彩在线视频| 欧美日韩国产一二三| 37p粉嫩大胆色噜噜噜| 综合久久一区| 国产精品区一区| 亚洲精华液一区二区三区| 欧美一区二区三区精品| 亚洲第一综合网| 久久精品国产第一区二区三区| 国产区欧美区日韩区| 日本三级视频在线播放| 丁香五六月婷婷久久激情| 久久久久久久久久毛片| 国产一区二区三区四区五区| 久久久久久中文字幕| 97人妻精品一区二区三区软件| 91丨九色丨黑人外教| 欧美在线观看黄| 久久男人av| 国产精品久久久久久久av电影| 手机在线不卡av| 欧美吞精做爰啪啪高潮| 久久久久久久久久久国产精品| 很黄很黄激情成人| 九色91在线视频| 欧美美女被草| 欧美极品少妇xxxxⅹ免费视频| 国产精品亚洲lv粉色| 欧美经典一区二区| 中文字幕亚洲影院| 亚洲精品免费观看| 一级特黄录像免费播放全99| 青青国产精品| 国产做受高潮69| 国产中文字幕在线视频| 色狠狠一区二区| 欧美又粗又大又长| 国产色综合久久| www.美色吧.com| 蜜臀av一区二区三区| 午夜一区二区三区| 国偷自产视频一区二区久| 久久久亚洲福利精品午夜| 亚洲av无码乱码国产精品| 亚洲美腿欧美偷拍| 中文字幕第4页| 国产成人午夜精品影院观看视频 | 成人视屏免费看| 亚洲福利精品视频| 在线一区视频| 免费网站在线观看视频| 7m精品国产导航在线| 久久免费国产视频| 日本精品在线| 在线电影av不卡网址| 亚洲综合网av| 欧美性猛交xxxx久久久| 日本性高潮视频| av一区二区三区在线| 男人的天堂99| 亚洲激情av| 欧美精品久久久久久久久老牛影院 | 波多野结衣久草一区| 国产激情在线观看| 亚洲色图综合网| 亚洲av片在线观看| 精品欧美久久久| 精品人妻一区二区三区换脸明星 | 日韩精品免费视频一区二区三区 | 日韩成人av电影| 97精品久久久中文字幕免费| 男人天堂资源在线| 亚洲国产精品久久久久秋霞蜜臀| www.日本精品| 亚洲国产精品影院| 日本妇女毛茸茸| 一区二区三区日韩欧美精品| 中国美女乱淫免费看视频| 日本美女一区二区三区| 91嫩草国产丨精品入口麻豆| 免费观看成人www动漫视频| 国产91色在线免费| 日韩伦理三区| 国产精品极品美女在线观看免费 | 台湾av在线二三区观看| 欧美丝袜第三区| 中国老头性行为xxxx| 亚洲综合免费观看高清完整版在线 | 精品国产一二三四区| 国产一区二区三区四区二区| 亚洲自拍小视频免费观看| 自拍网站在线观看| 国产91网红主播在线观看| 自拍亚洲图区| 欧美大片免费看| av色在线观看| 欧美在线视频一二三| 色yeye免费人成网站在线观看| 亚洲免费人成在线视频观看| 在线免费观看av片| 7777精品伊人久久久大香线蕉的| 亚洲日本视频在线观看| 亚洲欧洲制服丝袜| 青青草原国产视频| 亚洲成人黄色影院| 99超碰在线观看| 欧美片网站yy| 亚洲第一色视频| 日韩精品中文字幕在线| 亚洲精华国产精华精华液网站| 欧美日韩国产免费| 国产手机视频在线| 亚洲成人免费在线视频| 国产偷人妻精品一区二区在线| 色屁屁一区二区| 亚洲综合精品视频| 精品国产百合女同互慰| 99久久久国产精品无码网爆| 在线观看一区不卡| a级片在线视频| 日韩国产精品视频| 求av网址在线观看| 久久免费国产视频| 免费在线成人激情电影| 欧美在线视频观看免费网站| a级片在线免费| 国产精品久久久91| 动漫视频在线一区| 亚洲在线播放电影| 91久久综合| 中文字幕精品一区二区三区在线| 美女www一区二区| 最新国产精品自拍| 日本一区二区三区久久久久久久久不| 一区视频免费观看| 黑人精品xxx一区一二区| 国产又色又爽又黄的| 亚洲成av人片一区二区梦乃| 男女免费视频网站| 欧美亚一区二区| 网站黄在线观看| 久久在线免费观看视频| av理论在线观看| 国产精品久久久久久久7电影 | 亚洲va码欧洲m码| 日韩系列在线| 国产91在线亚洲| 青青草91视频| 亚洲中文字幕一区| 亚洲精品国产一区二区精华液 | 国精品一区二区三区| 91视频 - 88av| 日本在线不卡一区| 久久久久国产精品区片区无码| 久久久精品2019中文字幕之3| 日韩精品无码一区二区三区久久久 | 久久大片网站| 午夜日本精品| 青青草原国产在线视频| 国产成人午夜精品影院观看视频 | 欧美午夜美女看片| 国产高清免费观看| 国产午夜一区二区| 涩涩在线视频| 国产精品一区二区免费| 国产欧美一区二区精品久久久| 日韩免费电影一区二区| 国产精品久久久久一区二区三区厕所| 日本在线观看a| 91麻豆文化传媒在线观看| 丰满的亚洲女人毛茸茸| 亚洲欧美日韩精品久久久久| 精品一级少妇久久久久久久| 日韩欧美大尺度| 手机福利在线| 欧美最近摘花xxxx摘花| 少妇精品视频在线观看| 国产精品成人观看视频免费| 妖精一区二区三区精品视频| 亚洲国产精品视频一区| 91精品国产成人观看| 亚洲熟妇av日韩熟妇在线| 麻豆中文一区二区| 国产黄色录像视频| 欧美三级电影精品| aiai在线| 91精品综合视频| 天天综合久久| 中文字幕avav| 亚洲精品一卡二卡| 成人小说亚洲一区二区三区 | 久草在线视频资源| 产国精品偷在线| 亚洲激情黄色| 大又大又粗又硬又爽少妇毛片 | 亚洲视频一二三| 国产夫绿帽单男3p精品视频| 亚洲丝袜一区在线| 国产精品第一国产精品| 精品一区二区久久久久久久网站| 天天揉久久久久亚洲精品| www.爱色av.com| 久久久99免费| 亚洲一区 中文字幕| 亚洲欧美精品suv| 国产精品高潮久久| 九一免费在线观看| 99精品久久99久久久久| 玖玖爱免费视频| 日韩精品极品视频| 成人一区视频| 成年人深夜视频| 久久亚洲一区二区三区明星换脸 | 久久av免费一区| 快she精品国产999| 国产精品 欧美激情| 欧美色偷偷大香| 亚洲制服国产| 九九九九精品| 捆绑变态av一区二区三区| 亚洲AV无码片久久精品| 精品久久久久久中文字幕一区奶水| 国产深喉视频一区二区| 在线看国产精品| 视频一区在线| 能看的毛片网站| 亚洲一区二区三区视频在线播放| 国产美女www爽爽爽视频| 最近日韩中文字幕中文| 456亚洲精品成人影院| 久久99精品久久久久久秒播放器 | 欧美三级蜜桃2在线观看| 噜噜噜噜噜在线视频| 日韩av色综合| 欧美激情日韩| 国产免费嫩草影院| 亚洲精品乱码久久久久久按摩观| 欧美a级在线观看|