chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

探索Go程序的進(jìn)化可能性

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

掃碼添加小助手

加入工程師交流群

有時(shí)候,我們會(huì)想要把別種語(yǔ)言編寫(xiě)的庫(kù)嵌入到自己的程序里。這類(lèi)需求在程序員之間早已有之,但出于種種原因,這始終是個(gè)充滿(mǎn)了危險(xiǎn)、恐懼、折磨的艱難過(guò)程。

照常來(lái)講,如果想從 Go 中調(diào)用 Rust 函數(shù),那我們就必須借助 cgo 這樣的跳板。但這樣效果不錯(cuò),而且至少比親自編寫(xiě) cgo 這樣的工具方便得多。

然而,問(wèn)題是當(dāng)我們用 cgo 將 Rust 函數(shù)鏈接到 Go 程序時(shí),還得復(fù)制 Rust 生成的共享對(duì)象。我們沒(méi)法把這個(gè)共享對(duì)象簽入源代碼樹(shù)(不同操作系統(tǒng)、不同 CPU 架構(gòu)的各自系統(tǒng)分發(fā)都必須是唯一的,就像常見(jiàn)的動(dòng)態(tài)鏈接二進(jìn)制文件一樣)。所以雖然有效,但總體來(lái)講其開(kāi)發(fā)者體驗(yàn)很差。這時(shí)候就不能簡(jiǎn)單 go build,還得記得運(yùn)行 cargo build --release 并確保生成的.so、.dll 或者.dylib 位于操作系統(tǒng)動(dòng)態(tài)鏈接程序所能讀取的正確路徑。總之,一團(tuán)亂麻。

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

為什么要開(kāi)發(fā) mastosan

Mastodon 的實(shí)質(zhì)就是把素材存儲(chǔ)為 HTML 格式,再將該 HTML 呈現(xiàn)了 API 使用者。HTML 特別適合瀏覽器顯示,但對(duì) bot 來(lái)說(shuō)意義不大。所以如果目標(biāo)是 Slack webhook,那就不太合適。

下面來(lái)看 API 中的素材:

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

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

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

其內(nèi)容如下所示:

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

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

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

這條鏈接在 Slack 中的顯示效果跟其他超鏈接一樣。但隨著設(shè)計(jì)復(fù)雜度的提升,Mastodon 也會(huì)出現(xiàn)某些怪異語(yǔ)義,例如 span 不可見(jiàn)及其他一些煩人的 Slack 顯示錯(cuò)誤。我們看看以下兩條有什么區(qū)別:

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

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

如何實(shí)現(xiàn)

UNIX 理念的核心特征之一,在于將程序視為簡(jiǎn)單的過(guò)濾器。它既能很好地完成一項(xiàng)任務(wù),又允許用戶(hù)將其組合為新的、更有趣的形式。如果大家曾經(jīng)把 curl 和 jq 配合起來(lái)執(zhí)行操作,比如從 JSONFeed 中讀取數(shù)據(jù)之類(lèi),就能理解這類(lèi)實(shí)踐過(guò)程:

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

我用 Rust 編寫(xiě)了一個(gè)小程序,它使用 lol_html 來(lái)獲取傳入的 Mastodon 風(fēng)格 HTML,并發(fā)布 Slack 風(fēng)格的 markdown。用法非常簡(jiǎn)單:

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

就這么簡(jiǎn)單。它會(huì)接收標(biāo)準(zhǔn)輸入并在此之上返回結(jié)果。這跟 WebAssembly 流并不直接映射,除非用 WASI 填補(bǔ)其中的空缺。WASI 為 WebAssembly 程序提供了類(lèi)似于 POSIX 的環(huán)境,大多數(shù)基礎(chǔ)功能都可以直接起效,但這里我們只使用到它的兩個(gè)主要部分:標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出。

在 Go 中,如果將其作為普通的 OS 子進(jìn)程運(yùn)行,可以使用以下代碼:

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

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

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

Rust 允許我們使用以下編譯器標(biāo)記,構(gòu)建以 WASI 為目標(biāo)的二進(jìn)制文件:

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

這會(huì)在./target/wasm32-wasi/release/mastosan.wasm 當(dāng)中生成一個(gè)幾 MB 大小的二進(jìn)制文件。只要運(yùn)行它,就能幫我們達(dá)成目標(biāo)。

現(xiàn)在我們需要在 Go 中用這個(gè)二進(jìn)制文件。可行的辦法很多,這里我選擇使用 wazero。它的使用流程類(lèi)似于帶 os/exec 的子進(jìn)程,但也略有不同,因?yàn)槲覀兦度肓?WebAssembly。具體方法如下:

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

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

再快一點(diǎn)

這種實(shí)現(xiàn)的主要缺點(diǎn)就是速度略慢。每次調(diào)用該函數(shù)時(shí),它都必須編譯 WebAssembly 模塊。

Wazero 運(yùn)行時(shí)和編譯后的 WebAssembly 模塊代碼都可以被舉升到包級(jí)變量當(dāng)中,具體如此補(bǔ)?。╤ttps://github.com/Xe/x/commit/b61b59318be6544632ac1f64b1237bb17b2e7a32)所示。這樣就能大大改善速度問(wèn)題。用了這個(gè)補(bǔ)丁,WebAssembly 模塊只會(huì)在應(yīng)用程序啟動(dòng)時(shí)編譯一次。在使用此補(bǔ)丁前,每次運(yùn)行中的調(diào)用大概需要 0.2 秒,而使用補(bǔ)丁后的基準(zhǔn)測(cè)試結(jié)果為:

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

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

我覺(jué)得這不僅能滿(mǎn)足我個(gè)人的工作需求,也應(yīng)該會(huì)幫助更多朋友解決難題。后續(xù)我還會(huì)用更多隨機(jī) Mastodon 消息做實(shí)驗(yàn),看看它能否滿(mǎn)足要求。這種將兩個(gè)不相容的世界融合起來(lái)的感受真棒,也期待它能真正在更多實(shí)踐場(chǎng)景當(dāng)中發(fā)光發(fā)熱。

審核編輯 :李倩

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

    關(guān)注

    37

    文章

    7256

    瀏覽量

    127813
  • Go
    Go
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    12495
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4400

    瀏覽量

    66335

原文標(biāo)題:一場(chǎng)實(shí)驗(yàn):探索Go程序的進(jìn)化可能性

文章出處:【微信號(hào):AI前線,微信公眾號(hào):AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Simcenter FLOEFD擴(kuò)展設(shè)計(jì)探索模塊:通過(guò)設(shè)計(jì)探索和優(yōu)化擴(kuò)展CFD功能

    優(yōu)勢(shì)與功能優(yōu)勢(shì):通過(guò)設(shè)計(jì)探索和優(yōu)化擴(kuò)展CFD功能確定更高性能的設(shè)計(jì)系列更快探索更出色的設(shè)計(jì)使用仿真推動(dòng)創(chuàng)新顯著縮減仿真時(shí)間和成本功能:強(qiáng)大的設(shè)計(jì)探索引擎使用SHERPA算法的穩(wěn)健優(yōu)化和搜索功能利用
    的頭像 發(fā)表于 09-11 11:43 ?305次閱讀
    Simcenter FLOEFD擴(kuò)展設(shè)計(jì)<b class='flag-5'>探索</b>模塊:通過(guò)設(shè)計(jì)<b class='flag-5'>探索</b>和優(yōu)化擴(kuò)展CFD功能

    如何不使用配置實(shí)用程序對(duì)SX3進(jìn)行編程?

    我們正在探索不使用配置實(shí)用程序對(duì) SX3 進(jìn)行編程的可能性。 我知道有一個(gè) HID 示例應(yīng)用程序,但它要求 SX3 已經(jīng)打開(kāi) HID 接口,對(duì)嗎? (順便說(shuō)一句,我無(wú)法找到如何在配置實(shí)
    發(fā)表于 05-06 06:33

    從 Java 到 Go:面向?qū)ο蟮木奕伺c云原生的輕騎兵

    不同,Go 通過(guò)編譯為 單一靜態(tài)二進(jìn)制文件實(shí)現(xiàn)快速啟動(dòng)和低內(nèi)存開(kāi)銷(xiāo) , 以25個(gè)關(guān)鍵字強(qiáng)制代碼簡(jiǎn)潔 , 用接口組合替代類(lèi)繼承 , 以顯式返回error取代異常機(jī)制 和 輕量級(jí)并發(fā)模型
    的頭像 發(fā)表于 04-25 11:13 ?408次閱讀

    從 “執(zhí)行工具” 到 “智能伙伴”:工業(yè)機(jī)器人的 AI 進(jìn)化之路

    重新定義工業(yè)生產(chǎn)的可能性。富唯智能作為該領(lǐng)域的創(chuàng)新者,以自研的AI控制平臺(tái)與深度學(xué)習(xí)算法為核心,推動(dòng)工業(yè)機(jī)器人從“機(jī)械臂”向“智能體”跨越,為企業(yè)提供更高效、更靈活的解決方案。
    的頭像 發(fā)表于 03-31 15:00 ?486次閱讀
    從 “執(zhí)行工具” 到 “智能伙伴”:工業(yè)機(jī)器人的 AI <b class='flag-5'>進(jìn)化</b>之路

    鉍金屬瘋漲:中低溫焊錫膏中的鉍金屬何去何從?及其在戰(zhàn)爭(zhēng)中的應(yīng)用探索

    探討鉍金屬瘋漲背景下,中低溫焊錫膏中鉍金屬的未來(lái)走向,并探索鉍金屬在戰(zhàn)爭(zhēng)領(lǐng)域的應(yīng)用可能性。一、鉍金屬瘋漲對(duì)中低溫焊錫膏的影響中低溫焊錫膏因其較低的熔點(diǎn)和良好的潤(rùn)濕
    的頭像 發(fā)表于 03-07 13:43 ?1046次閱讀
    鉍金屬瘋漲:中低溫焊錫膏中的鉍金屬何去何從?及其在戰(zhàn)爭(zhēng)中的應(yīng)用<b class='flag-5'>探索</b>

    典范轉(zhuǎn)移 EV全生態(tài)系商機(jī) - The CAN SIC Transceiver Is Ready To Go.

    典范轉(zhuǎn)移 EV全生態(tài)系商機(jī) - The CAN SIC Transceiver Is Ready To Go.
    的頭像 發(fā)表于 01-22 17:23 ?773次閱讀
    典范轉(zhuǎn)移 EV全生態(tài)系商機(jī) - The CAN SIC Transceiver Is Ready To <b class='flag-5'>Go</b>.

    本田回應(yīng)與日產(chǎn)合并傳聞:正探索多種合作可能

    針對(duì)近日有關(guān)本田與日產(chǎn)可能合并的市場(chǎng)傳聞,本田執(zhí)行副總裁青山真司今日正式作出回應(yīng)。他表示,本田目前正在積極評(píng)估包括合并、資本合作以及成立控股公司在內(nèi)的多種可能性,以探索未來(lái)合作的新路徑。 據(jù)內(nèi)部
    的頭像 發(fā)表于 12-19 10:41 ?957次閱讀

    ADS8685采集到的數(shù)據(jù)與示波器檢測(cè)到的數(shù)據(jù)會(huì)有0.1V左右的誤差,為什么?

    現(xiàn)在在對(duì)該芯片進(jìn)行相關(guān)設(shè)置后,采集到的數(shù)據(jù)與示波器檢測(cè)到的數(shù)據(jù)會(huì)有0.1V左右的誤差,是由于該芯片的溫漂還是其他一些原因?主要不清楚是不是由于芯片的原因還是說(shuō)是由于電路的原因,或者也有可能程序的原因?想請(qǐng)教一下哪方面的可能性
    發(fā)表于 12-16 07:57

    在學(xué)習(xí)go語(yǔ)言的過(guò)程踩過(guò)的坑

    作為一個(gè)5年的phper,這兩年公司和個(gè)人都在順應(yīng)技術(shù)趨勢(shì),新項(xiàng)目慢慢從php轉(zhuǎn)向了go語(yǔ)言,從2021年到現(xiàn)在,筆者手上也先后開(kāi)發(fā)了兩個(gè)go項(xiàng)目。在學(xué)習(xí)go語(yǔ)言的過(guò)程中也學(xué)習(xí)并總結(jié)了一些相關(guān)的東西,這篇文章就分享下自己踩過(guò)的一
    的頭像 發(fā)表于 11-11 09:22 ?739次閱讀

    車(chē)路協(xié)同——探索智慧路燈系統(tǒng)的無(wú)限可能

    車(chē)路協(xié)同——探索智慧路燈系統(tǒng)的無(wú)限可能
    的頭像 發(fā)表于 11-07 12:40 ?708次閱讀
    車(chē)路協(xié)同——<b class='flag-5'>探索</b>智慧路燈系統(tǒng)的無(wú)限<b class='flag-5'>可能</b>

    微電子器件可靠失效分析程序

    微電子器件可靠失效分析程序
    的頭像 發(fā)表于 11-01 11:08 ?1991次閱讀
    微電子器件可靠<b class='flag-5'>性</b>失效分析<b class='flag-5'>程序</b>

    智慧綜合桿路燈與物聯(lián)網(wǎng)融合與發(fā)展 車(chē)路協(xié)同——探索智慧路燈系統(tǒng)的無(wú)限可能

    智慧綜合桿路燈與物聯(lián)網(wǎng)融合與發(fā)展 車(chē)路協(xié)同——探索智慧路燈系統(tǒng)的無(wú)限可能
    的頭像 發(fā)表于 10-29 16:24 ?923次閱讀
    智慧綜合桿路燈與物聯(lián)網(wǎng)融合與發(fā)展 車(chē)路協(xié)同——<b class='flag-5'>探索</b>智慧路燈系統(tǒng)的無(wú)限<b class='flag-5'>可能</b>

    go語(yǔ)言如何解決并發(fā)問(wèn)題

    作為一個(gè)后端開(kāi)發(fā),日常工作中接觸最多的兩門(mén)語(yǔ)言就是PHP和GO了。無(wú)可否認(rèn),PHP確實(shí)是最好的語(yǔ)言(手動(dòng)狗頭哈哈),寫(xiě)起來(lái)真的很舒爽,沒(méi)有任何心智負(fù)擔(dān),字符串和整型壓根就不用區(qū)分,開(kāi)發(fā)速度真的是比
    的頭像 發(fā)表于 10-23 13:38 ?678次閱讀
    <b class='flag-5'>go</b>語(yǔ)言如何解決并發(fā)問(wèn)題

    探索住宅動(dòng)態(tài)IP:連接世界的無(wú)限可能

    住宅動(dòng)態(tài)IP,作為現(xiàn)代家庭網(wǎng)絡(luò)的重要組成部分,其不斷變化的特性為用戶(hù)帶來(lái)了諸多便利和可能性。
    的頭像 發(fā)表于 10-21 07:50 ?601次閱讀

    AI如何對(duì)產(chǎn)品設(shè)計(jì)帶來(lái)更多的可能性

    AI(人工智能)對(duì)產(chǎn)品設(shè)計(jì)帶來(lái)了廣泛而深遠(yuǎn)的可能性,這些可能性主要體現(xiàn)在以下幾個(gè)方面 1.創(chuàng)新設(shè)計(jì)的激發(fā) 創(chuàng)意生成:AI能夠?qū)W習(xí)和模仿人類(lèi)設(shè)計(jì)師的創(chuàng)作過(guò)程,通過(guò)深度學(xué)習(xí)等技術(shù)生成全新的、獨(dú)特
    的頭像 發(fā)表于 10-15 11:29 ?995次閱讀