ぼうメモ帳

2004-03-30 第3回アレ終了

関数の変形@Effective JavaScript

| 関数の変形@Effective JavaScript - ぼうメモ帳 を含むブックマーク

http://www.interq.or.jp/student/exeal/dss/ejs/1/4.html

この一つ前のセクションまでは、濃い内容だとは思っていたけど、lisp/schemeを勉強している身としてはまだ想像の範疇でした。しかし、今回の関数の変形はマジでやばいです。まさかJavascriptでここまでやるとは思いませんでした。

あとでもう一度読むためにメモ。

2004-01-18 っポイを読了

Context.enter()について

| Context.enter()について - ぼうメモ帳 を含むブックマーク

Java-Threadに1つのContextしか割り当てないようにするための仕組みのようです。Context.enter()が呼ばれると、既存のスレッドに対応付けられたcontextが存在する場合はそのcontextを返します。存在しない場合は、新規にcontextを生成してそれを現在のスレッドと対応付けた後に返します。

Context.enter()を用いてcontextを生成した場合、getCurrentContext()を用いて現在のスレッドに対応したcontextを得られます。

なお、Context.enter(new_context)の場合、現行のスレッドにnew_contextを割り当てようとします。もし、すでに割り当てられているold_contextが存在する場合、old_contextとnew_contextが同一オブジェクトである必要があります。まだ割り当てられていない場合、何の問題もないみたいです。

Context.enter()したらContext.exit()しないとダメみたい。

なんでこんな仕様になっているかは謎。おそらく、グローバル変数みたいなのを使わずに、どこからでもcontextを取得できるようにしたかったのかなあという妄想が限界。スレッド別にcontextを作る理由は、サーバサイドで何本ものスレッドが動いているときに、別々の制御を与えたいときなんかに使うのかなあと妄想してみる。

また、staticなメソッドを呼び出すときに、内部でContext.getCurrentContext()が呼ばれていることを考えると、使わないと不味いよなあという気にさせる。

この仕様の場合、swingと連携させたい場合はinvokeLater()を使ってイベントディスパッチスレッドからContext.enter()を呼び出さないといけないんだろうか…

Context.newObject()

| Context.newObject() - ぼうメモ帳 を含むブックマーク

context.newObject( scope [constructor="Object" [args=null ] ] )
scope : Scriptable
constructor : String
args : Object[]

scopeからconstructorを探し出して、argsを引数としてオブジェクトの生成をします。ちなみに、scopeは自動的にトップレベルスコープ(最上位のスコープ、globalと呼ばれるもの)へと変換されます。激しく謎な仕様です。要するに、scopeをどんな値にしたところでglobalしか使われないということです。global以外にはコンストラクタを置くなということか?

2004-01-13

Dynamic Scripting

| Dynamic Scripting - ぼうメモ帳 を含むブックマーク

http://www.interq.or.jp/student/exeal/dss/

Effective JavaScriptのコンテンツが濃い内容を展開してて面白い。特に、関数のセクションでの、引数→関数とオブジェクト→クロージャの展開は逸品。

Hawk's W3Laboratory

| Hawk's W3Laboratory - ぼうメモ帳 を含むブックマーク

http://www.hawk.34sp.com/

同様に、JavaScriptの内部動作についてかなり丁寧に説明されてる。「基本的な用語の定義」から始まるのが、個人的にはかなりすばらしい。てか、読んでて面白いし。

268071