一意性タイプを使用して安全な並列処理を実装する


19

しばらくの間、純粋な関数型言語のモナドの代替として、一意性タイプに興味がありました。残念ながら、これは一種のCS研究の難解な分野であり、ユニークなタイプのプログラミングに関するオンラインリソースはほとんどありません。

参照(「ボックス」)や配列などのステートフルデータ構造を実装するために一意性タイプがどのように使用されるかは明らかですが、他の一般的なステートフルデータ構造を実装する方法を回避します。

たとえば、一意の型によるロックを実装することは可能ですか?一意性タイプを使用して、スレッド間で可変デー​​タを共有できますか?一意の型を使用して同期プリミティブ(ミューテックスなど)を構築することは可能ですか、またはメッセージの受け渡しは必要ですか?


質問をもう少し具体的にできますか?たとえば、一意の型を使用したロックについて知っていることは何ですか?また、自分の知識はどこで不十分ですか?
ロバートハーヴェイ

>例えば、ユニークなタイプのロックについてはすでに知っていますか?トピックに関するリソースです。
リッキースチュワート


2
@RickyStewart:おそらく既にClean(wiki.clean.cs.ru.nl/Clean)を知っています。言及しなかったので、リンクを追加したかっただけです。
ジョルジオ14

並列処理のために線形型を検討する必要があると思います。IIRC一意性タイプは線形タイプに基づいています。フランクPfenningは、主題に関するいくつかの興味深いものがあります
ダニエルグラッツァー

回答:


2

たとえば、一意の型によるロックを実装することは可能ですか?

ロバート・ハーベイが提供したリンクをたどって、簡単に読み上げました。すべてを理解したとか、自分が理解したと思うことを本当に理解したという高いレベルの自信があると言えませんが、外部の一意性と参照の不変性のすべてのポイントはロックを必要としないことです。

マルチスレッドへの最新のアプローチは、ロックを回避しようとします。なぜなら、ロックを使用するコードを作成できるのは経験豊富なプログラマーだけであり、そのコードでさえバグが発生しやすいためです。それに加えて、ロックコードは事実上テストできないという事実を追加すると、それは非常に望ましくないことを行う方法であり、ロックから解放することを目的とするソリューションは控えめに言っても有望です。

ロックを回避する方法は、メッセージを渡すことです。これには、メッセージが不変である必要があります。大体、(一見)参照不変性は、実際に不変型を構築することなく不変性を保証するのに役立つテクニックであるように見えます。また、外部の一意性は、厳密な不変性要件をローカルで緩和するのに役立つテクニックのようです

一意性タイプを使用して、スレッド間で可変デー​​タを共有できますか?

紙は明らかにそれを述べるが、私が理解から、何らかの形で(実際には、ため、オブジェクトの外部に一意のクラスタは、スレッドセーフではありませんでしたか?)唯一の外の参照がオブジェクトのそのクラスタに存在することが保証され、その手段ものそのような参照を受け取るスレッドは、他のスレッドが参照を他に持つことができないため、他のスレッドがそれらを変更することを心配することなく、参照されるオブジェクトを可変として扱うことができます。このような理論的構造をどのように実装し、実施できるかを知りたいと思います。

一意の型を使用して同期プリミティブ(ミューテックスなど)を構築することは可能ですか、またはメッセージの受け渡しは必要ですか?

繰り返しますが、私が理解していることから、外部的に一意の型と参照の不変性は、ロック、ミューテックスなどを不要にすることを意味します。メッセージの受け渡しが方法のように見えますが、それは良いことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.