CodeSOD: 非同期ディレクトリ ノート

CodeSOD: 非同期ディレクトリ

Valaは、C#のような機能とCに近いパフォーマンスを持つ、Gnome向けに設計されたプログラミング言語です。非同期プログラミングをasync/awaitセマンティクスでサポートしており、関数が制御を譲渡することを可能にします。Valaの多くのI/Oライブラリ関数は非同期であり、make_directory_asyncなどがその例です。しかし、コアライブラリには、ディレクトリチェーンを同期的に作成するcreate_directory_with_parentsの非同期バージョンが欠けています。この欠落は、非同期での競合状態の処理の複雑さが原因である可能性が高いです。作者であるEriはこの問題に遭遇し、カスタムの非同期ソリューションを実装しました。Eriの初期のアプローチは、リーフノードから親ノードへとディレクトリを作成しようとし、不足している親を配列に収集します。その後、この配列を逆方向に反復してディレクトリを作成します。この方法は、制御フローのために例外処理を使用しているため、洗練されていないと考えられています。Eriは、特に非同期競合状態の管理において、問題の難しさを認めています。メインループのわずかに改善されたバージョンが提示されていますが、アプローチは依然として複雑です。そのぎこちなさにもかかわらず、Eriのソリューションは、欠けているライブラリ機能を効果的に解決しています。作者は、実装された関数が正しく動作したら隠すべきだと示唆しています。