「利用者:Htkym/サンドボックス」の版間の差分

削除された内容 追加された内容
ページの白紙化
タグ: 白紙化 手動差し戻し
編集の要約なし
1行目:
'''構造化された並行性'''(こうぞうかされたへいこうせい、{{lang|en|structured concurrency}})は、[[プログラミング言語]]における[[並行処理]]、[[非同期処理]]の[[API]]の[[パラダイム]]のひとつで、呼び出した非同期処理ルーチンが完了するまで呼び出し元のルーチンを完了させないことを保証することをいう。
構造化された並行性の「構造化」({{lang|en|structured}}) の名は、1960年代に提唱されたプログラミング手法である[[構造化プログラミング]] ({{lang|en|structured programming}}) を引き継いでおり、非同期処理の開始と終了が明確に[[ネスティング|入れ子]]になることを非同期処理の構造化へのアプローチとみなして、このことが明快さのみならずエラー処理などにおいて従来の手法より有利な点をもつとする。
 
==概要==
 
構造化された並行性の概念は2016年にマルティン・スーストリク ({{lang|sk|Martin Sústrik}}) が非同期的に呼び出したルーチンをキャンセルする問題を例として定式化され<ref name="sustrik16">{{cite web|first=Martin|last=Sústrik|date=2016-02-17|title=Structured concurrency|url=https://250bpm.com/blog:71/|accessdate=2021-02-22}}</ref>、2018年にはナサニエル・J・スミス ({{lang|en|Nathaniel J. Smith}}) が非同期処理の実装の欠点を克服するものとして自身の[[Python]]言語の非同期処理ライブラリ[[Trio]]に実装した<ref name="smith18">{{cite web|first=Nathaniel J.|last=Smith|date=2018-04-25|title=Notes on structured concurrency, or: Go statement considered harmful|url=https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/|accessdate=2021-02-22}}</ref>。
同じ年さらに[[Kotlin]]言語の[[コルーチン]]・ライブラリを開発していたロマーン・エリザーロフ ({{ru|Роман Елизаров}}, {{en|Roman Elizarov}}) も同様のアイデアにたどり着いている<ref name="elizarov18">{{cite web|first=Roman|last=Elizarov|date=2018-09-12|title=Structured concurrency|url=https://elizarov.medium.com/structured-concurrency-722d765aa952|accessdate=2021-02-22}}</ref>。
[[Java]]、[[Scala]]、[[C言語|C]]、その他の言語のライブラリでもこの概念に基づく実装がある。
 
非同期処理を用いたプログラム開発に対応する言語やライブラリにおいて非同期処理の呼び出しはしばしばその後の監視や再結合なしに行うことができ、プログラム構文上での処理の流れの把握の難しさや[[例外処理]]の困難さといった固有の問題を生じている。
スミスは、こうした問題を構造化プログラミングが提唱されたとき問題とされた制御フローの[[スパゲッティプログラム|スパゲッティ化]]に対比させて、非同期処理の呼び出し([[Erlang]]言語のspawn、[[Go (プログラミング言語)|Go]]言語のgoなど)、また[[イベント]]発生などで開始される[[コールバック (情報工学)|コールバック]]を用いた処理、さらに[[Future パターン|promiseやfuture]]と呼ばれる[[遅延評価|遅延された処理]]の一部が、かつての[[goto文]]と同様の問題を引き起こしているとした<ref name="smith18" />。
 
[[エドガー・ダイクストラ]]らがあげたgoto文などの問題は、プログラムの一部のみを見ただけでは制御フローを把握できないというプログラマの推論の抽象化を破壊したことにあり、これに対し構造化された[[制御構造|制御構文]]がその始まりと終わりに適切に制約を課し再帰的にブラックボックス化できるようにしたことによって問題を解決した。
構造化された並行性では、非同期処理の呼び出し元の完了が、それが呼び出した非同期処理の完了を待つという単純な制約を新たに課すことによって、再度ブラックボックス化を可能としプログラマの推論を容易なものとする。
さらに、処理が入れ子であることが保証されることによって、リソースの自動解放や例外処理も通常の逐次処理と同じように機能させることができるとする<ref name="smith18" />。
 
==出典==
{{Reflist}}
 
==関連項目==
* [[構造化プログラミング]]