2

純粋関数:

  1. 特定の入力に対して常に同じ結果を返す
  2. 副作用を生じさせない

これにより、プログラムの動作を変更せずに式を値に置き換えることができる参照透過性が得られます。

これは、プログラムの実行環境でエンティティの破壊的な変更 (更新) を除外する場合、プログラムは純粋に機能していると言えることを示しています。

ソフトウェア トランザクション メモリを見ると、同時実行コンピューティングで共有メモリへのアクセスを制御するためのデータベース トランザクションに類似した同時実行制御メカニズムが見られます。しかし、それ自体で特に機能するものは何もありません。

私の質問は、Clojure の STM を「機能的」と見なすことができるかということです。

4

3 に答える 3

2

Clojure の STM は「機能的」であると見なすことができますか?

いいえ、まったく逆です。STM は、ステートフルで、不純で、参照が不透明になるように設計されていますが、言いたいことはありません。しかし、いい意味で、お気づきのように、データベース トランザクションに似ています。

Clojure は階層化された言語です。STM は、核となる純粋な関数とデータ構造の上に位置し、操作する語彙を提供する単一の構造 ( ref ) で状態変化を分離します。


Clojure は他の方法でも階層化されています。

  • 多くの制御構造 ( andwhen、... ) は、マクロによっていくつかの特別なフォームに重ねられます。
  • clojure.langClojure で記述されたコア関数のほとんどは、それらを実装するためのパッケージを備えた JVM (または他のホスト) に実装された少数の機能の上に階層化されています。
于 2016-03-11T17:01:55.133 に答える