91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Piccolo-用純Rust實(shí)現(xiàn)的無棧Lua虛擬機(jī)

jf_wN0SrCdH ? 來源:Rust語言中文社區(qū) ? 2024-01-05 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Piccolo - 用純Rust實(shí)現(xiàn)的無棧Lua虛擬機(jī)

Piccolo,原名luster,在經(jīng)過數(shù)年的中斷后,于2023年4月悄然恢復(fù)了開發(fā)。曾經(jīng)開發(fā)過 rlua 的 kyren,在底層gc-arenacrate 取得突破后,回到了piccolo項目。這兩個項目現(xiàn)在已經(jīng)(小心地)在生產(chǎn)中使用,比如 Fish Folk 用在了游戲腳本中,Ruffle 用于其 ActionScript 虛擬機(jī)。 如今兩個重要版本的發(fā)布了:piccolo v0.3.0 和 gc-arena v0.5。 Piccolo項目的目標(biāo),按大致優(yōu)先級降序排列:

成為一個可以工作、有用的 Lua 解釋器。

成為一種簡單而可靠的方式,用于安全地隔離不受信任的Lua腳本。

抵御來自不受信任腳本的 DoS 攻擊(腳本不能夠?qū)е陆忉屍鞅罎⒒蚴褂脽o限量的內(nèi)存,并應(yīng)保證在有限時間內(nèi)返回控制權(quán)給調(diào)用者)。

提供一種安全地將 Rust API 綁定到 Lua 的簡便方法,具有對異常情況和邊緣情況具有處理的綁定系統(tǒng),并且用戶類型可以安全地參與運(yùn)行時垃圾回收。

與某些版本的 PUC-Rio Lua 兼容。

不要過于緩慢(例如,避免不必要的抽象化)。

使用 Rust 生成 IP 地址的 PNG 圖片

看起來像是這樣:

c5f4c42c-ab0e-11ee-8b88-92fbcf53809c.png

原文是一個詳盡的教程,告訴讀者如何一步一步的實(shí)現(xiàn)這個例子,感興趣的可以查看原文。最終實(shí)現(xiàn)其實(shí)代碼很簡潔:

use std::{io::Cursor, net::SocketAddr, sync::OnceLock};

use axum::{
extract::ConnectInfo,
http::{header, StatusCode},
response::IntoResponse,
routing::get,
Router,
};
use image::{ImageBuffer, ImageOutputFormat, Rgb};
use imageproc::drawing::draw_text_mut;
use rusttype::{Font, Scale};

const X: i32 = 8;
const Y: i32 = 96;
const WIDTH: u32 = 256;
const HEIGHT: u32 = WIDTH;
const TEXT_COLOR: Rgb= Rgb([235, 219, 178]);
const BACKGROUND_COLOR: Rgb= Rgb([177, 98, 134]);
const SCALE: Scale = Scale { x: 32.0, y: 32.0 };
const FONT_DATA: &[u8] = include_bytes!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/fonts/UbuntuMono-R.ttf"
));

#[derive(Debug, thiserror::Error)]
#[error("Failed to generate image: {0}")]
struct AvatarError(#[from] image::ImageError);

impl IntoResponse for AvatarError {
fn into_response(self) -> axum::response::Response {
(StatusCode::INTERNAL_SERVER_ERROR, self.to_string()).into_response()
}
}

fn font() -> &'static Font<'static> {
static FONT: OnceLock= OnceLock::new();
FONT.get_or_init(|| Font::try_from_bytes(FONT_DATA).expect("Built-in font data was invalid"))
}

async fn avatar(
ConnectInfo(addr): ConnectInfo,
) -> Result {
// Wow, IPv6 causes a lot of headache.
let ip = addr.ip().to_canonical();
letmut img = ImageBuffer::from_pixel(WIDTH, HEIGHT, BACKGROUND_COLOR);

draw_text_mut(&mut img, TEXT_COLOR, X, Y, SCALE, font(), "Hello,");
let y = Y + SCALE.y asi32;
draw_text_mut(&mut img, TEXT_COLOR, X, y, SCALE, font(), &format!("{ip}!"));

letmut cursor = Cursor::new(vec![]);
img.write_to(&mut cursor, ImageOutputFormat::Png)?;

Ok(([(header::CONTENT_TYPE, "image/png")], cursor.into_inner()))
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
let app = Router::new().route("/avatar.png", get(avatar));

let listener = tokio::net::TcpListener::bind("[::]:3000").await?;
let make_service = app.into_make_service_with_connect_info::();
axum::serve(listener, make_service).await?;
Ok(())
}







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    972

    瀏覽量

    30462
  • Lua
    Lua
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    11452
  • 解釋器
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    6991
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    240

    瀏覽量

    7585

原文標(biāo)題:【Rust日報】Piccolo - 用純Rust實(shí)現(xiàn)的無棧Lua虛擬機(jī)

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    虛擬機(jī)數(shù)據(jù)恢復(fù)—虛擬機(jī)vmdk文件被刪除的數(shù)據(jù)恢復(fù)案例

    本次數(shù)據(jù)恢復(fù)涉及一臺R710系列服務(wù)器和一臺MD3200系列存儲,上層是ESXI5.5版本的虛擬機(jī)虛擬文件。因客戶機(jī)房非正常斷電,虛擬機(jī)無法啟動。機(jī)房管理員檢查發(fā)現(xiàn)虛擬機(jī)配置文件丟失
    的頭像 發(fā)表于 02-10 17:05 ?177次閱讀
    <b class='flag-5'>虛擬機(jī)</b>數(shù)據(jù)恢復(fù)—<b class='flag-5'>虛擬機(jī)</b>vmdk文件被刪除的數(shù)據(jù)恢復(fù)案例

    Lua基礎(chǔ)語法更新篇(上)

    初識 Lua ? Lua 是一種輕量小巧的腳本語言,它用標(biāo)準(zhǔn)C語言編寫并以源代碼形式開放。這意味著什么呢?這意味著Lua虛擬機(jī)可以 很方便的嵌入別的程序里 ,從而為應(yīng)用程序提供靈活的擴(kuò)
    的頭像 發(fā)表于 01-23 19:56 ?81次閱讀
    <b class='flag-5'>Lua</b>基礎(chǔ)語法更新篇(上)

    Arm架構(gòu)助力Azure Cobalt 100虛擬機(jī)工作負(fù)載性能提升

    自從微軟推出基于 Arm 架構(gòu)的 Azure Cobalt 100 虛擬機(jī) (VM) 以來,已有眾多客戶選擇這款新實(shí)例運(yùn)行各類例。目前,Cobalt 100 虛擬機(jī)已在全球微軟 Azure 云
    的頭像 發(fā)表于 12-15 14:42 ?652次閱讀
    Arm架構(gòu)助力Azure Cobalt 100<b class='flag-5'>虛擬機(jī)</b>工作負(fù)載性能提升

    虛擬機(jī)數(shù)據(jù)恢復(fù)—異常斷電致ESXI存儲失聯(lián)?這份實(shí)戰(zhàn)數(shù)據(jù)恢復(fù)案例請收好

    服務(wù)器存儲數(shù)據(jù)恢復(fù)環(huán)境: 一臺服務(wù)器上部署esxi虛擬化平臺。上層采用通過FreeNAS構(gòu)建的iSCSI方式FCSAN功能,F(xiàn)reeNAS層采用UFS2文件系統(tǒng)。 esxi虛擬化系統(tǒng)有3臺虛擬機(jī)
    的頭像 發(fā)表于 11-11 14:11 ?257次閱讀

    蜂鳥e203在虛擬機(jī)unbuntu上面驗(yàn)證時報錯的可能原因及解決措施

    內(nèi)容:蜂鳥e203在虛擬機(jī)unbuntu上面驗(yàn)證時報錯的可能原因 現(xiàn)象: 解決措施: 蜂鳥e203在虛擬機(jī)unbuntu上面驗(yàn)證時不要重復(fù)輸入命令: make install make compile SIM=iverilog 只需輸入一遍
    發(fā)表于 10-24 08:27

    搭建自己的ubuntu系統(tǒng)之創(chuàng)建ubuntu虛擬機(jī)

    打開VMware軟件,點(diǎn)擊創(chuàng)建新的虛擬機(jī)。進(jìn)入以下界面:選擇自定義,點(diǎn)擊“下一步”。選擇對應(yīng)VMware版本的兼容性,版本可在幫助-&gt;關(guān)于VMware Workstation中
    發(fā)表于 09-25 09:39

    中軟國際鴻云虛擬機(jī)安裝指南

    鴻蒙電腦作為新一代分布式計算平臺,憑借其卓越的多端協(xié)同能力和智能化特性,為高效辦公提供了新選擇。針對專業(yè)軟件兼容性這一核心痛點(diǎn),中軟國際的鴻云虛擬機(jī)解決方案提供了務(wù)實(shí)的技術(shù)路徑。作為專為鴻蒙生態(tài)打造
    的頭像 發(fā)表于 06-23 16:31 ?4188次閱讀

    迅為RK3588開發(fā)板掛載Windows以及虛擬機(jī)Ubuntu測試

    使用以下命令測試,如下圖所示: 電腦端 IP 為 192.168.1.96 共享文件夾為 share-tian 虛擬機(jī) Ubuntu 端 IP 為 192.168.1.6 共享文件夾為 samba
    發(fā)表于 06-19 10:32

    TECS OpenStack資源池虛擬機(jī)網(wǎng)絡(luò)二層地址無法互通的問題處理

    某運(yùn)營商TECS OpenStack使用主機(jī)overlay SDN方案組網(wǎng),運(yùn)維人員在創(chuàng)建虛擬機(jī)測試虛擬機(jī)網(wǎng)絡(luò)狀態(tài)時發(fā)現(xiàn)問題:在其中一臺主機(jī)上創(chuàng)建兩臺同網(wǎng)段虛擬機(jī),虛擬機(jī)之間二層地址無
    的頭像 發(fā)表于 06-12 09:28 ?877次閱讀
    TECS OpenStack資源池<b class='flag-5'>虛擬機(jī)</b>網(wǎng)絡(luò)二層地址無法互通的問題處理

    虛擬化數(shù)據(jù)恢復(fù)—XenServer虛擬化平臺上VPS不可用的數(shù)據(jù)恢復(fù)案例

    虛擬化環(huán)境: 某品牌720服務(wù)器中有一組通過型號為H710P的RAID卡+4塊STAT硬盤組建的RAID10,上層部署Xen Server服務(wù)器虛擬化平臺。虛擬機(jī)安裝的Windows Server
    的頭像 發(fā)表于 05-30 11:35 ?690次閱讀
    <b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復(fù)—XenServer<b class='flag-5'>虛擬</b>化平臺上VPS不可用的數(shù)據(jù)恢復(fù)案例

    Vsan數(shù)據(jù)恢復(fù)——Vsan分布式文件系統(tǒng)上虛擬機(jī)不可用的數(shù)據(jù)恢復(fù)

    一臺采用VsSAN分布式文件系統(tǒng)的存儲設(shè)備由于未知原因關(guān)機(jī)重啟。管理員發(fā)現(xiàn)上層的虛擬機(jī)不可用,存儲內(nèi)的數(shù)據(jù)丟失。
    的頭像 發(fā)表于 05-15 17:42 ?571次閱讀
    Vsan數(shù)據(jù)恢復(fù)——Vsan分布式文件系統(tǒng)上<b class='flag-5'>虛擬機(jī)</b>不可用的數(shù)據(jù)恢復(fù)

    分布式存儲數(shù)據(jù)恢復(fù)—虛擬機(jī)上hbase和hive數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例

    分布式存儲數(shù)據(jù)恢復(fù)環(huán)境: 16臺某品牌R730xd服務(wù)器節(jié)點(diǎn),每臺服務(wù)器節(jié)點(diǎn)上有數(shù)臺虛擬機(jī)虛擬機(jī)上部署Hbase和Hive數(shù)據(jù)庫。 分布式存儲故障: 數(shù)據(jù)庫底層文件被誤刪除,數(shù)據(jù)庫不能使用。要求恢復(fù)hbase和hive數(shù)據(jù)庫。
    的頭像 發(fā)表于 04-17 11:05 ?713次閱讀

    Linux內(nèi)核編譯失敗?移動硬盤和虛擬機(jī)的那些事兒

    Linux開發(fā)中,編譯內(nèi)核是一項常見任務(wù),但不少開發(fā)者在移動硬盤或虛擬機(jī)環(huán)境下嘗試時會遭遇失敗。本文將簡要探討這些問題的成因,并介紹一些虛擬機(jī)使用技巧,幫助大家更好地應(yīng)對相關(guān)問題。在移動硬盤里編譯
    的頭像 發(fā)表于 04-11 11:36 ?991次閱讀
    Linux內(nèi)核編譯失?。恳苿佑脖P和<b class='flag-5'>虛擬機(jī)</b>的那些事兒

    Linux 5.15.52_2.1.0 (Yocto) 是否支持Xen虛擬機(jī)管理程序?

    我正在使用 Yocto 和 i.MX8QM 板,我對 Xen 支持有幾個問題: Linux 5.15.52_2.1.0 (Yocto) 是否支持 Xen 虛擬機(jī)管理程序? If yes
    發(fā)表于 03-27 06:17

    【貝啟科技BQ3568HM開源鴻蒙開發(fā)板深度試用報告】3-ubuntu18.04虛擬機(jī)開發(fā)環(huán)境搭建

    虛擬機(jī)選擇 為了方便開發(fā),我選擇了采用虛擬機(jī)安裝Ubuntu系統(tǒng)。 我的虛擬機(jī)版本如下: Ubuntu18.04系統(tǒng)安裝 根據(jù)官方建議,我選擇了這個版本的系統(tǒng)。 話不多說,直接安裝: 快捷鍵
    發(fā)表于 03-18 11:28