[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:76

From: Tsuguo MOGAMI <mogami brain.riken.go.jp>
Date: Tue, 13 Jul 2004 12:42:34 +0900
Subject: [langsmith:76] 変更可能なclosure変数、対、static変数

ちょっと自分で作っている言語の設計について悩んでいます。

それはclosureでcloseした変数を
変更可能にするか、変更不能にするかです。

実装の簡単さからいっても、有用さ便利さから言っても
変更可能なclosureがいいのですが、以下の点から言って気に入りません。

1,現実世界(プログラミング言語内以外)に同様なモデルがない。
変更不能なclosureならば現実にも類似物が存在します。
たとえば数学で現在の文脈から式のなかの変数の意味が決定されたりすることです。
しかし変更可能なclosureは現実の類似物が存在しません。
私としては現実世界とのアナロジーで説明できないモデルは出来るだけ
排除したいと考えています。

2,変更可能なclosureは初心者に分かりにくいのでは?
実際普通の人にとってどの程度分かりにくいものなのでしょうか?


さて、かりにcloseされた変数を変更不能にした場合でも、
memoizeとか、profileのためのカウンタとかをつけることが出来ることは
必要ですから、内部状態を持たせる仕組みは必要です。
そのなかで分かりやすく、普及もしているのは
おそらくC言語のstatic変数でしょう。

1,しかし普及しているという点を除いた上で比較すると
static変数のモデルは本当にclosureより初心者に分かりやすいのでしょうか?

2,入力された数を積算しつつ記憶する関数の生成子を考えてみます。
仮にclosureのモデルで疑似コードを書いてみると

define create_acc(n) {
     ac=n
     define acc(i){
         return ac=ac+i
     }
     return acc
}

static変数のモデルを疑似コードで書くと

define create_acc(n) {
     define acc(i){
         static ac=n
         return ac=ac+i
     }
     return acc
}

となって、コードの見た目の複雑さはそんなに変わりません。
それに、C言語のstatic変数は起動時に一回だけ初期化されるわけですが、
上の例で想定しているような動的に関数を生成できる言語では
create_accを呼び出す度にclosed変数の生成と初期化が行われるわけで、
それを明示するには前者のコードの方が分かりやすいという感じもします。


以上のように、変更可能なclosureか、static変数かどちらを取るか悩んでいます。
まあ、すぐに決着が付くとは問題とは思えませんので、
気楽に感覚とか意見とかを聞ければな、と思っています。

最上嗣生


--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->      76 2004-07-13 12:42 [mogami brain.riken.g] 変更可能なclosure変数、対、static変数   
        77 2004-07-13 13:42 ┣[nobsun sampou.org   ]                                       
        78 2004-07-13 15:07 ┣[maeda-langsmith atus]                                       
        80 2004-07-13 19:58 ┃┣[mogami brain.riken.g] Re: 変更可能なclosure変数、対、sta  
        81 2004-07-14 01:52 ┃┗[shugo ruby-lang.org ] 強い型の言語とクロージャ            
        84 2004-07-14 15:02 ┃ ┣[takuo aya.or.jp     ]                                   
        86 2004-07-14 23:32 ┃ ┃┗[shugo ruby-lang.org ]                                 
        85 2004-07-14 20:52 ┃ ┗[randy mvd.biglobe.ne]                                   
        87 2004-07-14 23:59 ┃  ┗[shugo ruby-lang.org ]                                 
        88 2004-07-15 00:04 ┃   ┣[shugo ruby-lang.org ]                               
        89 2004-07-15 01:50 ┃   ┗[nobsun sampou.org   ]                               
        90 2004-07-15 11:04 ┃    ┗[shugo ruby-lang.org ]                             
        79 2004-07-13 14:43 ┗[matz ruby-lang.org  ]