kiyokaのブログアーカイブ

Archive of old blog posts

オレオレ参照透明性というアイデア(immutable宣言)

私がRubyで書いているLisp方言、 [Nendo]について。

immutableというスペシャルフォームで副作用なしを宣言するプログラミングスタイルはどうだろうと考えている。 img まだ、どのような仕様にするか全然見えてないけど、どんなことが実現したいかという考えは大体ある。

  • immutable宣言した範囲では副作用が無いかチェックしてくれる immutableなコードを塗りつぶすというようなイメージ。 immutableなコードから、mutableなコードを呼びだすとエラーとなり、その発生ポイントも同地に報告してくれる。

  • immutable宣言した範囲は自動的に並列実行できる 例えば、mapが取る手続とリストの両方についてimmutableしか受けつけないが、for-eachはmutableも受けつけるとか。 mapとfor-eachの違いはそれだけに留まるようなイメージ。 そうすれば、処理系はmapで受けた要素同士は独立性が確保されていると判断できるので、結果、並列実行が可能となる。

また、Rubyのライブラリを使った時にもこのルールが機能するように、Rubyのライブラリロード時にもimmutable宣言したいメソッドリストが指定できるとかできないか。

問題は、immutableだと信じた範囲を自分で宣言する所で、例えばHaskellをやっているような人には受けいれられないだろうけど、Lisp系言語には合った実践的な方法かなと思っている。 まあ、プログラマが自己判断で宣言するところが曲者で、実際には使いものになるのかは不明。 他の言語で似たようなアイデアを持ったものないのかな。もっと勉強しないと。