![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
OuftiBoy
Je ne sais pas ce que tu veux dire par "un système d'hygiène", mais je n'ai pas de raison de ne pas te croire. Mais encore une fois, je trouve qu'une vrai fonction inline (et même générique) pourrait faire le taf.
Regarde https://en.wikipedia.org/wiki/Hygienic_macro (avec un exemple en C)
EN bref, il s'agit d'éviter des conflits et effets de bords entre des variables générées par la macro et les variable de l'environnement d'appel de la macro.
C'est le langage Scheme qui a apporté les macros hygiénique pour pallier au défaut de celles de LISP.
Mais en C, on n'a pas un vrai système de macro.
1 2
| #define DEUX 1+1
a = DEUX*2 |
Te calculera 3 au lieu de 4.
Ainsi, il faut anticiper les usages :
#define ADD(a,b) ((a)+(b))
Oui, tu as raison, mais bon, si une "crate" est un module, autant l'appeler "module", je ne reproche pas ça spécifiquement à 'Rust', mais je trouve ça inutile, c'est ajouter des termes inutilement. Je vois ce qu'est un module, mais quand j'ai vu crate, je me suis demandé ce que ça pouvais bien signifier, Tout comme j'ai entendu parlé des "traits". Oui, je suis conservateur. On remplace Program par App et ça n'a aucun avantage. Autant utiliser des mots simple que tout le monde comprend que d'utiliser tous les synonymes possible du dictionnaire. C'est un détail, mais si on veux attirer un max de dev dans son écosystème, il me semble préférable d'utiliser des termes ou un langage familier et non pompeux pour faire du neuf avec du vieux.
Un crate n'est pas un module, mais une arborescence de modules. Voir https://web.mit.edu/rust-lang_v1.25/...d-modules.html
Il faut plutôt voir le crate comme une unité de déploiement (comme les packages vcpkg de Microsoft). La commande cargo peut chercher les crates déclarées en dépendance et l'installer. Ensuite, ton programme pourra utiliser mon_crate::fonction1, mais aussi mon_crate::sous_module1::fonction1, etc. Le crate peut comporter plusieurs modules, d'où deux termes. (module est plutôt un namespace C++).
Pour les traits, ce sont comme des interface Java, avec peut-être une différence, la possibilité de définir des méthodes par défaut.
Partager