在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Piccolo-用純Rust實現的無棧Lua虛擬機

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 2024-01-05 09:44 ? 次閱讀

Piccolo - 用純Rust實現的無棧Lua虛擬機

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

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

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

抵御來自不受信任腳本的 DoS 攻擊(腳本不能夠導致解釋器崩潰或使用無限量的內存,并應保證在有限時間內返回控制權給調用者)。

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

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

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

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

看起來像是這樣:

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

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

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(())
}







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 虛擬機
    +關注

    關注

    1

    文章

    964

    瀏覽量

    29167
  • Lua
    Lua
    +關注

    關注

    0

    文章

    83

    瀏覽量

    10903
  • 解釋器
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6721
  • Rust
    +關注

    關注

    1

    文章

    233

    瀏覽量

    6991

原文標題:【Rust日報】Piccolo - 用純Rust實現的無棧Lua虛擬機

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    TECS OpenStack資源池虛擬機網絡二層地址無法互通的問題處理

    某運營商TECS OpenStack使用主機overlay SDN方案組網,運維人員在創建虛擬機測試虛擬機網絡狀態時發現問題:在其中一臺主機上創建兩臺同網段虛擬機虛擬機之間二層地址無
    的頭像 發表于 06-12 09:28 ?161次閱讀
    TECS OpenStack資源池<b class='flag-5'>虛擬機</b>網絡二層地址無法互通的問題處理

    hyper 備份,Hyper備份:虛擬機備份與恢復

    的解決方案。今天就為大家介紹Hyper備份:虛擬機備份與恢復。 ? ?在虛擬化環境中,備份和恢復虛擬機是確保數據安全和業務連續性的關鍵操作。Hyper-V提供了多種備份和恢復方法,幫助用戶靈活地管理
    的頭像 發表于 02-08 09:53 ?783次閱讀
    hyper 備份,Hyper備份:<b class='flag-5'>虛擬機</b>備份與恢復

    hyper v 上網,Hyper-V上網:虛擬機網絡配置

    大家介紹Hyper-V上網:虛擬機網絡配置。 ? ?在Hyper-V環境中,正確配置虛擬機的網絡設置是確保虛擬機能夠正常訪問外部網絡的關鍵。以下是詳細的Hyper-V虛擬機網絡配置指南
    的頭像 發表于 02-06 10:29 ?2976次閱讀
    hyper v 上網,Hyper-V上網:<b class='flag-5'>虛擬機</b>網絡配置

    Ubuntu系統的虛擬機安裝步驟 如何在Ubuntu系統上編譯軟件

    Ubuntu系統上安裝虛擬機的步驟 在Ubuntu系統上安裝虛擬機是一個相對簡單的過程,通常可以通過安裝VirtualBox或KVM等虛擬化軟件來實現。以下是使用VirtualBox在
    的頭像 發表于 12-12 14:36 ?1159次閱讀

    虛擬化數據恢復—XenServer虛擬機數據恢復案例

    Server操作系統虛擬機,該虛擬機有2塊虛擬磁盤(系統盤+數據盤),當作網站服務器使用。 服務器虛擬化故障: XenServer虛擬機
    的頭像 發表于 11-08 10:32 ?472次閱讀
    <b class='flag-5'>虛擬</b>化數據恢復—XenServer<b class='flag-5'>虛擬機</b>數據恢復案例

    虛擬化數據恢復——Hyper-V虛擬機數據恢復案例

    虛擬化數據恢復環境: Windows Server操作系統服務器上部署Hyper-V虛擬機環境。虛擬機的硬盤文件和配置文件存放在一臺存儲中,該存儲上有一組由4塊硬盤組建的raid5陣列,除此之外
    的頭像 發表于 10-25 09:26 ?645次閱讀
    <b class='flag-5'>虛擬</b>化數據恢復——Hyper-V<b class='flag-5'>虛擬機</b>數據恢復案例

    Lua語法基礎教程(上篇)

    意味著Lua虛擬機可以很方便的嵌入別的程序里,從而為應用程序提供靈活的擴展和定制功能。而整個Lua虛擬機編譯后僅僅一百余K,經過適當的裁剪還能做到更小,十分適合嵌入式的開發。 同時,在
    的頭像 發表于 10-24 07:17 ?759次閱讀

    虛擬機數據恢復—異常斷電導致XenServer虛擬機不可用的數據恢復案例

    虛擬機數據恢復環境: 某品牌服務器通過同品牌某型號的RAID卡,將4塊STAT硬盤為一組RAID10陣列。上層部署XenServer虛擬化平臺,虛擬機安裝Windows Server系統,每臺
    的頭像 發表于 10-21 14:17 ?497次閱讀
    <b class='flag-5'>虛擬機</b>數據恢復—異常斷電導致XenServer<b class='flag-5'>虛擬機</b>不可用的數據恢復案例

    鴻蒙跨端實踐-JS虛擬機架構實現

    在Roma跨端方案中,JS虛擬機是框架的核心,負責執行動態化的JS代碼。在Android平臺采用了基于V8的J2V8,iOS平臺則使用了系統自帶的JSCore,而在HarmonyOS中,由于業界
    的頭像 發表于 09-30 14:42 ?2914次閱讀
    鴻蒙跨端實踐-JS<b class='flag-5'>虛擬機</b>架構<b class='flag-5'>實現</b>

    虛擬化數據恢復—異常斷電導致VMware虛擬機文件丟失的數據恢復案例

    某品牌服務器(部署VMware EXSI虛擬機)+同品牌存儲(存放虛擬機文件)。
    的頭像 發表于 09-14 17:35 ?1200次閱讀
    <b class='flag-5'>虛擬</b>化數據恢復—異常斷電導致VMware<b class='flag-5'>虛擬機</b>文件丟失的數據恢復案例

    虛擬化數據恢復—EXSI虛擬機誤還原快照如何恢復數據?

    虛擬化技術原理是將硬件虛擬化供不同的虛擬機使用,一臺物理機上可以有多臺虛擬機。人為誤操作或者物理故障會導致上層
    的頭像 發表于 09-09 11:56 ?661次閱讀
    <b class='flag-5'>虛擬</b>化數據恢復—EXSI<b class='flag-5'>虛擬機</b>誤還原快照如何恢復數據?

    什么是虛擬機?什么是虛擬化?

    在日新月異的科技世界中,虛擬化技術如同一座橋梁,連接著現實與數字的鴻溝,為我們打開了全新的計算維度。虛擬機,這一概念,自其誕生以來,就以其獨特的魅力和強大的功能,深深地影響了軟件開發、系統測試和云計算等多個領域。即使目前你還不了解它的應用,你應該也聽過
    的頭像 發表于 09-04 14:55 ?2051次閱讀

    創建ubuntu虛擬機

    英文的習慣。創建ubuntu虛擬機打開VMware軟件,點擊創建新的虛擬機。進入以下界面:選擇自定義,點擊“下一步”。選擇對應VMware版本的兼容性,版本可在幫助->關于VMware
    發表于 08-10 14:15

    虛擬機數據恢復—KVM虛擬機被誤刪除的數據恢復案例

    虛擬機數據恢復環境: Linux操作系統服務器,EXT4文件系統。服務器中有數臺KVM虛擬機虛擬機1:主數據庫服務器 虛擬磁盤:系統盤(qcow2)+數據盤(raw)
    的頭像 發表于 08-07 13:33 ?739次閱讀
    <b class='flag-5'>虛擬機</b>數據恢復—KVM<b class='flag-5'>虛擬機</b>被誤刪除的數據恢復案例

    什么是虛擬機虛擬機真的那么好用嗎?

    在日新月異的科技世界中,虛擬化技術如同一座橋梁,連接著現實與數字的鴻溝,為我們打開了全新的計算維度。虛擬機,這一概念,自其誕生以來,就以其獨特的魅力和強大的功能,深深地影響了軟件開發、系統測試和云
    的頭像 發表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機</b>?<b class='flag-5'>虛擬機</b>真的那么好用嗎?
    主站蜘蛛池模板: 国产视频国产 | 午夜精品影院 | 天天操天天干天天操 | 97人洗澡人人澡人人爽 | 天天色天天色天天色 | 激情综合网婷婷 | 亚洲不卡网 | 绝色村妇的泛滥春情 | 久久精品国产2020观看福利色 | 娇妻被黑人蹂躏 | 人人干人人搞 | 中文字幕一二三区乱码老 | 日本在线观看成人小视频 | 日日干天天爽 | 女性一级全黄生活片免费看 | 视频h在线观看 | 中国国产aa一级毛片 | 免费四虎永久在线精品 | 精品福利 | 日本久久黄色 | 2022欧美高清中文字幕在线看 | 黄色大片三级 | 操你啦在线播放 | 97人人插| 男女刺激性视频大片 | 免费看的黄视频 | 午夜黄大色黄大片美女图片 | 四虎最新网址入口 | 成人精品一级毛片 | 成人a视频| 成人黄色激情网 | 手机在线看片福利 | 91大神在线视频观看 | 人人干天天操 | 九九九精品 | 中文字幕天堂 | 毛片网站免费 | 天天狠天天干 | 在线永久免费观看黄网站 | 国产成人教育视频在线观看 | 久久99久久精品免费思思6 |