CodeSOD: 비동기 디렉터리 노트

CodeSOD: 비동기 디렉터리

Vala는 C#과 유사한 기능과 C에 가까운 성능을 갖춘 Gnome을 위해 설계된 프로그래밍 언어입니다. 함수가 제어권을 양보할 수 있도록 하는 async/await 의미론을 사용하여 비동기 프로그래밍을 지원합니다. Vala의 많은 I/O 라이브러리 함수는 make_directory_async와 같이 비동기적입니다. 그러나 핵심 라이브러리에는 디렉토리 체인을 동기적으로 생성하는 create_directory_with_parents의 비동기 버전이 없습니다. 이러한 누락은 비동기적으로 경쟁 조건을 처리하는 복잡성 때문일 가능성이 높습니다. 저자인 Eri는 이 문제를 접하고 사용자 정의 비동기 솔루션을 구현했습니다. Eri의 초기 접근 방식은 리프 노드에서 위쪽으로 디렉토리를 생성하려고 시도하고 누락된 부모를 배열에 수집하는 것을 포함합니다. 그런 다음 이 배열을 역으로 반복하여 디렉토리를 생성합니다. 이 방법은 제어 흐름에 예외 처리를 사용하기 때문에 세련되지 않은 것으로 간주됩니다. Eri는 특히 비동기 경쟁 조건을 관리하는 데 있어 문제의 어려움을 인정합니다. 메인 루프의 약간 개선된 버전이 제시되지만 접근 방식은 복잡합니다. 어색함에도 불구하고 Eri의 솔루션은 누락된 라이브러리 기능을 효과적으로 해결합니다. 저자는 구현된 함수가 올바르게 작동하면 숨겨야 한다고 제안합니다.