• # Les scope guards en D

    Posté par (site web personnel) . En réponse au journal Une 20-aine de lignes de code pour le defer de Go en C++. Évalué à 10. Dernière modification le 07 février 2022 à 19:58.

    En D (pour celles et ceux qui ne connaissent pas, c'est un langage à ramasse-miettes compilé nativement qui se veut un remplaçant de C++ avec 90% de sa puissance et 10% de sa complexité), cette fonctionnalité existe sous la forme de scope guards : il suffit de préfixer une instruction (ou un bloc d'instructions) par scope(exit) et elle sera exécutée à la fin du bloc de code actuel (pas de la fonction, sauf s'il s'agit du bloc principal de la fonction bien sûr).

    Il y a aussi scope(success) : l'instruction ne sera exécutée que s'il n'y a pas eu d'exception levée, et scope(failure) que s'il y a eu une exception levée avant la fin de l'exécution du bloc courant.

    La doc vend cette fonctionnalité comme un remplacement de RAII en C++ :

    The D scope feature effectively replaces the RAII idiom used in C++ which often leads to special scope guard objects for special resources.

    Scope guards are called in the reverse order they are defined.