# rust



### Installation:

```bash
$ brew install rustup-init
```

Installer le compilateur et Cargo, le gestionnaire de paquet:

```bash
$ rustup-init

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /Users/bruno/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory located at:

  /Users/bruno/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

  /Users/bruno/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /Users/bruno/.profile
  /Users/bruno/.bash_profile
  /Users/bruno/.bashrc
  /Users/bruno/.zshenv

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: aarch64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
```



### Cargo:

Cargo est le gestionnaire de paquets de Rust.

#### Installer un paquet:

```bash
$ cargo install kiro-editor
    Updating crates.io index
  Downloaded kiro-editor v0.4.3
  Downloaded 1 crate (38.2 KB) in 1.59s
  Installing kiro-editor v0.4.3
  Downloaded dirs-sys-next v0.1.2
  Downloaded getopts v0.2.21
  Downloaded term_size v0.3.2
  Downloaded unicode-width v0.1.9
  Downloaded termios v0.3.3
  Downloaded term v0.7.0
  Downloaded jemallocator v0.3.2
  Downloaded libc v0.2.117
  Downloaded jemalloc-sys v0.3.2
  Downloaded signal-hook-registry v1.4.0
  Downloaded signal-hook v0.3.13
  Downloaded fs_extra v1.2.0
  Downloaded cfg-if v1.0.0
  Downloaded cc v1.0.72
  Downloaded dirs-next v2.0.0
  Downloaded 15 crates (2.2 MB) in 0.68s (largest was `jemalloc-sys` at 1.3 MB)
   Compiling libc v0.2.117
   Compiling fs_extra v1.2.0
   Compiling cc v1.0.72
   Compiling cfg-if v1.0.0
   Compiling signal-hook v0.3.13
   Compiling unicode-width v0.1.9
   Compiling getopts v0.2.21
   Compiling jemalloc-sys v0.3.2
   Compiling dirs-sys-next v0.1.2
   Compiling signal-hook-registry v1.4.0
   Compiling termios v0.3.3
   Compiling term_size v0.3.2
   Compiling dirs-next v2.0.0
   Compiling term v0.7.0
   Compiling jemallocator v0.3.2
   Compiling kiro-editor v0.4.3
    Finished release [optimized + debuginfo] target(s) in 1m 05s
  Installing /Users/bruno/.cargo/bin/kiro
   Installed package `kiro-editor v0.4.3` (executable `kiro`)

```

Les paquets sont installés dans `~/.cargo/bin`

```bash
~/.cargo/bin                                                                                                                                         11:33:15
❯ ls -la
total 3492
drwxr-xr-x 16 bruno staff     512 mai  9  2022 .
drwxr-xr-x  8 bruno staff     256 fév  4  2022 ..
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 cargo -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 cargo-clippy -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 cargo-fmt -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 cargo-miri -> /opt/homebrew/bin/rustup-init
-rwxr-xr-x  1 bruno staff 2483315 mai  9  2022 cavif
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 clippy-driver -> /opt/homebrew/bin/rustup-init
-rwxr-xr-x  1 bruno staff 1088162 fév  4  2022 kiro
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rls -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rust-gdb -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rust-lldb -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rustc -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rustdoc -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rustfmt -> /opt/homebrew/bin/rustup-init
lrwxr-xr-x 12 bruno staff      29 fév  4  2022 rustup -> /opt/homebrew/bin/rustup-init
```



#### Chercher un paquet:

```bash
$ cargo search avif
avif = "0.0.0"              # RESERVED. Open for adoption by projects that fulfill some criteria. Please see the gist in the home…
avif-serialize = "0.7.6"    # Minimal writer for AVIF header structure (MPEG/HEIF/MIAF/ISO-BMFF)
avif-decode = "0.2.2"       # Convert AVIF images to PNG or decompressed pixel data
avif-parse = "1.0.0"        # Parser for AVIF image files
cavif = "1.4.0"             # Encodes images in AVIF format (image2avif converter) using a pure-Rust encoder.
ravif = "0.9.1"             # rav1e-based pure Rust library for encoding images in AVIF format (powers the `cavif` tool)
libavif = "0.10.1"          # High-level API for AVIF image files
libavif-image = "0.9.0"     # Load AVIF files into the `image` crate
aom-decode = "0.2.4"        # Minimal safe wrapper for libaom AV1 decoder
libavif-sys = "0.13.1"      # Unsafe wrapper around libavif, the image codec
... and 23 crates more (use --limit N to see more)
```

#### Supprimer un paquet:

```bash
 $ cargo uninstall kiro-editor

    Removing /Users/bruno/.cargo/bin/kiro
```

#### Mettre à jour un paquet:

```bash
$ cargo install <crate>
```

Installe la dernière version du paquet si nécessaire, sinon ne fait rien.

#### Force la réinstallation:

-> Supprime le paquet -> télécharge la dernière version -> installe

```bash
$ cargo install --force <crate>
```



#### Liste des paquets installés:

```bash
$ cargo install --list
cavif v1.3.4:
    cavif
kiro-editor v0.4.3:
    kiro
```

```bash
$ cat .crates2.json | jq .
{
  "installs": {
    "cavif 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)": {
      "version_req": null,
      "bins": [
        "cavif"
      ],
      "features": [],
      "all_features": false,
      "no_default_features": false,
      "profile": "release",
      "target": "aarch64-apple-darwin",
      "rustc": "rustc 1.58.1 (db9d1b20b 2022-01-20)\nbinary: rustc\ncommit-hash: db9d1b20bba1968c1ec1fc49616d4742c1725b4b\ncommit-date: 2022-01-20\nhost: aarch64-apple-darwin\nrelease: 1.58.1\nLLVM version: 13.0.0\n"
    }
  }
}
```

#### Mettre à jour les paquets:

```bash
$ cargo install $(cargo install --list | ggrep -E '^[a-z0-9_-]+ v[0-9.]+:$' | cut -f1 -d' ')
    Updating crates.io index
     Ignored package `cavif v1.4.0` is already installed, use --force to override

```



https://github.com/kbknapp/cargo-outdated



```bash
# https://lib.rs/crates/cargo-cache

$ cargo install cargo-cache
```

```bash
$ cargo cache --autoclean
Clearing cache...

Cargo cache '/Users/bruno/.cargo':

Total:                                  737.91 MB => 594.18 MB
  15 installed binaries:                             103.16 MB
  Registry:                             634.75 MB => 491.01 MB
    Registry index:                                  457.35 MB
    291 crate archives:                               33.67 MB
    291 => 0 crate source checkouts:         143.73 MB => 0  B
  Git db:                                                 0  B
    0 bare git repos:                                     0  B
    0 git repo checkouts:                                 0  B

Size changed 737.91 MB => 594.18 MB (-143.73 MB, -19.47%)
```

```bash
$ rm -rf ~/.cargo/registry
```



```bash
# https://lib.rs/crates/cargo-prune

$ cargo install cargo-prune
```

```bash
$ cargo prune
```



https://blog.rust-lang.org/2023/12/11/cargo-cache-cleaning.html



### rustup:

```bash
$ rustup check
stable-aarch64-apple-darwin - Update available : 1.61.0 (fe5b13d68 2022-05-18) -> 1.65.0 (897e37553 2022-11-02)
rustup - Up to date : 1.25.1
```



```bash
$ rustup show
Default host: aarch64-apple-darwin
rustup home:  /Users/bruno/.rustup

stable-aarch64-apple-darwin (default)
rustc 1.61.0 (fe5b13d68 2022-05-18)
```



#### M-à-J de rustup (réalisée par brew):

```bash
$ rustup self update
error: self-update is disabled for this build of rustup
error: you should probably use your system package manager to update rustup
```

#### M-à-J de Rust:

```bash
$ rustup update
info: syncing channel updates for 'stable-aarch64-apple-darwin'
info: latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02)
info: downloading component 'cargo'
  4.2 MiB /   4.2 MiB (100 %)   1.0 MiB/s in  4s ETA:  0s
info: downloading component 'clippy'
  2.0 MiB /   2.0 MiB (100 %)   1.2 MiB/s in  1s ETA:  0s
info: downloading component 'rust-std'
 27.6 MiB /  27.6 MiB (100 %)   1.1 MiB/s in 28s ETA:  0s
info: downloading component 'rustc'
 52.2 MiB /  52.2 MiB (100 %) 801.6 KiB/s in  1m  7s ETA:  0s
info: downloading component 'rustfmt'
  2.3 MiB /   2.3 MiB (100 %) 757.0 KiB/s in  3s ETA:  0s
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-std'
 27.6 MiB /  27.6 MiB (100 %)  18.2 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 52.2 MiB /  52.2 MiB (100 %)  20.9 MiB/s in  2s ETA:  0s
info: installing component 'rustfmt'

  stable-aarch64-apple-darwin updated - rustc 1.65.0 (897e37553 2022-11-02) (from rustc 1.61.0 (fe5b13d68 2022-05-18))

info: cleaning up downloads & tmp directories
info: self-update is disabled for this build of rustup
info: any updates to rustup will need to be fetched with your system package manager
```

```bash
$ rustup check
stable-aarch64-apple-darwin - Up to date : 1.65.0 (897e37553 2022-11-02)
rustup - Up to date : 1.25.1
```

