Vala se présente comme un langage proche de C# avec des performances proches du C, destiné au développement Gnome. Il emprunte la sémantique async et await de C#, et de nombreux appels d'E/S de la bibliothèque existent en version asynchrone, dont make_directory_async.
async void create_directory_with_parents_async(File file, Cancellable? cancellable = null) throws Error {
var to_create = new File[0];
var? current_target = file;
while(current_target != null) {
try {
yield current_target.make_directory_async(Priority.DEFAULT, cancellable);
} catch(IOError.NOT_FOUND e) {
to_create += current_target;
current_target = current_target.get_parent();
continue;
} catch(IOError.EXISTS e) {
break;
}
break;
}
}Ce que la bibliothèque cœur ne propose pas, c'est une version asynchrone de create_directory_with_parents, l'assistant mkdir récursif. L'auteur Remy Porter soupçonne que cette absence est volontaire, la création récursive de répertoires impliquant des problèmes de concurrence solubles mais délicats.
Un lecteur nommé Eri avait besoin de la fonction manquante et l'a écrite. La première boucle tente de créer le répertoire cible. Sur IOError.NOT_FOUND, elle remonte au parent en empilant chaque cible échouée dans un tableau, jusqu'à rencontrer un répertoire existant, réussir, ou épuiser les parents. Une seconde boucle parcourt ensuite le tableau à l'envers, créant d'abord les chemins manquants les plus courts et ignorant IOError.EXISTS au cas où un autre processus serait passé par là.
L'implémentation utilise les exceptions pour le contrôle de flux, ce qui rend la première boucle pénible à suivre. Eri relève l'ironie : le mécanisme C que Vala encapsule repose sur de simples codes d'erreur, plus commodes ici. Une boucle retravaillée avec des clauses catch réordonnées se lit un peu mieux, mais reste la même approche.
Porter accorde l'absolution. Le code bouche un vrai trou dans la bibliothèque cœur et gère correctement la course critique. Son conseil : enfermez-le dans une boîte et ne touchez plus jamais l'implémentation, sauf pour la supprimer quand Vala livrera la vraie fonction.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.