色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

cargo-offline命令解讀

jf_wN0SrCdH ? 來源:Rust語言中文社區 ? 作者:Rust語言中文社區 ? 2022-12-01 15:41 ? 次閱讀

cargo-offline命令

cargo-offline是標準cargo命令的包裝器。其被用來,根據·距離cargo-offline命令執行目錄最近的Cargo.toml文件是否被修改過,來給被包裝的cargo命令條件地增補--offline命令行參數(即,離線編譯)。形象地講,就是將cargo check條件地變形為cargo check --offline

  1. 項目鏈接:https://github.com/stuartZhang/cargo-offline

  2. 包倉庫鏈接:https://crates.io/crates/cargo-offline

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

    1. 先點個star

    2. 再直接導航至:https://github1s.com/stuartZhang/cargo-offline

動機

最近一段時間,github.com訪問的穩定性實在很差。但,執行cargo命令總是要求

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

  • 然后,執行目標任務

于是,日常開發/編譯工作流就時常被阻塞于


	

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)

網絡錯誤上。這實在令人感覺挫敗!

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

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

最理想的使用模型

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

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

工作原理

cargo-offline命令會

  1. 透傳所有命令行參數給底層的cargo指令

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

    1. 是【工作區workspace】配置文件

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

  3. 比較被找到的Cargo.toml文件·是否·被修改過 —— 就是對比該文件的【最后·修改時間】屬性值是否發生了變化。

  4. Cargo.toml文件的·最后修改時間·變化了,就給被透傳的參數列表額外添加--offline參數項。

  5. 于是,cargo命令就會進入【離線模式】編譯了。

Cargo.toml文件修改時間的保存位置

判斷Cargo.toml文件·是否·被修改過,關鍵需要:

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

  • 再,使用【緩存·時間值】與當前【文件修改時間】比大小

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

  • 直接保存到Cargo.toml文件自身里,和作為***.metadata配置塊內一個鍵值對。

    • toml crate編輯過的Cargo.toml文件,它內部

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

    • 編譯指令·會額外地開啟【不穩定featurefile_set_times

    • “配置塊”會被重新排序

    • “雙引號”會被替換為“單引號”。

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

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

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

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

    • 優點:

    • 缺點:

  • 保存于獨立的*.toml配置文件內。

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

    • Cargo.toml文件可保持“無損”。

    • 少一個程序依賴項

    • 避免開啟【不穩定feature

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

    • 優點:

    • 缺點:

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

  • Cargo features作為編譯條件

  • 根據不同的決策選擇

  • 編譯輸出不一樣的二進制行可執行文件作為結果。

安裝

此命令行工具crate已經被發布至crates.io包倉庫。所以,我就未對各主流平臺與架構準備·預編譯包(感謝偉大的包管理器!)。

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

    
    			

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

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

    
    			

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

因為我沒有給Cargo Package設置default features,所以完全忽略--features=命令行參數會導致源碼編譯錯誤。惡作劇地,同時指定--features=cargo-metadata--features=toml-config也會導致編譯失敗。

一旦被安裝成功之后,cargo-offline.exe可執行文件就會

  • 出現在%CARGO_HOME%in目錄下

  • PATH環境變量劃定的搜索范圍,可見

  • 可從命令行直接運行

使用

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

  1. 作為獨立命令,執行cargo-offline。后隨和標準cargo命令相同的命令行參數(這些參數會被透傳給cargo指令的)。比如,

    
    			

    cargo-offline check

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

    
    			

    cargo offline check

cargo-offline的命令行參數與cargo完全相同,因為cargo-offline僅只做了透傳處理。

源碼也精彩,歡迎來品鑒

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

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

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

    2. 欲深入了解【策略·模式】的細節理論,我推薦文章淺聊Rust【策略·設計模式】Strategy / Policy design pattern —— 歡迎點贊、發評論與轉發分享。

  2. Builder設計模式 —— 解決struct局部初始化的問題。

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

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

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

    1. 有那么一點兒ramda鏈式函數調用的感覺了。餒餒的【函數編程·范式】。

  4. 規則宏macro-by-example—— 避免代碼重復。

    1. 這是【結構相同·但·類型不同】代碼塊復用的利器呀!

    2. 以【宏】的思維來復用代碼,得花費一段時間來適應。

關于·編譯

重要,十分重要:因為【不穩定featurefile_set_times在程序中被條件地開啟,所以該Cargo Package工程依賴的rustup工具鏈被鮮明地鎖定于nightly版本。若你git clone此工程至本地,請先安裝nightly版的rustc再編譯執行之。否則,會報錯的。

另外,推薦使用VSCode編輯與編譯cargo-offline工程,因為我已經配置好了:

  1. Ctrl + Shift + B直接·編譯+執行。

  2. 在安裝了CodeLLDB插件之后,F5就先編譯,再進入斷點調試模式。

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

后續路圖

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


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

    關注

    30

    文章

    4787

    瀏覽量

    68589
  • 編譯
    +關注

    關注

    0

    文章

    657

    瀏覽量

    32869
  • Win32
    +關注

    關注

    0

    文章

    11

    瀏覽量

    8114

原文標題:命令

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

收藏 人收藏

    評論

    相關推薦

    Linux系統中shell命令解析

    shell是Linux系統的用戶界面,提供了用戶與內核交互的一種接口,它接收用戶輸入的命令并到送到內核去執行,因此也被稱為Linux的命令解釋器。
    的頭像 發表于 11-05 15:40 ?258次閱讀

    詳解kubectl常用命令

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

    Linux實用命令大全

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

    Linux lsof命令的基本用法

    在 linux 系統中,一切皆文件。通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。所以 lsof 命令不僅可以查看進程打開的文件、目錄,還可以查看進程監聽的端口等 socket 相關的信息。本文將介紹 lsof 命令的基本用法,本文中 demo 的演示環境為
    的頭像 發表于 10-23 11:52 ?259次閱讀
    Linux lsof<b class='flag-5'>命令</b>的基本用法

    HarmonyOS高效測試必備HDC命令

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

    SD的命令和響應

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

    SDRAM中的active命令介紹

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

    解讀MIPI A-PHY與車載Serdes芯片技術與測試

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

    安裝esp-idf-tools-setup-offline-5.1.2.exe到結尾運行python時顯示應用程序無法正常啟動如何解決?

    安裝esp-idf-tools-setup-offline-5.1.2.exe到結尾運行python時顯示應用程序無法正常啟動(0xc000007b),如何解決
    發表于 07-24 07:50

    ZWS云平臺應用(6)-設備命令

    本文講述使用ZWS物聯網云平臺遠程下發設備命令的過程。在生產生活中,很多設備自身有一些控制指令,比如,路燈的開關燈命令、電機的調整轉速命令、空調的調溫命令等等。當這些設備變成智能設備,
    的頭像 發表于 06-26 08:25 ?281次閱讀
    ZWS云平臺應用(6)-設備<b class='flag-5'>命令</b>

    lscpu命令使用注意事項

    請注意,lscpu命令在不同的操作系統上可能會有一些差異,某些選項可能不可用。可以通過man lscpu命令或lscpu --help命令查看該命令的幫助文檔和更多選項。
    發表于 03-14 11:39 ?839次閱讀

    EMC技術:基礎概念到應用的解讀

    EMC技術:基礎概念到應用的解讀?|深圳比創達電子
    的頭像 發表于 03-11 11:55 ?575次閱讀
    EMC技術:基礎概念到應用的<b class='flag-5'>解讀</b>?

    linux命令概述

    電子發燒友網站提供《linux命令概述.pdf》資料免費下載
    發表于 03-11 09:18 ?3次下載

    Linux基本命令總結

    都說Linux命令多,實際工作中我們又有多少命令會接觸用到呢?本文跟大家分享Linux運維工作中常用的600個命令,可以說這些命令是伴隨著大家一生的運維生涯了,看看大家有哪些還沒用過的
    的頭像 發表于 01-11 10:32 ?972次閱讀

    kubectl常用命令指南

    Kubectl 命令是操作 kubernetes 集群的最直接的方式,特別是運維人員,需要對這些命令有一個詳細的掌握
    的頭像 發表于 12-28 09:25 ?803次閱讀
    kubectl常用<b class='flag-5'>命令</b>指南
    主站蜘蛛池模板: 亚洲精品中文字幕无码A片蜜桃| 蜜臀AV中文字幕熟女人妻| 双性被疯狂灌满精NP| 嫩草www视频在线观看高清| 久久精品日本免费线| 精品国产乱码久久久久久人妻| 国产高清在线观看视频| 国产成人亚洲精品老王| 国产av免费观看日本| 97国产成人精品视频| 在线中文字幕视频| 无限资源在线观看高清| 蜜臀久久99精品久久久久久做爰 | 午夜精品久久久内射近拍高清| 日本色女孩影院| 色丁香婷婷综合缴情综| 美女内射少妇一区二区四区| 老头扒开粉缝亲我下面| 老师那里好大又粗h男男| 免费看欧美xxx片| 青青草原网址| 色综合久久天天影视网| 无限资源在线观看高清| 亚洲精品在线网址| 中文字幕在线观看亚洲| 99精品电影| 337p啪啪人体大胆| bdsm中国精品调教ch| wwww69| 国产ts在线| 含羞草影院AE在线观看| 久久久久久久久久毛片精品美女 | 国产亚洲精品久久久久久线投注 | 国产人成无码视频在线观看| 韩国伦理电影在线神马网| 久久永久免费视频| 欧美日韩免费看| 无码射肉在线播放视频| 日本护士在线观看| 无遮掩H黄纯肉动漫在线观看星| 亚洲色图p|