女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

    文章

    4900

    瀏覽量

    70726
  • 編譯
    +關注

    關注

    0

    文章

    679

    瀏覽量

    33982
  • Win32
    +關注

    關注

    0

    文章

    11

    瀏覽量

    8248

原文標題:命令

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HarmonyOS AI輔助編程工具(CodeGenie)代碼智能解讀

    。 選中.ets文件或者.cpp文件中需要被解釋的代碼行或代碼片段,右鍵選擇CodeGenie > Explain Code,開始解讀當前代碼內容。 說明 ?最多支持解讀20000字符以內
    發表于 07-17 17:02

    如何使用Traceroute命令

    以下是如何使用 traceroute 命令的詳細指南,包括其語法、選項和實際示例。
    的頭像 發表于 06-04 11:28 ?552次閱讀

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的頭像 發表于 05-28 17:14 ?200次閱讀

    SPI協議,寄存器解讀

    最近在學習SPI協議,對寄存器操作不是特別熟練。發帖希望有大佬能從寄存器角度提供幫助,幫忙指導根據手冊去解讀協議。有償。
    發表于 05-22 20:08

    Linux常用命令大全

    Linux常用命令是指在Linux操作系統中廣泛使用的命令工具,這些命令工具可以完成各種不同的任務,如管理文件和目錄、操作進程、網絡通信、軟件安裝等。
    的頭像 發表于 05-03 18:08 ?1122次閱讀

    Linux ip命令常用操作

    Linux?ip命令常用操作 在Linux系統中,ip命令是用于管理網絡接口和路由的強大工具。相比于舊的?ifconfig命令,ip命令提供了更多的功能和更細粒度的控制。本文將詳細介紹
    的頭像 發表于 02-19 10:23 ?669次閱讀

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發表于 02-17 14:06 ?503次閱讀
    Kubernetes Pod常用管理<b class='flag-5'>命令</b>詳解

    Linux文件管理命令詳解

    cat命令描述:該命令用于連接文件并打印到標準輸出設備上。
    的頭像 發表于 02-17 10:34 ?475次閱讀
    Linux文件管理<b class='flag-5'>命令</b>詳解

    常用linux命令

    使用command A | command B | command C命令,將A命令產生的標準輸出作為B命令的標準輸入(注意只能接收前一個命令的標準輸出)。
    的頭像 發表于 01-20 14:26 ?407次閱讀

    MOSFET參數解讀

    SGT-MOSFET各項參數解讀
    發表于 12-30 14:15 ?1次下載

    Linux實用命令大全

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

    Linux lsof命令的基本用法

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

    SD的命令和響應

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

    SDRAM中的active命令介紹

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

    安裝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