CodeSOD: Асинхронные каталоги Заметка
The Daily WTF на русском

CodeSOD: Асинхронные каталоги

Вала — это язык программирования, разработанный для Gnome, с функциями, похожими на C#, и производительностью, близкой к C. Он поддерживает асинхронное программирование с семантикой async/await, позволяя функциям передавать управление. Многие функции библиотеки ввода-вывода в Вала являются асинхронными, например, make_directory_async. Однако в основной библиотеке отсутствует асинхронная версия create_directory_with_parents, которая синхронно создает цепочки каталогов. Это упущение, вероятно, связано со сложностью обработки асинхронных состояний гонки. Автор, Эри, столкнулся с этой проблемой и реализовал собственное асинхронное решение. Первоначальный подход Эри заключается в попытке создания каталогов от конечного узла вверх, собирая недостающие родительские каталоги в массив. Затем он проходит по этому массиву в обратном порядке для создания каталогов. Этот метод считается неэлегантным, поскольку использует обработку исключений для управления потоком. Эри признает сложность проблемы, особенно управление асинхронными состояниями гонки. Представлена немного улучшенная версия основного цикла, но подход остается сложным. Несмотря на свою неуклюжесть, решение Эри эффективно устраняет недостающую функциональность библиотеки. Автор предполагает, что реализованная функция должна быть скрыта после того, как она будет работать правильно.