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

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

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

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

cargo-offline命令解讀

jf_wN0SrCdH ? 來(lái)源:Rust語(yǔ)言中文社區(qū) ? 作者:Rust語(yǔ)言中文社區(qū) ? 2022-12-01 15:41 ? 次閱讀

cargo-offline命令

cargo-offline是標(biāo)準(zhǔn)cargo命令的包裝器。其被用來(lái),根據(jù)·距離cargo-offline命令執(zhí)行目錄最近的Cargo.toml文件是否被修改過(guò),來(lái)給被包裝的cargo命令條件地增補(bǔ)--offline命令行參數(shù)(即,離線編譯)。形象地講,就是將cargo check條件地變形為cargo check --offline

  1. 項(xiàng)目鏈接:https://github.com/stuartZhang/cargo-offline

  2. 包倉(cāng)庫(kù)鏈接:https://crates.io/crates/cargo-offline

  3. 代碼也精彩,真不是簡(jiǎn)單的代碼堆疊,而是有套路,和講套路的。

    1. 先點(diǎn)個(gè)star

    2. 再直接導(dǎo)航至:https://github1s.com/stuartZhang/cargo-offline

動(dòng)機(jī)

最近一段時(shí)間,github.com訪問(wèn)的穩(wěn)定性實(shí)在很差。但,執(zhí)行cargo命令總是要求

  • 首先,同步crates.io-index索引清單。

  • 然后,執(zhí)行目標(biāo)任務(wù)

于是,日常開發(fā)/編譯工作流就時(shí)常被阻塞于


	

warning: spurious network error (1 tries remaining): [35] SSL connect error (schannel: failed to receive handshake, SSL/TLS connection failed); class=Net (12) Caused by: Unable to update registry `crates-io` Caused by: failed to fetch `https://github.com/rust-lang/crates.io-index` Caused by: [35] SSL connect error (schannel: failed to receive handshake, SSL/TLS connection failed); class=Net (12)

網(wǎng)絡(luò)錯(cuò)誤上。這實(shí)在令人感覺挫敗!

另一方面,雖然“搬梯子”能夠緩解問(wèn)題,但面對(duì)頻繁的cargo check/run指令執(zhí)行(特別是,莫名其妙出現(xiàn)的“全量索引同步”現(xiàn)象),其“按流量·計(jì)費(fèi)”的經(jīng)濟(jì)成本著實(shí)令人肉疼。

所以,我下定決心在業(yè)余時(shí)間搞一個(gè)【條件·離線·編譯】的命令行工具,來(lái)拯救自己于迷茫。

最理想的使用模型

  • 首次編譯·或·在依賴項(xiàng)變更時(shí),cargo命令才【連線】編譯與同步本地的crates.io-index索引清單 —— 有限且可控的“搬梯子”還是可以經(jīng)濟(jì)承受的。

  • 在所有其它時(shí)候,cargo命令皆【離線】編譯 —— 沒事少連線github.com。

工作原理

cargo-offline命令會(huì)

  1. 透?jìng)魉忻钚袇?shù)給底層的cargo指令

  2. 尋找距離cargo-offline執(zhí)行目錄最近的Cargo.toml文件,無(wú)論該配置文件

    1. 是【工作區(qū)workspace】配置文件

    2. 還是【工作區(qū)·成員workspace.member】配置文件。

  3. 比較被找到的Cargo.toml文件·是否·被修改過(guò) —— 就是對(duì)比該文件的【最后·修改時(shí)間】屬性值是否發(fā)生了變化。

  4. Cargo.toml文件的·最后修改時(shí)間·變化了,就給被透?jìng)鞯膮?shù)列表額外添加--offline參數(shù)項(xiàng)。

  5. 于是,cargo命令就會(huì)進(jìn)入【離線模式】編譯了。

Cargo.toml文件修改時(shí)間的保存位置

判斷Cargo.toml文件·是否·被修改過(guò),關(guān)鍵需要:

  • 緩存·在上一次編譯時(shí)·讀取的Cargo.toml文件【修改時(shí)間】屬性值

  • 再,使用【緩存·時(shí)間值】與當(dāng)前【文件修改時(shí)間】比大小

就將Cargo.toml文件【修改時(shí)間】保存于何處,cargo-offline程序提供了兩套備選方案:

  • 直接保存到Cargo.toml文件自身里,和作為***.metadata配置塊內(nèi)一個(gè)鍵值對(duì)。

    • toml crate編輯過(guò)的Cargo.toml文件,它內(nèi)部

    • 程序·會(huì)額外地依賴cargo_toml crate。所以,編譯輸出的二進(jìn)制文件會(huì)更大那么一點(diǎn)點(diǎn)兒。

    • 編譯指令·會(huì)額外地開啟【不穩(wěn)定featurefile_set_times

    • “配置塊”會(huì)被重新排序

    • “雙引號(hào)”會(huì)被替換為“單引號(hào)”。

    • 不會(huì)在工程目錄下引入新文件了。

    • 也不用修改.gitignore文件添加例外規(guī)則了。

    • 就【工作區(qū)】而言,保存配置塊是[workspace.metadata]

    • 就【工作區(qū)·成員】和【普通工程】而言,保存配置塊是[package.metadata]

    • 優(yōu)點(diǎn):

    • 缺點(diǎn):

  • 保存于獨(dú)立的*.toml配置文件內(nèi)。

    • 需手工地向.gitignore文件添加cargo-offline-config.toml文件名。

    • Cargo.toml文件可保持“無(wú)損”。

    • 少一個(gè)程序依賴項(xiàng)

    • 避免開啟【不穩(wěn)定feature

    • 即,與Cargo.toml文件同目錄的cargo-offline-config.toml文件。目前,此文件名是在代碼內(nèi)被硬編碼的。

    • 優(yōu)點(diǎn):

    • 缺點(diǎn):

值得一提的是,**Cargo.toml文件【修改時(shí)間】保存位置的選擇是【編譯時(shí)·決策】,而不是【運(yùn)行時(shí)·決策】。**即,

  • Cargo features作為編譯條件

  • 根據(jù)不同的決策選擇

  • 編譯輸出不一樣的二進(jìn)制行可執(zhí)行文件作為結(jié)果。

安裝

此命令行工具crate已經(jīng)被發(fā)布至crates.io包倉(cāng)庫(kù)。所以,我就未對(duì)各主流平臺(tái)與架構(gòu)準(zhǔn)備·預(yù)編譯包(感謝偉大的包管理器!)。

  • 選擇緩存Cargo.toml文件【修改時(shí)間】至Cargo.toml [metadata]的同學(xué),執(zhí)行這條安裝指令:

    
    			

    cargo install cargo-offline --features=cargo-metadata

  • 選擇緩存Cargo.toml文件【修改時(shí)間】至cargo-offline-config.toml獨(dú)立文件的同學(xué),執(zhí)行這條安裝指令:

    
    			

    cargo install cargo-offline --features=toml-config

因?yàn)槲覜]有給Cargo Package設(shè)置default features,所以完全忽略--features=命令行參數(shù)會(huì)導(dǎo)致源碼編譯錯(cuò)誤。惡作劇地,同時(shí)指定--features=cargo-metadata--features=toml-config也會(huì)導(dǎo)致編譯失敗。

一旦被安裝成功之后,cargo-offline.exe可執(zhí)行文件就會(huì)

  • 出現(xiàn)在%CARGO_HOME%in目錄下

  • PATH環(huán)境變量劃定的搜索范圍,可見

  • 可從命令行直接運(yùn)行

使用

cargo-offline命令的執(zhí)行也有兩種方式可供選擇:

  1. 作為獨(dú)立命令,執(zhí)行cargo-offline。后隨和標(biāo)準(zhǔn)cargo命令相同的命令行參數(shù)(這些參數(shù)會(huì)被透?jìng)鹘ocargo指令的)。比如,

    
    			

    cargo-offline check

  2. 作為cargo指令的子命令,執(zhí)行cargo offline。比如,

    
    			

    cargo offline check

cargo-offline的命令行參數(shù)與cargo完全相同,因?yàn)?code style="background:rgb(251,241,199);font-family:'Source Code Pro', 'Fira Code', Menlo, Monaco, Consolas, 'DejaVu Sans Mono', Inconsolata, 'Courier New', monospace;">cargo-offline僅只做了透?jìng)魈幚怼?/p>

源碼也精彩,歡迎來(lái)品鑒

不是語(yǔ)句的堆疊,而是講究了“套路”。被涉及到的【設(shè)計(jì)模式】包括但不限于:

  1. 【條件編譯】plus【策略·設(shè)計(jì)模式】 —— 解決Cargo.toml文件【修改時(shí)間】保存位置的選擇問(wèn)題。

    1. 【策略·模式】大約對(duì)等于OOP里的【控制反轉(zhuǎn)IoCplus【依賴注入DI】的組合。在我的代碼,從IoC容器到DI注入項(xiàng)都是自寫的。

    2. 欲深入了解【策略·模式】的細(xì)節(jié)理論,我推薦文章淺聊Rust【策略·設(shè)計(jì)模式】Strategy / Policy design pattern —— 歡迎點(diǎn)贊、發(fā)評(píng)論與轉(zhuǎn)發(fā)分享。

  2. Builder設(shè)計(jì)模式 —— 解決struct局部初始化的問(wèn)題。

    1. 其大約對(duì)等于OOP里【工廠模式】。

    2. 但,親手給每個(gè)struct編寫Builder,那不是傻嗎!多大的工作量呀!我的選擇是derive_builder。

  3. Option / Result枚舉類的“拆/裝箱”配合器【Combinator模式】 —— 避免丑陋且有panic風(fēng)險(xiǎn)的.unwrap()“拆箱”操作。

    1. 有那么一點(diǎn)兒ramda鏈?zhǔn)胶瘮?shù)調(diào)用的感覺了。餒餒的【函數(shù)編程·范式】。

  4. 規(guī)則宏macro-by-example—— 避免代碼重復(fù)。

    1. 這是【結(jié)構(gòu)相同·但·類型不同】代碼塊復(fù)用的利器呀!

    2. 以【宏】的思維來(lái)復(fù)用代碼,得花費(fèi)一段時(shí)間來(lái)適應(yīng)。

關(guān)于·編譯

重要,十分重要:因?yàn)椤静环€(wěn)定featurefile_set_times在程序中被條件地開啟,所以該Cargo Package工程依賴的rustup工具鏈被鮮明地鎖定于nightly版本。若你git clone此工程至本地,請(qǐng)先安裝nightly版的rustc再編譯執(zhí)行之。否則,會(huì)報(bào)錯(cuò)的。

另外,推薦使用VSCode編輯與編譯cargo-offline工程,因?yàn)槲乙呀?jīng)配置好了:

  1. Ctrl + Shift + B直接·編譯+執(zhí)行。

  2. 在安裝了CodeLLDB插件之后,F5就先編譯,再進(jìn)入斷點(diǎn)調(diào)試模式。

無(wú)論采用上面哪種方式編譯程序,VSCode都會(huì)彈出【下拉·選擇器】,要求選擇輸入【自定義cargo feature】。所以,請(qǐng)注意使用【上下箭頭】與【回車】鍵,響應(yīng)VSCode的選擇要求。

后續(xù)路圖

若今后給該·命令行工具·添加更多功能與配置選項(xiàng),我計(jì)劃上【GUI圖形界面】,考慮到我的win32Gnome.GTK3編程經(jīng)歷與背景。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4803

    瀏覽量

    68752
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    659

    瀏覽量

    32911
  • Win32
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    8128

原文標(biāo)題:命令

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MOSFET參數(shù)解讀

    SGT-MOSFET各項(xiàng)參數(shù)解讀
    發(fā)表于 12-30 14:15 ?1次下載

    Linux系統(tǒng)中shell命令解析

    shell是Linux系統(tǒng)的用戶界面,提供了用戶與內(nèi)核交互的一種接口,它接收用戶輸入的命令并到送到內(nèi)核去執(zhí)行,因此也被稱為L(zhǎng)inux的命令解釋器。
    的頭像 發(fā)表于 11-05 15:40 ?310次閱讀

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?283次閱讀
    詳解kubectl常用<b class='flag-5'>命令</b>

    Linux實(shí)用命令大全

    Linux實(shí)用命令大全
    的頭像 發(fā)表于 10-23 13:50 ?253次閱讀
    Linux實(shí)用<b class='flag-5'>命令</b>大全

    Linux lsof命令的基本用法

    在 linux 系統(tǒng)中,一切皆文件。通過(guò)文件不僅僅可以訪問(wèn)常規(guī)數(shù)據(jù),還可以訪問(wèn)網(wǎng)絡(luò)連接和硬件。所以 lsof 命令不僅可以查看進(jìn)程打開的文件、目錄,還可以查看進(jìn)程監(jiān)聽的端口等 socket 相關(guān)的信息。本文將介紹 lsof 命令的基本用法,本文中 demo 的演示環(huán)境為
    的頭像 發(fā)表于 10-23 11:52 ?327次閱讀
    Linux lsof<b class='flag-5'>命令</b>的基本用法

    HarmonyOS高效測(cè)試必備HDC命令

    針對(duì)測(cè)試人員的需求,HDC 提供了豐富的命令集,幫助他們進(jìn)行設(shè)備連接、日志采集、應(yīng)用安裝與卸載、性能監(jiān)控等。以下是一些常用且對(duì)測(cè)試人員非常有幫助的 HDC 命令
    的頭像 發(fā)表于 10-21 11:42 ?544次閱讀

    SD的命令和響應(yīng)

    一個(gè)完整的?SD?卡操作過(guò)程是:主機(jī)(單片機(jī)等)發(fā)起“命令”,SD?卡根據(jù)命令的內(nèi)容決定是 否發(fā)送響應(yīng)信息及數(shù)據(jù)等,如果是數(shù)據(jù)讀/寫操作,主機(jī)還需要發(fā)送停止讀/寫數(shù)據(jù)的命令來(lái)結(jié)束 本次操作,這意味著主機(jī)發(fā)起
    的頭像 發(fā)表于 10-08 15:49 ?591次閱讀
    SD的<b class='flag-5'>命令</b>和響應(yīng)

    SDRAM中的active命令介紹

    在向SDRAM 中的任何行發(fā)出 READ或 WRITE 命令之前,必須先打開該行。這是通過(guò) ACTIVE 命令完成的。ACTIVE 命令的目的是打開或者說(shuō)激活(active)bank中的一行并將數(shù)據(jù)從 DRAM 移動(dòng)到bank的
    的頭像 發(fā)表于 07-29 09:53 ?483次閱讀
    SDRAM中的active<b class='flag-5'>命令</b>介紹

    解讀MIPI A-PHY與車載Serdes芯片技術(shù)與測(cè)試

    上一期,《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》技術(shù)解讀與功率芯片測(cè)量概覽中,我們給大家介紹了工信部印發(fā)的《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》涉及到的重點(diǎn)芯片與測(cè)試領(lǐng)域解讀,本期繼續(xù)給大家做延展,我們解讀的是MIPI A-PHY與車載Serdes芯
    的頭像 發(fā)表于 07-24 10:14 ?2935次閱讀
    <b class='flag-5'>解讀</b>MIPI A-PHY與車載Serdes芯片技術(shù)與測(cè)試

    安裝esp-idf-tools-setup-offline-5.1.2.exe到結(jié)尾運(yùn)行python時(shí)顯示應(yīng)用程序無(wú)法正常啟動(dòng)如何解決?

    安裝esp-idf-tools-setup-offline-5.1.2.exe到結(jié)尾運(yùn)行python時(shí)顯示應(yīng)用程序無(wú)法正常啟動(dòng)(0xc000007b),如何解決
    發(fā)表于 07-24 07:50

    ZWS云平臺(tái)應(yīng)用(6)-設(shè)備命令

    本文講述使用ZWS物聯(lián)網(wǎng)云平臺(tái)遠(yuǎn)程下發(fā)設(shè)備命令的過(guò)程。在生產(chǎn)生活中,很多設(shè)備自身有一些控制指令,比如,路燈的開關(guān)燈命令、電機(jī)的調(diào)整轉(zhuǎn)速命令、空調(diào)的調(diào)溫命令等等。當(dāng)這些設(shè)備變成智能設(shè)備,
    的頭像 發(fā)表于 06-26 08:25 ?294次閱讀
    ZWS云平臺(tái)應(yīng)用(6)-設(shè)備<b class='flag-5'>命令</b>

    lscpu命令使用注意事項(xiàng)

    請(qǐng)注意,lscpu命令在不同的操作系統(tǒng)上可能會(huì)有一些差異,某些選項(xiàng)可能不可用。可以通過(guò)man lscpu命令或lscpu --help命令查看該命令的幫助文檔和更多選項(xiàng)。
    發(fā)表于 03-14 11:39 ?868次閱讀

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀?|深圳比創(chuàng)達(dá)電子
    的頭像 發(fā)表于 03-11 11:55 ?606次閱讀
    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的<b class='flag-5'>解讀</b>?

    linux命令概述

    電子發(fā)燒友網(wǎng)站提供《linux命令概述.pdf》資料免費(fèi)下載
    發(fā)表于 03-11 09:18 ?3次下載

    Linux基本命令總結(jié)

    都說(shuō)Linux命令多,實(shí)際工作中我們又有多少命令會(huì)接觸用到呢?本文跟大家分享Linux運(yùn)維工作中常用的600個(gè)命令,可以說(shuō)這些命令是伴隨著大家一生的運(yùn)維生涯了,看看大家有哪些還沒用過(guò)的
    的頭像 發(fā)表于 01-11 10:32 ?982次閱讀
    主站蜘蛛池模板: 深夜视频在线| 男人j桶进女人免费视频| 人人射人人射| 老司机亚洲精品影院在线观看| 久久草在线视频国产一| 国产黄色三级网站| 日韩欧美国产电影| 在线a免费| 亚色综合| 国产美女免费| 久久综合色视频| 深爱综合网| 一级毛片ab片高清毛片| 色www亚洲国产张柏芝| 神马影院午夜dy888| 可以免费看黄的网址| 天天干天天干天天色| 97人人艹| 成年人在线网站| 狠狠狠色丁香婷婷综合激情| 日本免费黄色| 日韩一级片在线| 久久国模| 黄色软件入口| 精品三级三级三级三级三级| 国产成人亚洲综合a∨婷婷| 国产欧美亚洲精品第二区首页 | 黄a免费| 热99re久久精品2久久久| 五月天婷婷在线观看视频| 伊人久操| 亚洲va欧美va国产综合久久| 免费高清在线观看a网站| 女色窝人体色77777| 理论片毛片| 69日本xxxxxxxxx19| 亚洲一区二区三区在线视频| 888米奇在线视频四色| 永久免费看www色视频| 亚洲韩国在线一卡二卡| 亚洲香蕉影视在线播放|