Cargo
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!