IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Rust par l'exemple


précédentsommairesuivant

10. Les crates

Une crate est une unité de compilation en Rust. Lorsque rustc some_file.rs est appelé, some_file.rs est considéré comme étant un «fichier paquet» (i.e. un fichier fédérant les autres). Si some_file.rs possède plusieurs modules en son sein, chacun d'entre eux verra son contenu fusionné dans ce paquet avant que la compilation n'ait lieu. Autrement dit, les modules ne sont pas compilés individuellement, mais en tant que paquet, en tant qu'ensemble de ressources.

Une crate peut être compilée en tant qu'exécutable ou bibliothèque. Par défaut, rustc produira un exécutable mais cela peut être modifié en passant le flag --crate-type au compilateur.

10-1. Créer une bibliothèque

Commençons par créer une bibliothèque dont nous nous servirons ensuite pour l'importer dans une autre crate.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Dans le fichier rary.rs
pub fn public_function() {
    println!("called rary's `public_function()`");
}

fn private_function() {
    println!("called rary's `private_function()`");
}

pub fn indirect_access() {
    print!("called rary's `indirect_access()`, that\n> ");

    private_function();
}
 
Sélectionnez
$ rustc --crate-type=lib rary.rs
$ ls lib*
library.rlib

Les bibliothèques sont préfixées par la séquence « lib » et possèdent, par défaut, le nom du fichier utilisé pour créer la crate (en l'occurrence rary.rs). Ce comportement peut, bien entendu, être modifié en utilisant l'attribut crate_name.

10-2. La déclaration extern crate

Pour importer une crate à cette nouvelle bibliothèque, il vous faudra utiliser la déclaration extern crate. Cette déclaration a aussi pour effet d'importer toutes les ressources sous un même module, possédant le même nom que la bibliothèque. Les règles régissant la visibilité des ressources s'appliquent également aux modules des bibliothèques importées.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Dans le fichier executable.rs
// On importe la bibliothèque `library` et ses ressources 
// sous un module nommé `rary`.
extern crate rary;

fn main() {
    rary::public_function();

    // Error! `private_function` est privée.
    // rary::private_function();

    rary::indirect_access();
}
 
Sélectionnez
1.
2.
3.
4.
5.
6.
# Où `library.rlib` est le chemin de la bibliothèque compilée, nous admetterons ici 
# que la bibliothèque se trouve dans le répertoire courant.
$ rustc executable.rs --extern rary=library.rlib && ./executable
called rary′s `public_function()`
called rary′s `indirect_access()`, that
> called rary′s `private_function()`

précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Rust Core Team et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.