S'il vous reste du temps

Accès au réseau lors de la compilation

Vous pouvez implémenter une macro procédurale wikipedia_function qui prend deux paramètres, un identifiant de fonction et une chaîne de caractères litérale, comme dans wikipedia_function!(wikipedia_rust => "Rust (langage)"). Cette macro créera une nouvelle fonction à partir de l'identifiant donné (ici wikipedia_rust) retournant une chaîne statique qui contient le contenu de la page Wikipedia correspondant au sujet indiqué (ici "Rust (langage)").

Le parsing de l'argument de la macro se fait facilement en écrivant un parseur dédié qui utilisera le crate syn. En effet, on peut définir une structure contenant deux champs de type String (le nom de la fonction et le nom de la page Wikipedia) et implémenter syn::parse::Parse sur cette structure qui cherchera un identifiant, un token de type => puis une chaîne de caractères.

Mini-Forth again

  1. Réécrivez la macro forth présentée ici en utilisant une macro procédurale.

Cela vous permet de manipuler directement le proc_macro::TokenStream, idéalement après l'avoir converti en proc_macro2::TokenStream plus configurable. Cela vous permet d'accepter du code Rust qui serait incorrect syntaxiquement en Rust (par exemple 2 3 4 + *). La seule contrainte est que les délimiteurs doivent être balancés correctement.