国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

探索Go程序的進化可能性

jf_WZTOguxH ? 來源:AI前線 ? 作者:AI前線 ? 2022-12-05 14:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有時候,我們會想要把別種語言編寫的庫嵌入到自己的程序里。這類需求在程序員之間早已有之,但出于種種原因,這始終是個充滿了危險、恐懼、折磨的艱難過程。

照常來講,如果想從 Go 中調用 Rust 函數,那我們就必須借助 cgo 這樣的跳板。但這樣效果不錯,而且至少比親自編寫 cgo 這樣的工具方便得多。

然而,問題是當我們用 cgo 將 Rust 函數鏈接到 Go 程序時,還得復制 Rust 生成的共享對象。我們沒法把這個共享對象簽入源代碼樹(不同操作系統、不同 CPU 架構的各自系統分發都必須是唯一的,就像常見的動態鏈接二進制文件一樣)。所以雖然有效,但總體來講其開發者體驗很差。這時候就不能簡單 go build,還得記得運行 cargo build --release 并確保生成的.so、.dll 或者.dylib 位于操作系統動態鏈接程序所能讀取的正確路徑??傊粓F亂麻。

這是個大問題,也是 Nix 和 NixOS 存在的原因。想象一下,當我們把通用操作系統組件混入其中,情況會有多么復雜。但令人驚訝的是,這樣操作又是真實有效的。那么,如果說有一種方法能讓我們從 Rust 發布一個二進制文件,它能在 Go 所支持的任何平臺上正常起效;而且只需簡單的 go build 就行、不必修改任何構建過程呢?一想就知道能這樣可太棒了。對用戶來說,他們雖然使用相應的包或程序,卻根本感受不到有 Rust 參與其中。我的這個 mastosan 包就是這樣的解決方案。下面我想跟大家聊聊它的開發過程以及存在的原因。

為什么要開發 mastosan

Mastodon 的實質就是把素材存儲為 HTML 格式,再將該 HTML 呈現了 API 使用者。HTML 特別適合瀏覽器顯示,但對 bot 來說意義不大。所以如果目標是 Slack webhook,那就不太合適。

下面來看 API 中的素材:

e4de4282-745f-11ed-8abf-dac502259ad0.png

e4f5a13e-745f-11ed-8abf-dac502259ad0.png

e52a35ac-745f-11ed-8abf-dac502259ad0.png

其內容如下所示:

e5504026-745f-11ed-8abf-dac502259ad0.png

理想情況下,我們當然希望它在 Slack 中也有相同的語義,比如像這樣:

e5854e92-745f-11ed-8abf-dac502259ad0.png

這條鏈接在 Slack 中的顯示效果跟其他超鏈接一樣。但隨著設計復雜度的提升,Mastodon 也會出現某些怪異語義,例如 span 不可見及其他一些煩人的 Slack 顯示錯誤。我們看看以下兩條有什么區別:

e5a82804-745f-11ed-8abf-dac502259ad0.png

很明顯,這兩條跟人類正常思維的契合度就不一樣。

如何實現

UNIX 理念的核心特征之一,在于將程序視為簡單的過濾器。它既能很好地完成一項任務,又允許用戶將其組合為新的、更有趣的形式。如果大家曾經把 curl 和 jq 配合起來執行操作,比如從 JSONFeed 中讀取數據之類,就能理解這類實踐過程:

e5cdddce-745f-11ed-8abf-dac502259ad0.png

我用 Rust 編寫了一個小程序,它使用 lol_html 來獲取傳入的 Mastodon 風格 HTML,并發布 Slack 風格的 markdown。用法非常簡單:

e5ecfe20-745f-11ed-8abf-dac502259ad0.png

就這么簡單。它會接收標準輸入并在此之上返回結果。這跟 WebAssembly 流并不直接映射,除非用 WASI 填補其中的空缺。WASI 為 WebAssembly 程序提供了類似于 POSIX 的環境,大多數基礎功能都可以直接起效,但這里我們只使用到它的兩個主要部分:標準輸入和標準輸出。

在 Go 中,如果將其作為普通的 OS 子進程運行,可以使用以下代碼:

e6318a90-745f-11ed-8abf-dac502259ad0.png

e653d96a-745f-11ed-8abf-dac502259ad0.png

但這仍然要求程序針對本機 OS 和發行版進行編譯,而且必須存在于 $PATH 文件夾內。所以有效,但還不夠完美。

Rust 允許我們使用以下編譯器標記,構建以 WASI 為目標的二進制文件:

e6643210-745f-11ed-8abf-dac502259ad0.png

這會在./target/wasm32-wasi/release/mastosan.wasm 當中生成一個幾 MB 大小的二進制文件。只要運行它,就能幫我們達成目標。

現在我們需要在 Go 中用這個二進制文件。可行的辦法很多,這里我選擇使用 wazero。它的使用流程類似于帶 os/exec 的子進程,但也略有不同,因為我們嵌入了 WebAssembly。具體方法如下:

e681935a-745f-11ed-8abf-dac502259ad0.png

意思基本是一樣的:設置環境、加載 WASM 模塊,然后運行。主要區別在于,這里我沒有把二進制文件作為機器碼從磁盤上加載,而是使用 go:embed 將預編譯的 WebAssembly 模塊嵌入到了二進制文件中。也就是說,只要 WebAssembly 模塊的位置符合要求,那生成的 Go 程序就能正常工作。

再快一點

這種實現的主要缺點就是速度略慢。每次調用該函數時,它都必須編譯 WebAssembly 模塊。

Wazero 運行時和編譯后的 WebAssembly 模塊代碼都可以被舉升到包級變量當中,具體如此補?。╤ttps://github.com/Xe/x/commit/b61b59318be6544632ac1f64b1237bb17b2e7a32)所示。這樣就能大大改善速度問題。用了這個補丁,WebAssembly 模塊只會在應用程序啟動時編譯一次。在使用此補丁前,每次運行中的調用大概需要 0.2 秒,而使用補丁后的基準測試結果為:

e6a89de2-745f-11ed-8abf-dac502259ad0.png

可以看到,最佳用時從 0.2 秒下降到了 0.3 毫秒,意味著性能至少提升了 1000 倍。這意味著大部分時間可能都花在了 HTML 解析器上,而不是無關緊要的其他部分。

我覺得這不僅能滿足我個人的工作需求,也應該會幫助更多朋友解決難題。后續我還會用更多隨機 Mastodon 消息做實驗,看看它能否滿足要求。這種將兩個不相容的世界融合起來的感受真棒,也期待它能真正在更多實踐場景當中發光發熱。

審核編輯 :李倩

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

    關注

    37

    文章

    7401

    瀏覽量

    129282
  • Go
    Go
    +關注

    關注

    0

    文章

    45

    瀏覽量

    12568
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67501

原文標題:一場實驗:探索Go程序的進化可能性

文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    探索DeepSeek多樣化技術路徑,英特爾架構師用至強CPU嘗鮮

    獨立運行整個Engram模塊,并使用其內置的英特爾? AMX(高級矩陣擴展)技術對其進行加速的初步成果或收獲。 我們希望這次分享,或能作為參考,或是作為開端,能為未來Engram以及集成它的大模型的部署和實踐,拓展和探明更多可能性及隨之而來的潛在應用優勢。 Engram設計初衷
    的頭像 發表于 02-05 11:13 ?311次閱讀
    <b class='flag-5'>探索</b>DeepSeek多樣化技術路徑,英特爾架構師用至強CPU嘗鮮

    探索MAX4484,解鎖單電源運放新可能

    探索MAX4484/MAX4486/MAX4487,解鎖單電源運放新可能 在電子設計領域,運算放大器作為基礎且關鍵的元件,其性能直接影響著整個電路的表現。今天,我們就來深入探討一下Maxim
    的頭像 發表于 01-27 16:25 ?253次閱讀

    探索TDK SmartMotion DK-UNIVERSAL-I開發套件:硬件用戶指南

    了解一下TDK的SmartMotion Development Kit (DK) DK - UNIVERSAL - I,看看它能為我們帶來哪些便利和可能性。 文件下載: TDK InvenSense
    的頭像 發表于 12-25 17:15 ?596次閱讀

    XENSIV? DPS310/368 Pressure Sensor 2Go Kit :高精度壓力傳感解決方案

    的壓力和溫度測量解決方案。 文件下載: Infineon Technologies DPS368 Kit2Go.pdf 二、套件特性總結 (一)兼容與便捷 該套件與 Arduino IDE 兼容,能夠讓開
    的頭像 發表于 12-20 11:30 ?1273次閱讀

    探索 BTS3xxxEJ 演示板:強大低側開關的實用之選

    為工程師、愛好者和學生們帶來哪些便利和可能性。 文件下載: Infineon Technologies BTS3035EJ演示板.pdf 文檔概述 這份文檔主要是對 BTS3xxxEJ 演示板的快速介紹
    的頭像 發表于 12-19 16:55 ?574次閱讀

    低成本TLI4971/TLE4971電流傳感器評估套件——MS2Go與S2Go

    低成本TLI4971/TLE4971電流傳感器評估套件——MS2Go與S2Go 在電子工程師的日常工作中,電流傳感器的評估和應用是一個重要的環節。今天我們要介紹的是英飛凌(Infineon
    的頭像 發表于 12-19 16:50 ?829次閱讀

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開啟3D磁傳感器評估之旅

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開啟3D磁傳感器評估之旅 在電子工程師的日常工作中,評估和開發磁傳感器是一項常見且重要的任務。英飛凌(Infineon
    的頭像 發表于 12-18 17:15 ?811次閱讀

    快速自動聚焦:索尼FCB-CR8530破解工業動態檢測難題

    隨著AI視覺技術的發展,索尼FCB-CR8530的應用邊界不斷拓展。未來,索尼FCB-CR8530有望成為智慧城市、工業巡檢與生態監測的核心視覺中樞,通過不斷進化的算法與硬件創新,為儀器檢測領域帶來更多可能性
    的頭像 發表于 11-10 16:14 ?395次閱讀
    快速自動聚焦:索尼FCB-CR8530破解工業動態檢測難題

    探索無限可能:生成式推薦的演進、前沿與挑戰

    TL;DR 過去一年間,生成式推薦取得了長足的實質進展,特別是在憑借大型語言模型強大的序列建模與推理能力提升整體推薦性能方面?;贚LM(Large Language Models, LLMs
    的頭像 發表于 10-20 16:42 ?6366次閱讀
    <b class='flag-5'>探索</b>無限<b class='flag-5'>可能</b>:生成式推薦的演進、前沿與挑戰

    詳解芯片制造中的可測設計

    然而,隨著納米技術的出現,芯片制造過程越來越復雜,晶體管密度增加,導致導線短路或斷路的概率增大,芯片失效可能性大大提升。測試費用可達到制造成本的50%以上。
    的頭像 發表于 10-16 16:19 ?2768次閱讀
    詳解芯片制造中的可測<b class='flag-5'>性</b>設計

    電動閥門領域的后起之秀:舵機,速度與精度并重

    在閥門的世界里,舵機作為一種較為冷門的技術,正以其獨特的優勢和無限的可能性,引領著行業的變革。今天,就讓我們一起走進這個神奇的領域,探索舵機如何改變閥門行業,以及它所蘊含的無限商機。
    的頭像 發表于 06-11 17:14 ?859次閱讀
    電動閥門領域的后起之秀:舵機,速度與精度并重

    如何不使用配置實用程序對SX3進行編程?

    我們正在探索不使用配置實用程序對 SX3 進行編程的可能性。 我知道有一個 HID 示例應用程序,但它要求 SX3 已經打開 HID 接口,對嗎? (順便說一句,我無法找到如何在配置實
    發表于 05-06 06:33

    從 Java 到 Go:面向對象的巨人與云原生的輕騎兵

    不同,Go 通過編譯為 單一靜態二進制文件實現快速啟動和低內存開銷 , 以25個關鍵字強制代碼簡潔 , 用接口組合替代類繼承 , 以顯式返回error取代異常機制 和 輕量級并發模型
    的頭像 發表于 04-25 11:13 ?644次閱讀

    從 “執行工具” 到 “智能伙伴”:工業機器人的 AI 進化之路

    重新定義工業生產的可能性。富唯智能作為該領域的創新者,以自研的AI控制平臺與深度學習算法為核心,推動工業機器人從“機械臂”向“智能體”跨越,為企業提供更高效、更靈活的解決方案。
    的頭像 發表于 03-31 15:00 ?902次閱讀
    從 “執行工具” 到 “智能伙伴”:工業機器人的 AI <b class='flag-5'>進化</b>之路

    鉍金屬瘋漲:中低溫焊錫膏中的鉍金屬何去何從?及其在戰爭中的應用探索

    探討鉍金屬瘋漲背景下,中低溫焊錫膏中鉍金屬的未來走向,并探索鉍金屬在戰爭領域的應用可能性。一、鉍金屬瘋漲對中低溫焊錫膏的影響中低溫焊錫膏因其較低的熔點和良好的潤濕
    的頭像 發表于 03-07 13:43 ?1514次閱讀
    鉍金屬瘋漲:中低溫焊錫膏中的鉍金屬何去何從?及其在戰爭中的應用<b class='flag-5'>探索</b>