哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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ù)嵌入到自己的程序里。這類需求在程序員之間早已有之,但出于種種原因,這始終是個(gè)充滿了危險(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)鏈接程序所能讀取的正確路徑??傊粓F(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ì)用戶來(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

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

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

UNIX 理念的核心特征之一,在于將程序視為簡(jiǎn)單的過(guò)濾器。它既能很好地完成一項(xiàng)任務(wù),又允許用戶將其組合為新的、更有趣的形式。如果大家曾經(jīng)把 curl 和 jq 配合起來(lái)執(zhí)行操作,比如從 JSONFeed 中讀取數(shù)據(jù)之類,就能理解這類實(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 程序提供了類似于 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)制文件??尚械霓k法很多,這里我選擇使用 wazero。它的使用流程類似于帶 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ǔ)丁(https://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é)得這不僅能滿足我個(gè)人的工作需求,也應(yīng)該會(huì)幫助更多朋友解決難題。后續(xù)我還會(huì)用更多隨機(jī) Mastodon 消息做實(shí)驗(yà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

    文章

    7437

    瀏覽量

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

    關(guān)注

    0

    文章

    45

    瀏覽量

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

    關(guān)注

    3

    文章

    4422

    瀏覽量

    67836

原文標(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)推薦

    探索FMS6501:12輸入/9輸出視頻開(kāi)關(guān)矩陣的卓越性能與應(yīng)用

    矩陣,為我們提供了豐富的功能和廣泛的應(yīng)用可能性。本文將深入剖析FMS6501的特點(diǎn)、性能參數(shù)、接口協(xié)議以及實(shí)際應(yīng)用,幫助電子工程師更好地了解和使用這款產(chǎn)品。 文件下載
    的頭像 發(fā)表于 04-11 14:05 ?102次閱讀

    探索MAX606評(píng)估套件:設(shè)計(jì)與應(yīng)用指南

    可能性。 文件下載: MAX606EVKIT.pdf 一、套件概述 MAX606評(píng)估套件(EV kit)是一款經(jīng)過(guò)全面組裝和測(cè)試的表面貼裝印刷電路板。它能夠在3V至5V的輸入電壓下,提供最高200mA的+5V穩(wěn)壓輸出。該套件中的MAX606芯片工作頻率最高可達(dá)1MHz,這使得它可以使用小型外部組件,在
    的頭像 發(fā)表于 04-03 14:55 ?130次閱讀

    探索DeepSeek多樣化技術(shù)路徑,英特爾架構(gòu)師用至強(qiáng)CPU嘗鮮

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

    探索MAX4484,解鎖單電源運(yùn)放新可能

    探索MAX4484/MAX4486/MAX4487,解鎖單電源運(yùn)放新可能 在電子設(shè)計(jì)領(lǐng)域,運(yùn)算放大器作為基礎(chǔ)且關(guān)鍵的元件,其性能直接影響著整個(gè)電路的表現(xiàn)。今天,我們就來(lái)深入探討一下Maxim
    的頭像 發(fā)表于 01-27 16:25 ?337次閱讀

    探索TDK SmartMotion DK-UNIVERSAL-I開(kāi)發(fā)套件:硬件用戶指南

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

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

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

    探索 BTS3xxxEJ 演示板:強(qiáng)大低側(cè)開(kāi)關(guān)的實(shí)用之選

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

    低成本TLI4971/TLE4971電流傳感器評(píng)估套件——MS2Go與S2Go

    低成本TLI4971/TLE4971電流傳感器評(píng)估套件——MS2Go與S2Go 在電子工程師的日常工作中,電流傳感器的評(píng)估和應(yīng)用是一個(gè)重要的環(huán)節(jié)。今天我們要介紹的是英飛凌(Infineon
    的頭像 發(fā)表于 12-19 16:50 ?1140次閱讀

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開(kāi)啟3D磁傳感器評(píng)估之旅

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

    快速自動(dòng)聚焦:索尼FCB-CR8530破解工業(yè)動(dòng)態(tài)檢測(cè)難題

    隨著AI視覺(jué)技術(shù)的發(fā)展,索尼FCB-CR8530的應(yīng)用邊界不斷拓展。未來(lái),索尼FCB-CR8530有望成為智慧城市、工業(yè)巡檢與生態(tài)監(jiān)測(cè)的核心視覺(jué)中樞,通過(guò)不斷進(jìn)化的算法與硬件創(chuàng)新,為儀器檢測(cè)領(lǐng)域帶來(lái)更多可能性
    的頭像 發(fā)表于 11-10 16:14 ?507次閱讀
    快速自動(dòng)聚焦:索尼FCB-CR8530破解工業(yè)動(dòng)態(tài)檢測(cè)難題

    探索無(wú)限可能:生成式推薦的演進(jìn)、前沿與挑戰(zhàn)

    TL;DR 過(guò)去一年間,生成式推薦取得了長(zhǎng)足的實(shí)質(zhì)進(jìn)展,特別是在憑借大型語(yǔ)言模型強(qiáng)大的序列建模與推理能力提升整體推薦性能方面。基于LLM(Large Language Models, LLMs
    的頭像 發(fā)表于 10-20 16:42 ?6964次閱讀
    <b class='flag-5'>探索</b>無(wú)限<b class='flag-5'>可能</b>:生成式推薦的演進(jìn)、前沿與挑戰(zhàn)

    詳解芯片制造中的可測(cè)設(shè)計(jì)

    然而,隨著納米技術(shù)的出現(xiàn),芯片制造過(guò)程越來(lái)越復(fù)雜,晶體管密度增加,導(dǎo)致導(dǎo)線短路或斷路的概率增大,芯片失效可能性大大提升。測(cè)試費(fèi)用可達(dá)到制造成本的50%以上。
    的頭像 發(fā)表于 10-16 16:19 ?2980次閱讀
    詳解芯片制造中的可測(cè)<b class='flag-5'>性</b>設(shè)計(jì)

    電動(dòng)閥門(mén)領(lǐng)域的后起之秀:舵機(jī),速度與精度并重

    在閥門(mén)的世界里,舵機(jī)作為一種較為冷門(mén)的技術(shù),正以其獨(dú)特的優(yōu)勢(shì)和無(wú)限的可能性,引領(lǐng)著行業(yè)的變革。今天,就讓我們一起走進(jìn)這個(gè)神奇的領(lǐng)域,探索舵機(jī)如何改變閥門(mén)行業(yè),以及它所蘊(yùn)含的無(wú)限商機(jī)。
    的頭像 發(fā)表于 06-11 17:14 ?971次閱讀
    電動(dòng)閥門(mén)領(lǐng)域的后起之秀:舵機(jī),速度與精度并重

    如何不使用配置實(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)銷 , 以25個(gè)關(guān)鍵字強(qiáng)制代碼簡(jiǎn)潔 , 用接口組合替代類繼承 , 以顯式返回error取代異常機(jī)制 和 輕量級(jí)并發(fā)模型
    的頭像 發(fā)表于 04-25 11:13 ?749次閱讀
    阿克苏市| 达日县| 松潘县| 隆德县| 农安县| 太谷县| 杨浦区| 扎兰屯市| 盘山县| 融水| 旬邑县| 罗定市| 保康县| 枞阳县| 乌兰浩特市| 那坡县| 永福县| 莆田市| 昌黎县| 普定县| 宜都市| 浑源县| 个旧市| 南丰县| 饶阳县| 灌阳县| 黄骅市| 德格县| 沈阳市| 泸定县| 翁牛特旗| 黄大仙区| 永顺县| 房山区| 夏津县| 民丰县| 温州市| 布尔津县| 德江县| 隆林| 宝清县|