Cargo

From MozillaWiki
Jump to: navigation, search

Cargo

 http://doc.crates.io/guide.html

Cargo é uma ferramenta que os 'Rustaceans'(desenvolvedores rust) usam para ajudar a gerenciar os seus projetos. Cargo atualmente está na versão pré-1.0 e continua em desenvolvimento. Contudo, já está bom o suficiente para que possamos nos divertir com ele.

Cargo gerencia três coisas: a construção do seu código(build), baixar todas as dependências do seu código e construir estas dependências. Geralmente no começo da nossa relação com Rust, os programas quase não possuem dependência, claro que isso é totalmente relativo, contudo mesmo que não tenha nenhuma dependência é indicado que você, desde o início, se acostume e familiarize com o Cargo. E acredite, ele será seu melhor amigo ao lado do rustc.

Tá, e como eu faço para ter o Cargo? Bom, se você utilizou os scripts oficiais de instalação você também já tem o cargo instalado. Caso você tenha 'montado' o Rust a partir do fonte, você deve dar uma olhada no link lá em cima, logo abaixo o título deste artigo. Passeie por ele e vá descobrindo ainda mais coisas sobre o Cargo.

Convenções que o Cargo utiliza

 Vamos elencar algumas diretrizes e padrões estabelecidos pelo Cargo para que você possa trabalhar mais facilmente!


  • Cargo.toml e Cargo.lock são armazenados na pasta raiz do seu projeto.
  • Os fontes de seu programa vão alocados dentro da pasta src.
  • Testes externos vão dentro da pasta test.
  • O fonte padrão para a execução é src/main.rs.
  • Outros fontes podem ser alocados desta forma: src/bin/*.rs.
   A biblioteca padrão é src/lib.rs. Caso você queira criar uma lib ao invés de um executável

Cargo.toml & Cargo.lock

  Se você é um bom observador, você deve ter notado que citamos estes dois arquivos ali nas convenções do Cargo.
  Vamos comentar um pouco mais sobre eles.


  • Cargo.toml trata, de uma maneira geral, de descrever as dependências de que o seu código vai precisar, geralmente escrito por você
  • Cargo.lock contém as informações exatas sobre as suas dependências. É gerado automaticamente e você não deve edita-lo

Cargo.toml é um arquivo de manifesto, nós podemos especificar um monte de meta-data do nosso projeto aqui. Por exemplo:

   [package]
   name = "crypto_sha256"
   version = "0.1.0"
   authors = ["Dalmo MolokdotC Veras <molokdotc@bazinga.com>"]
  [dependencies]
  rust-crypto="*"

Este é um exemplo do arquivo Cargo.toml que utilizei para brincar um pouco com criptografia, em especial com o algoritmo SHA256.

 [root]
 name = "crypto_sha256"
 version = "0.1.0"
 dependencies = [
"rust-crypto 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
  package
  name = "gcc"
  version = "0.3.5"
  source = "registry+https://github.com/rust-lang/crates.io-index"
 package
 name = "libc"
 version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 package
 name = "rand"
 version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
 "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
  package
  name = "rust-crypto"
  version = "0.2.31"
  source = "registry+https://github.com/rust-lang/crates.io-index"
  dependencies = [
  "gcc 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  package
  name = "rustc-serialize"
  version = "0.3.14"
  source = "registry+https://github.com/rust-lang/crates.io-index"
  package
  name = "time"
  version = "0.1.25"
  source = "registry+https://github.com/rust-lang/crates.io-index"
  dependencies = [
  "gcc 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  ]

Lembre-se

O arquivo Cargo.lock é gerado automaticamente e não deve ser alterado! Deixe que o Cargo cuida dele para nós!