ぼんやりとした何か


今後の研究のためのサーベイをしています。なんか気づいたことがあったら絡んでください。

[hidepost]
拡張可能なウェブブラウザを実装する。たぶん JavaScript で。システムを拡張可能にするために一定レベルでそのシステム自身が自己反映的な要素を持つ必要がある。Smalltalk 72, 76, 80 の歴史、そして Self のデザインを長めると、この方針のためにはクラスを排した単純なモデルが有効なのだろう。ただ、プロトタイプベースなオブジェクト指向言語に対する自己反映計算というのは聞いた気がしない。もしかして、Cardelli の Distributed Ambient がそうなのか?

Visual Programming については、Interface Builder から学ぶ点は大きいだろう。JavaScript で Interface Builder を作り、それを使ってウェブブラウザの GUI を作成するというのは卒論のテーマになりうる。一方で、上で述べた自己反映的なブラウザのモデルとこの GUI を接続する(これも卒論のテーマ)というのが研究の第一歩。次のステップは、これを Visual Programming でブートストラップすることだろう。概念的には全く同じことを伝統的な Programming + IB とは別のやり方、つまり Visual Programming only で達成する。こちらはかなり難しい研究テーマになる。たぶん博士論文並みのテーマとなるだろう。

拡張性については、自分の親でも使えることを目指す。ウェブブラウザの再構成を PowerPoint のメニューのカスタマイズや Mac OS X でのキーバインディングの定義より易しくしたい。Mac OS X のツールバーのカスタマイズ程度の負担でできれば素晴しい。Mac OS X のあの機能は素晴しいけれども、他の UI コンポーネントをいじれないのは残念。Interface Builder を Deploy したあとでも使えるといいような気がする。たぶん、それは正しい方針だろう。

– 直接の関係はないけれども、[[GuiMags:http://builder.japan.zdnet.com/member/u514743/blog/2008/12/04/entry_27018441/%5D%5Dのような手触り感と同程度のものは実現できるだろう。ホワイトボードを使ったブレーンストーミングに一般人が喜んで参加するのであれば、ディスプレイ上で似たような作業をすることもできるに違いない。要は手間の問題だ。

クラウドコンピューティングにおける拡張可能なシステムでは、ひとつのアプリケーションはウェブ上に散らばったコンポーネントを組み合わされる(マッシュアップ)する形で構成される。このため、なんらかの分散言語で記述することが自然だろう。XML 層はなくしたい。あるいは隠したい。文字列、ファイル、SQL、XML は「Everyone is a programmer」の視点からは弊害。ただ、設計にあたっては「賢い機能」を排し、「本当に賢い機能」のみに留めなくてはならない。Lambda Calculus、Continuation Passing Style、π計算、Ambient Calculus、Self に学べ。Smtalltalk 80 の失敗から学べ。

信じることに向かってつき進め。一時の流行に長されるな。大衆に迎合するな。
[/hidepost]

** 知識の整理

– Ted Nelson: Xanadu, Transliterature
– Hypercard, Supercard
– IntelligentPad

** IDE

– Smalltalk → ARK → Squeak → [[Lively Kernel:http://livelykernel.sunlabs.com/legacy/0.8.5/index.xhtml%5D%5D ([[論文1:http://research.sun.com/techrep/2008/abstract-175.html%5D%5D、%5B%5B論文2:http://research.sun.com/techrep/2007/abstract-166.html%5D%5D、%5B%5B論文3:http://research.sun.com/techrep/2007/abstract-168.html%5D%5D、%5B%5Bビデオ:http://jp.youtube.com/watch?v=gGw09RZjQf8%5D%5D)
– LISP machine
– フレームワークとしては Lively Kernel でよいかもしれない
– Scratch (Lifelong Kindergarten@MIT Media Lab のプロジェクト。Squeak が基盤)

** Visual Programming Language

– SketchPad [Suth63]
– ThingLab [BD81]
– An exampler based Smalltalk [LPT86]
– Alternate Reality Kit [Smi87]
– Interface Builder
– Pygmalion [FG93]
– Rehearsal World [Smi93]

** Prototype-based

– Delegation [Lieb86]
– Emerald [BHJ86]
– JavaScript
– dSelf [TK02]

** 分散、Ambient

– Obliq [Card95]、これは Distributed Ambient のことだっけ?
– Ambient Talk [DB04, Deib]

** Reflection

– Meta-circular interpreter
– Emacs
– ほかに何?
– もしかして eToy?

** Design Phylosophy

– [[Alan Kay:http://portal.acm.org/citation.cfm?id=155364%5D%5D: これは名著。15年前に読むべきだった。暇なやつはすぐに読むといい。咬めば咬むほどに味が出てくる論文でしょう。
– [[David Ungar:http://portal.acm.org/citation.cfm?doid=1238844.1238853%5D%5D: これもよく書けている。なぜ JavaScript がこんな言語になったのかが知りたければ、これを読むとよくわかります。 今、気づいたのだけれども[[ムービー:http://portal.acm.org/ft_gateway.cfm?id=1238853&type=mov&coll=GUIDE&dl=GUIDE&CFID=13985145&CFTOKEN=13637632%5D%5Dもあったのか!

** 自己反映計算

– いろいろ
– Klein: David Ungar が研究していた Self in Self の meta-circular VM architecture。