日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
對(duì)比著Npm來(lái)學(xué)Rust的Cargo,一遍就會(huì)了

我們寫 Node.js 代碼離不開的是什么,是 Npm。這就像寫 Rust 代碼離不開 Cargo 一樣。

創(chuàng)新互聯(lián)長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蔡甸企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,蔡甸網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

大家可能不了解 Rust 和 Cargo。沒關(guān)系,接下來(lái)我們就對(duì)照著 npm 來(lái)學(xué)習(xí)下 Cargo,幫大家入門下 Rust。

我們先從熟悉的 Node.js 開始:

寫 Node.js 代碼的流程

我們會(huì)先創(chuàng)建一個(gè)目錄,然后在目錄下執(zhí)行 npm init

 
 
 
 
  1. mkdir node-pro
  2. cd node-pro
  3. npm init

控制臺(tái)會(huì)交互式的詢問一些信息,然后生成 package.json

也可以加上 -y 用默認(rèn)值快速創(chuàng)建。

之后我們會(huì)用 npm install xxx 來(lái)安裝依賴,比如安裝 babel

 
 
 
 
  1. npm install babel

這時(shí)候 package.json 的 dependencies 下就有了 babel 的依賴信息

同時(shí)會(huì)生成一個(gè) package-lock.json 記錄依賴版本(用 yarn 安裝的話就是 yarn.lock 文件)

依賴會(huì)安裝在 node_modules 下。

之后呢,我們會(huì)創(chuàng)建 src,寫一些代碼。

然后在 package.json 的 scripts 中指定編譯、測(cè)試等腳本:

然后代碼寫完以后,通過 npm run build 來(lái)跑構(gòu)建、通過 npm run test 來(lái)跑測(cè)試:

 
 
 
 
  1. npm run build
  2. npm run test

生成的產(chǎn)物可以通過 npm publish 發(fā)布到 npm 倉(cāng)庫(kù)。

過程中可能還用到一些其他的命令:比如要更新依賴會(huì)用 npm update,比如要搜索依賴用 npm search 等。

這就是一個(gè) Node.js 項(xiàng)目的開發(fā)流程,拋開具體寫的 Node.js 代碼不談,整個(gè)工具鏈?zhǔn)怯?npm 串聯(lián)的。

你可能會(huì)說(shuō)這個(gè)很基礎(chǔ)啊,不是入門的內(nèi)容么?

是的,npm 是 Node.js 入門要學(xué)的,那么同樣,入門 Rust 也要先學(xué) Cargo。

而且,npm 和 cargo 的設(shè)計(jì)特別的像,幾乎看一遍大家就會(huì)了。

那還等什么,趕緊來(lái)學(xué)一下 Cargo 吧。

寫 Rust 代碼的流程

和 Node.js 項(xiàng)目一樣,可以先創(chuàng)建目錄,然后使用 cargo init 初始化代碼(這里也可以直接使用 cargo new,效果和下面 mkdir + cargo init 一樣)

 
 
 
 
  1. mkdir rust-pro
  2. cd rust-pro
  3. cargo init

然后就會(huì)創(chuàng)建這樣的目錄結(jié)構(gòu):

cargo.toml 相當(dāng)于 package.json,也是聲明包信息和 dependencies 的。

而且連 src 都有了, git 也初始化了,這比 npm init 更貼心啊(難怪大家都喜歡 rust,這工具鏈做的多細(xì))。

cargo.toml 的內(nèi)容是這樣的:

[package] 下聲明的是包的信息,[dependencies] 下聲明的是依賴信息。

我們用 cargo search 搜索下某個(gè)包(相當(dāng)于 npm search):

可以搜到 html2md 的版本是 0.2.13,我們把它填到依賴?yán)铮?/p>

之后我們寫點(diǎn)代碼,把 html 轉(zhuǎn)成 markdown:

然后,編譯和執(zhí)行:

 
 
 
 
  1. cargo build
  2. cargo run

就可以看到執(zhí)行結(jié)果:

我們用 npm run build 執(zhí)行的也是構(gòu)建命令,只不過是自己配置的三方編譯工具,而 cargo 是用內(nèi)置的編譯工具。

這樣我們就跑起來(lái)了第一個(gè) rust 程序。是不是流程和 npm 有那么一丟丟的像。

而且,像 yarn.lock 或者 package-lock.json 一樣,cargo 也有 Cargo.lock 來(lái)記錄了依賴的具體信息:

后續(xù)也可以執(zhí)行 cargo test 來(lái)跑測(cè)試代碼,可以執(zhí)行 cargo publish 來(lái)上傳到中央倉(cāng)庫(kù)。和 npm 的整體流程比較類似。

Npm 和 Cargo 相似的原因

為什么 cargo 和 npm 這么類似呢?

這說(shuō)明這已經(jīng)是最佳實(shí)踐了!也就是把 init 的腳手架、編譯構(gòu)建、運(yùn)行、測(cè)試、發(fā)布等功能集成到一個(gè)命令中工具中,內(nèi)置到語(yǔ)言的工具鏈。

對(duì)照下古老的 C++ 就能看出區(qū)別:

C++ 使用 clang 或者 gcc 編譯,其他的功能并沒有,需要結(jié)合 cmake 來(lái)聲明一些其他的命令。最關(guān)鍵的是沒有中央的倉(cāng)庫(kù)和依賴管理工具,每個(gè)依賴都要手動(dòng)下載,然后放到項(xiàng)目目錄下,特別麻煩。

既然這是必備功能,為什么不內(nèi)置到語(yǔ)言的工具鏈呢?

所以 npm 和 cargo 都把 init、install、update、build、test、publish 等命令內(nèi)置了,而且也都支持了中央倉(cāng)庫(kù)和依賴管理。

這是現(xiàn)代的語(yǔ)言工具鏈的最佳實(shí)踐了,用別的現(xiàn)代語(yǔ)言的工具也會(huì)感覺差不多。

總結(jié)

Cargo 之于 Rust 就像 Npm 之于 Node.js,兩者都是初始化、依賴管理、構(gòu)建、發(fā)布、等的集成的命令行工具鏈。

Node.js 的項(xiàng)目的開發(fā)流程是這樣的:

  • npm init 初始化項(xiàng)目
  • npm search 搜索依賴
  • npm install 安裝依賴
  • npm update 升級(jí)依賴
  • npm run build 執(zhí)行構(gòu)建
  • npm run test 執(zhí)行測(cè)試
  • npm publish 發(fā)布到中央倉(cāng)庫(kù)

Rust 項(xiàng)目的開發(fā)流程也類似:

  • cargo init 初始化項(xiàng)目 (或者 cargo new,這個(gè)相當(dāng)于 mkdir + cargo init)
  • cargo search 搜索依賴
  • cargo install 安裝依賴
  • cargo update 升級(jí)依賴
  • 手動(dòng)把依賴填到 Cargo.toml 中
  • cargo build 編譯構(gòu)建代碼
  • cargo run 運(yùn)行代碼
  • cargo test 跑單元測(cè)試
  • cargo publish 發(fā)布到中央倉(cāng)庫(kù)

雖然具體的語(yǔ)法不同,項(xiàng)目結(jié)構(gòu)也有差別,但是整個(gè)工具鏈的流程是類似的。這是現(xiàn)代語(yǔ)言工具鏈的最佳實(shí)踐了。

相比之下,C++ 沒有依賴管理,沒有集成的工具鏈,開發(fā)體驗(yàn)遠(yuǎn)遠(yuǎn)比不上有 Cargo 的 rust 和有 npm 的 Node.js。

其實(shí)我們學(xué)習(xí) rust 或其他語(yǔ)言,都可以對(duì)比我們熟悉的 JS 來(lái)學(xué),因?yàn)樗麄冎皇鞘褂糜?jì)算機(jī)的不同的抽象,面對(duì)的問題差不多,只不過解法不同,對(duì)比著學(xué)習(xí),效率會(huì)更高。

對(duì)比著 Npm 來(lái)學(xué) Cargo,是不是看一遍就會(huì)了~


網(wǎng)站欄目:對(duì)比著Npm來(lái)學(xué)Rust的Cargo,一遍就會(huì)了
標(biāo)題URL:http://www.5511xx.com/article/dppdseg.html