可変性のコンテキストで「単調性」とはどういう意味ですか


8

私はThe Rust Programming Languageを読んでいて、次の文章を見つけました:

構造体への書き込みはアトミック操作ではないことを忘れないでください。また、などの多くの関数vec.push()は内部的に再割り当てして安全でない動作を引き起こす可能があるため、単調性でも正当化するのに十分ではない場合があります UnsafeCell

それは本のどこからともなく出てきた、そして私はこの文脈でそれが正確に何を意味するのかを見つけることを試みるオンラインで苦労した。数学関数の「単調性」の概念に関する情報が多すぎます。これは、すでに知っていましたが、明らかにあまり役に立ちません。

それについて語っているこの記事だけを見つけたようです。

ここで、明白な方法で平等を尊重することに加えて、関数型プログラムは観測の単調性を尊重しなければならないという規定も含めます。これはどういう意味ですか?ある時点で何かを観察した後は、それが将来明らかになるのを止めることはないでしょう。これは、クリプケまたはベスのセマンティクスの単調性プロパティに類似しています。

しかし、これも非常に抽象的なものであり、同じことについて話されているかどうかはわかりません。

回答:


5

著者は、純粋な数学と同じ「一般性」の概念を使用しているようです。

の例を使用すると、のvector特定のインスタンスのサイズvectorが単調である場合、以前にpush編集された要素のメモリ位置はその後変更されないため、値を直接変更しても安全であると想定するのが妥当と思われます。vectorの後続のpush操作と同期する必要がないその要素の。

この仮定は、サイズが厳密に増加している(非円形の配列ベースの無制限の)スタックに以前にプッシュされた要素のメモリ位置が将来の影響を受けないと想定するのが妥当であると同じ理由で妥当と思われますpush操作。これは、pushpop操作の両方が呼び出されているスタックとは対照的です。そのため、以前にプッシュされた要素のメモリ位置がpop操作によって「削除」される可能性があり、したがって、その後のpush操作。

著者のポイントは、この仮定は正しくないということです。サイズが厳密に増加しているデータ構造であっても、将来の挿入は、挿入の「論理」効果とは異なるある種の内部再割り当てをトリガーすることにより、以前に挿入された要素に影響を与える可能性があるためです。


OK。私はそれを考えすぎたようです。結局、それはいくつかの深いPL理論のものではないようです。あまり文脈がなく、テキストでそれが突然提示された方法を推測して、私は間違った方法で笑った。
xji
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.