日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

看起來(lái)像是這樣:

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

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

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

    關(guān)注

    1

    文章

    975

    瀏覽量

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

    關(guān)注

    0

    文章

    92

    瀏覽量

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

    關(guān)注

    0

    文章

    103

    瀏覽量

    7024
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    241

    瀏覽量

    7661

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    AI Rust 寫(xiě)了個(gè)全新的 KiCad 兼容 EDA?但開(kāi)源社區(qū)卻吵翻了...

    “ ?聊聊一款 Rust 編寫(xiě)的 EDA 工具,具備現(xiàn)代化的 UI 并宣稱(chēng)原生兼容KiCad工程。但 KiCad 社區(qū)對(duì)此并不認(rèn)可,覺(jué)得項(xiàng)目違反了 GPL 的開(kāi)源協(xié)議...? ” 大家好。最近
    的頭像 發(fā)表于 04-29 11:42 ?1020次閱讀
    <b class='flag-5'>純</b> AI <b class='flag-5'>用</b> <b class='flag-5'>Rust</b> 寫(xiě)了個(gè)全新的 KiCad 兼容 EDA?但開(kāi)源社區(qū)卻吵翻了...

    C++與lua聯(lián)合編程

    管理”,榨干 CPU 緩存的最后滴紅利 現(xiàn)代 CPU 的運(yùn)行速度遠(yuǎn)遠(yuǎn)快于內(nèi)存讀取速度,因此,數(shù)據(jù)在 L1/L2 緩存中的命中率,直接決定了程序的執(zhí)行性能。Lua 在底層被實(shí)現(xiàn)為一段連續(xù)的內(nèi)存數(shù)組
    發(fā)表于 04-19 16:27

    虛擬化數(shù)據(jù)恢復(fù)】ESXI虛擬機(jī)還原快照致數(shù)據(jù)丟失?完整恢復(fù)方案解析

    虛擬機(jī)技術(shù)作為虛擬化技術(shù)的一種,在現(xiàn)代信息技術(shù)領(lǐng)域扮演著重要角色。虛擬化技術(shù)的核心是將事物從一種形式轉(zhuǎn)變?yōu)榱硪环N形式,它在多個(gè)方面都有廣泛應(yīng)用。 常見(jiàn)的虛擬化技術(shù),比如操作系統(tǒng)中
    的頭像 發(fā)表于 03-12 15:17 ?237次閱讀
    【<b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復(fù)】ESXI<b class='flag-5'>虛擬機(jī)</b>還原快照致數(shù)據(jù)丟失?完整恢復(fù)方案解析

    【米爾全志T153開(kāi)發(fā)板評(píng)測(cè)】虛擬機(jī)資料下載與安裝

    【前言】 米爾全志開(kāi)發(fā)板在資料中提供了虛擬機(jī)的環(huán)境,這使得開(kāi)發(fā)容易,這里講一下,下載好虛擬機(jī)包報(bào)進(jìn)行較驗(yàn)的經(jīng)驗(yàn)。 【緣由】 在米爾開(kāi)發(fā)者中心下載到Tools后,解壓,在解壓時(shí)提示頭部有問(wèn)題,因此需要
    發(fā)表于 03-10 12:29

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    使用以下命令測(cè)試,如下圖所示: 電腦端 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ò)二層地址無(wú)法互通的問(wèn)題處理

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

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

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

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

    一臺(tái)采用VsSAN分布式文件系統(tǒng)的存儲(chǔ)設(shè)備由于未知原因關(guān)機(jī)重啟。管理員發(fā)現(xiàn)上層的虛擬機(jī)不可用,存儲(chǔ)內(nèi)的數(shù)據(jù)丟失。
    的頭像 發(fā)表于 05-15 17:42 ?714次閱讀
    Vsan數(shù)據(jù)恢復(fù)——Vsan分布式文件系統(tǒng)上<b class='flag-5'>虛擬機(jī)</b>不可用的數(shù)據(jù)恢復(fù)
    防城港市| 民和| 大悟县| 武夷山市| 屏东市| 通河县| 商丘市| 嘉禾县| 茶陵县| 平潭县| 临海市| 焉耆| 同心县| 任丘市| 边坝县| 黄梅县| 盘锦市| 锦屏县| 龙州县| 新宾| 崇明县| 会泽县| 汽车| 广饶县| 朝阳市| 南京市| 姜堰市| 花莲县| 洛浦县| 沁水县| 南宫市| 涞水县| 浦东新区| 仙游县| 合肥市| 常熟市| 阿勒泰市| 马边| 沈丘县| 化隆| 莱州市|