Smalltalk、Squeak、Morphic、タイルスクリプティングの関係
その節はお世話になりました。まだあきずに、Squeak してます。(あれだけコストを割いてインストラクションを展開したのですから、そうそう簡単に飽きられては身が持ちません(^_^;) --sumim)で、今は http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak/ のテキストで Smalltalk を勉強しています。基本はほぼ読んだのですが、Morphic とのつながりとか、Smalltalk って実際なにがどうできるのか混沌とした状況です。単なるプログラム言語じゃなくて一つの環境なんだなという感じはわかったような。で自分としては今興味があるのはやはり「Morphic」なので、タイルスクリプティングをすこしこえて、Workspace で、プログラム書いてみたり、動かしたりそんなことから Smalltalk を学びたいと考えています。たとえば、http://minnow.cc.gatech.edu/squeak/30 みたいなページの日本語版なんでしょうか。 -- heididorf - 2002-04-25, 09:55:54
- その正体はともかく、つかみどころのない変幻自在なところがポジティブにもネガティブにも Smalltalk の本質というのが(今のところの)私の解釈です。それはさておき、(歴史的経緯を鑑み) Smalltalk を通じて Morphic を理解する際に、Smalltalk と Self 双方の特徴とその差異を知らずにそれに当たるのはかなり難しいし、遠回りになると思います。くどいようですが、もうすこし具体的に Morphic で「何がしたいのか」、タイルスクリプティングでは「何がだめなのか」を示していただけると(たとえば「タイルスクリプティングは馬鹿にされているようで自分のスタイルに合わない。Smalltalk のコードを組めばもっとスマートにモルフを自在に扱えるのではないか…」とか「Morphic フレームワークがどのように実装されているのか興味がある」、「いや、実装手法はいいから、Morphic フレームワークの全貌や活用法を知りたい。それを知ることで自分のソリューションとして利用できるかどうか見定めたい」など)、当方としてもそれなりのサジェスションが可能になると思います。--sumim - 2002-04-25, 11:04:10
- あと、最後の一文の意味がちょっと分からないのですが文頭に省略されているのは「そうした目的で探すとしたら…」ですか「このレッスンの位置づけは…」でしょうか? すみません。読解力がないもので(^_^;)。--sumim - 2002-04-25, 11:08:00
文章力が足らないもので。すみません。
Smalltalk て不思議の世界です。
「タイルスクリプティングでは物足りない。Smalltalk のコードを組めばもっとモルフを自在に扱えるのではないか…」 -->はいそうです。Smalltalk とどうつながっていくかです。
「Squeak/Smalltalk にどんな能力が備わっていて、それを知ることで自分のソリューションとして活用できるかどうか見定めたい」 --> そうです。
- すばらしいですね。半ば誘導したみたいですが、そのように興味を向けていただくのがこのレッスンやサイトを公開した真のねらいです。--sumim
- モルフの Smalltalk からの制御のしかたについては、すでにご紹介し、abee さんからも補足いただいた書籍や、インターネット上にもいくつかのチュートリアルが公開されていますのでそれらを参考にされるとよいと思います。Smalltalk に関して書いてあることがちょっと…という場合は、失礼ながら Smalltalk への基本的理解が十分でない可能性がありますので、Smalltalk に関する入門書(ただしこの本は Squeak 向けではないので VisualWorks 3.x を動作させる環境が必要です)を通読されることをお薦めします。--sumim
- 今、こうした面倒な手続きを踏まずに、モルフを Smalltalk コードで操作する方法を効率よく学ぶ手だてがないかを模索中です。うまい方法を思いついたらレッスンとして公開してゆくつもりですのでご期待&ご協力ください。--sumim
- 「Smalltalk とどうつながっていくか」とのことですが、誤解のないようにしていただきたいのは Smalltalk で組まれてはいても、タイルスクリプティング・システムの言語仕様(?)と Smalltalk のそれとは別のものだということです。C 言語で BASIC 処理系を書いても、その上で記述/運用する BASIC コードは BASIC であって必ずしも C の特色を備えたものになるとは限りませんよね?(実装者のスキルや趣向によっては C の香り漂うものになっているかもしれませんが…(^_^;)) そこまで極端ではないものの、状況は似ています。ですから、タイルスクリプティングから入門した人を Smalltalk の世界へ誘うにはもう一つ障壁を越えていただかなければいけないのです。ここがチュートリアルを書こうとする人間としては思案のしどころです。 --sumim
- ソリューションについては、どんな問題や課題を持っておられるのかを具体的に(馬鹿の一つ覚えのようで、恐縮です(^_^;))示していただけると、Squeak や Morphic がそれに能うかについてのコメントや議論が可能になります。もちろん、それをご自身で判断できるようになるまで知見を深めること、それに必要なコストを割くことにやぶさかでないという姿勢でおられるのでしたら、余計なことでした。ごめんなさい。--sumim
>と、最後の一文の意味がちょっと分からないのですが文頭に省略されているのは「そうした目的で探すとしたら…」
はい、そうした目的で探したらということです。
- 残念ながら、私の知る限り日本語のドキュメントでその目的にかなうものは少ないと思います。トップページ下の2ちゃんねるスレや上手さんのページにちょっとだけ日本語による記述があります。私がこのレッスンを書こうと思い立ったのは、そうした実情を踏まえたからでもあります。はずかしながら、そこまでまだレッスン内容が至っておりませんが…(^_^;)。--sumim
とりあえず、折角絵ができたので、この絵を元にすこしいじってみたいとおもいます。よろしくお願いします。
早速ですが、この絵の頭、しっぽ、足の動きは、動く範囲を除いてすべて同じコードです。これをまとめたいな思います。クラスとかメソッドとかをつかえばいいのではないかと思ってます。
- すばらしい着眼点だと思います。レッスンでも紹介している BASIC (スパゲッティベース(^_^;))的アプローチのほかにも、Smalltalk (クラスベース)的アプローチ、Self (プロトタイプベース)的アプローチで解決を試みると面白いかと。--sumim
sumim さんページをかえた方がいいでしょうか。絵のページに ?
絵って [Morphic で絵が描けるみたいですが、使い方がわかりません]
http://squab.no-ip.com:8080/morphiclesson/12 のレッスンのことです。-- heididorf - 2002-04-25, 12:02:49
- そうですね。heididorf さんのつぶやき というページを作りましたので、そちらで heididorf さんの勉強の成果や理解の進んでゆく過程を公開していただけると嬉しいです。がんばってください。私も、ページの体裁を整えるなどのお手伝いくらいはできると思います。--sumim
- そうそう! 大事なことを忘れていました。Smalltalker's Salon ML の存在はご存じですか? heididorf さんの歩んでおられる道は、すでに当レッスンの(すくなくとも現状における)範疇を越えて、むしろ、Smalltalker を目指す者のそれに近いと思います。参加を検討されてみてはいかがでしょう。あと、老婆心ながら ML 参加に当たっては、こちらや、ちょっと毒が強いですがこちらに書かれていることを頭の片隅に置かれておくと無用なトラブルを防ぐのに役立つと思います。ML の話だから関係ないと思われる向きもあるやも知れませんが、当サイトにおいても当てはまることが書かれていますので、これから質問をされる皆さんにもぜひ目を通しておいていただきたいと思っています。heididorf さんには、すでにご承知のことでしたらごめんなさい。--sumim
>「Smalltalk とどうつながっていくか」とのことですが、誤解のないようにしていただきたいのは
> Smalltalk で組まれてはいても、タイルスクリプティング・システムの言語仕様(?)と
> Smalltalk のそれとは別のもの だということです。
Morphic -- Smalltalk -- タイルスクリプティング の関係をきちんとしておく必要がありますね。わたしはこの部分も理解してないとおもいます。
- Squeak は Smalltalk のひとつです。Morphic は Squeak に組み込まれた GUI フレームワークのひとつです。タイルスクリプティングは Morphic フレームワーク内で作ることができるモルフ(Morph)と呼ばれる視覚化された特殊なオブジェクトを制御するために組み込まれた子供向けの簡易プログラミング環境です。--sumim
Visual な開発環境としてとらえて、Morphic と、タイルスクリプティングと、Smalltalk でアプリをつくれるとかんがえるのは間違いということでしょうか。
- タイルスクリプティングでも工夫次第で、いろいろなものを作ることができると思います。たとえば、ボツになりましたがこれなんかはタイルスクリプティングのみで作りました。図では基本的な部分だけですが、作り込めばスコアを入れたり、パドルに接する位置によって反射角を変えたりしてそれなりのゲームになると思います。ですから、タイルスクリプティングでアプリを作れないということはありません。もちろん、すべてのアプリが作れるわけではありません。むしろ、タイルスクリプティング・システムはそもそもモルフを制御するという目的で追加された機構にすぎないので、その切り口にあったアプリしか作れません。
- また、タイルスクリプティングをやれば Morphic フレームワークを使った(Smalltalk でコードした、と、この場合同義)アプリが作れるようになるかと問われれば、答えは否です。--sumim
Squeak/Morphic やれば、Smalltalk が覚えられるのか、もう少し書いていただけますか。
勘違いしてるのはわたしだけでしょうか。みなさんいかがですか。
- 「みなさん」と呼びかけられるところを見ると、そういった誤解(Squeak/Morphic というのは文脈から「タイルスクリプティング」と言いたいのだろうと解釈しました。その読み替えが間違いなら、後に述べるように誤解ではありません。Smalltalk を学ぶにはふさわしくない環境だと異議を唱える人はいますが)を生じうる情報をどこかで得たということですね?
- 先にも述べたとおり、タイルスクリプティングで Smalltalk を学ぶのはかなり難しいと思います。Morphic フレームワークを使って Smalltalk を学んでいる人は、世界的に見れば多いと思いますし可能だとは思います。ただ総じて、Morphic を含め、Squeak で Smalltalk を学ぶのはあまり薦められないというのが習熟した Smalltalker のコンセンサスのようです。それは Squeak が Smalltalk-80 v1 という '80 年代前半の古い Smalltalk を引っぱり出してきてそれをベースに組み立てられた経緯があるからです。Smalltalk 自体は v1 に続く St-80 v2 の後、現在の VisualWorks に至る堅実な改良/進化を遂げています。学習にはこちらを使ったほうがよいというのは、Smalltalk の進化の過程で問題視され、工夫して解決されてきたことを、ここで改めて古い Smalltalk を使うことで再体験する必要はないだろうとの配慮があるからだと私は理解しています。--sumim
>Smalltalk の世界へ誘うにはもう一 つ障壁を越えていただかなければいけないのです
ここももう少し詳しく書いていただけませんか?
- タイルスクリプティングは Smalltalk プログラミングではない、という先の説明では不十分でしょうか? --sumim
Squeak(Smalltalk) でやってみたいこと、(できるか別にして)
telnet プログラム。snmp プログラム。
awk みたいなこと。 でも ユーザー側は、GUI がほしい。
簡単なゲームでもつくってみたい。(昔、VisualBasic2.0 で 落ちものゲームで数字がおちてくるものを書いたことがあるので。)-- heididorf - 2002-04-25, 17:57:02
- 最後のはタイルスクリプティングだけでできそうですね。前のほうは Smalltalk プログラミングやそのための知識が必要だと思います。--sumim
sumim さん、ご解答ありがとうございます。
>先にも述べたとおり、タイルスクリプティングで Smalltalk を学ぶのはかなり難しいと思います
タイルスクリプティングのいちづけはわかりました。
>ただ総じて、Morphic を含め、Squeak で Smalltalk を学ぶのはあまり薦められないというのが習熟した Smalltalker のコンセンサスのようです。
了解しました。でも、Squeak 面白そうです。
- 私もそう思って、推奨できないという言葉を耳にしながらもしつこく Squeak で Smalltalk を勉強しています(^_^;)。--sumim
もうひとつ教えていただけますか。こんなに書いてまだ理解できないのかお叱りを受けるかも知れませんが、ペイントでかいた、絵は、object ですよね、Smalltalk でいじることは可能とおもっていますがこれは正しいでしょうか。今から、これをやろうとしてるのですが。タイルスクリプティングはつかいません。-- heididorf - 2002-04-25, 22:53:51
- はっは。たしかに怒りっぽい性格ですが…(^_^;)。怒るにはそれなりの理由があります(笑)。こちらのサジェスチョンを聞かずに勝手なことをやって、あげくに無料のサポートセンター代わりに使われたりとかね…。=P
- 「Smalltalk でいじる」というのは Smalltalk のコードから制御するという意味でしょうか? それなら Yes です。むしろ Morphic フレームワークというのはその(直接、絵をマウスポインタなどで描いたり制御するのに加えて、間接的に、別に記述したコードからもその絵を自在に制御できるようにする)ためにあるようなものです。
- たとえば、Workspace を開き、ウインドウメニューから「create textual references to dropped morphs」を選んでチェックをオンにします。そうした Workspace に制御したいスケッチモルフをドロップインすると、sketch2242 のようなテキストが現れるので、あとは「sketch2242 form: Form fromUser」などとしてこれを do-it。続けて画面の一部矩形範囲をマウスをドラッグして指定すれば、スケッチモルフの絵を選択した画面矩形範囲と同じものにできます。同様に「sketch2242 center: 50@50」などを do-it すれば、タイルスクリプティングの geometry カテゴリで x と y の値を 50 に変えたのと同じことができます。--sumim
はじめましてLemと申します。ここのやりとりを興味深く拝見しました。
僕もheididorfさんと同じくSqueak って何だ?Morphic って結局なんだ?って感じていたもので。こちらのMorohic レッスンで、Squeak をさわる楽しさを知って、近くの人に触れ回っていたのですが、自分でMorph を作れないかな、とかそういう方向へどうしても行ってしまいます。
そこでMorphを探索する第一歩として、sumimさんがすぐ上で書かれているのを実行しました。確かに動きます。そこで今度は sketchXXXX に forward:10 とか送るととエラーになります。
変だな?っていうんで、タイルスクリプトをSmalltalkのコードに変えるとself に forward:10 とかが送られている。僕はこの self はてっきり sektchXXXX だと思っていたのですが、inspectするとPlayerXX というクラスのインスタンスになっていました。で、よく調べるとsketchXXXX の extension の中に player という変数があります。そこで
sketchXXXX player forward:100
とかやると動いたんですね。実は、僕はSmalltalk なぞ今まで触ったことがなく、というかいかなる言語でもプログラムをまともに書いたことはないので、上に書いた作業は何時間もかかった試行錯誤の結果得たものなのです。でも、何かモルフに隠された謎を解いているようで、動いたときは感動でした(自己満足の世界)。
そこで、お聞きしたいことがあるのですが、どうも僕にはまだ、PlayerとMorphというこの二つのクラスの関係がはっきりとわかりません。PlayerにとってMorphはcostume という変数にしまわれている存在のように見えます。比喩的にいえば、あるプレイヤーがモルフという衣装をつけて画面上を動いているという印象を持ちました。PlayerというのはMorphicという考え方(?)の中で重要な概念なんでしょうか?それとも、タイルスクリプティングを実現するために考案されたクラスにすぎないのでしょうか?やはり、まだ僕も混沌としていて、まともな質問になってないかもしれませんが、よろしくお願いします。
- クラスベースの Smalltalk に対して、プロトタイプベースの Self という処理系があります。Smalltalk コードの中でよく用いられる疑変数の self と紛らわしいのですが、どうぞご勘弁ください。Smalltalk のオブジェクト(インスタンス)は、自らの状態(しかも定められた数の)を保持する能力だけを持ち、独自の処理を持つことはできません。自らの状態を変えるための処理は、その生みの親であるクラスが保持しています。一方で、Self では、すべてのオブジェクトが独自の状態(任意の数の)ばかりでなく独自の処理をも持つことができます。
生まれた瞬間に、歩き方や餌の取り方を知っている(実際はその都度、親に尋ねるわけですが) Smalltalk のインスタンスと違い、Self のオブジェクトはまっさらな状態で生まれて来るので、自分で生きてゆくためにはどうしたらよいか(オブジェクトとしてどうアイデンティティを確立するか、どうやって役立ってゆくか)を後から学ばなければいけません。反面、生みの親(クラス)に束縛され、その教えを忠実に実行することしかできないインスタンスに対し、Self のオブジェクトは、誰からも束縛されない自由を持っています。そうは言っても、オブジェクトとして生きるために、基本的なことからすべて覚えて(定義して)いかなければならないのでは大変なので、既存のオブジェクトのそっくり真似をできるような仕組みが用意されたのだと思います。その仕組みを使って誰の真似をするか宣言するわけですが、そこで指定される側のオブジェクトのことをプロトタイプと呼びます。これがプロトタイプベースと呼ばれる所以です。
プロトタイプとして指定したオブジェクトと状態も含めて寸分違わぬ機能や能力を得ることができた Self オブジェクトですが、これだけでは単なる分身(というか影)にすぎません。その後、刺激を受けて実行された処理によって生じた状態の変化を自身のスロット(状態や処理を保持するための仕組み)に保持することで、名実ともにアイデンティティを確立できるわけです。その際、プロトタイプオブジェクトのスロットには影響は及びません(当然ですが)。さらに、同じ刺激に対して、プロトタイプとは別の処理をしたいときは、プロトタイプにあるのと同じ名前の処理用のスロットを設けてそこに独自の処理を記述します。ここいらへん詳しくは Self の論文を読んでみてください。
Morphic は、この Self という処理系の上で構築された GUI フレームワークで、Self のオブジェクトを視覚的に制御・構築しやすいように工夫されたものです。これを Squeak/Smalltalk に移植したのが我々がいじっている Squeak 版 Morphic ということになります(きっかけこそ焼き直しですが、今やりっぱな Squeak の顔であるといっても差し支えないでしょう)。視覚化や操作面での処理に関しては、クラスベースの Smalltalk でも問題なく実装できます。ただ、 Morph のインスタンスは、インスタンスであるがゆえ、独自のメソッドを持つことができません。そこで、PlayerXX というクラス(メソッドを持つことができるオブジェクト)と一対一対応させて、従来のインスタンスでまかなえる部分は Morph インスタンスが、それを越える部分は相棒の PlayerXX クラス(その実働部隊の唯一のインスタンス<確認していません。想像です。こんなのばっかですみません。涙)が受け持つ…、という構成にしたのではと思います。ちゃんと Sqeeak 版 Morphic 関連の文献を読めば書いてあると思いますが…。読めよ。>自分(^_^;)
タイルスクリプティング・システム(SqueakToys)は、実は、Morphic を介した Smalltalk における Self の(ちょっと風変わりな)実装例なのではないかと、これを書きながらふと思いました。
自分のモルフを作るという企画を心待ちにしています。--Lem - 2002-05-22, 12:14:24
- いや(^_^;)。いつになるか分かりませんので待たずにどんどん先に進んで行ってください。余裕があれば、その過程を公開していただけると嬉しいです。Morphic プログラミング(タイルスクリプティングに非ず)は、青本や黄本、ネットならここいらへんにあります。--sumim
返事をありがとうございます。あっという間に返答があってびっくりです。sumimさんの回答を最初読んだときにはSelfのことがいまいちピント来なくて、何かないかと探してみたら「教育用言語ドリトル」の論文の中に出ていたのです。これを読んでもSelfの正体はわかりませんが、「子供にとってクラスとインスタンスといった階層は入り口として敷居が高いからSelfのようなプロトタイプベースの言語を設計することにする」というようなことが書いてありまして(<おぼつかない記憶)なおかつ、ドリトルには前から興味を覚えていて、ダウンロードして遊んだことがあったりとで、突然、sumimさんの返事の深い意味がわかってきた次第です。意味がわかってくるととても興味深いことが書いてあって、面白くてちょっと興奮してしまいました(笑。なんか、Squeakってわかる喜びを体験するためのツールみたいになってますね)
- そんな切り口もアラン・ケイ博士の思惑にあるように推察しています。
確かにsumimさんが言われるように、インスタンスをもっと自由に動かすためのしくみとして、Playerのようなクラスが必要になるんですね。それはわかります。タイルでスクリプトするまではモルフに対応するPlayerXXクラスは存在しないのに、スクリプトを組もうとするといきなりPayerXXというクラスが自動的に生まれて組んだスクリプトをメソッドとして持ってしまうというしくみが、ようやく分かりました。最初にsumimさんが「Morphic を理解する際に、Smalltalk と Self 双方の特徴とその差異を知らずにそれに当たるのはかなり難しいし、遠回りになると思います。」と言われていた意味がようやくわかりました(感動です)
- 読み返してみると、確かに意味不明ですね、汗。私も教育者の端くれとして、わかる人にしかわらかない(すでに内容が分かっている人にしか面白さが判らない)文章や講義は駄目だと主張して憚らないだけに…涙。まだまだ精進が足りないようで恐縮です。Mac の UI じゃありませんが、入門者に易しく、ベテランには意味深いスケーラビリティに富む文章を書けるように早くなりたいです。
それはそうと、Squeakの存在を知ったのはドリトルのメーリングリストで話題になっていたからですが、Squeakのことを少しかじって、ドリトルが目指していたものがよりはっきり理解できるとは嬉しいかぎりです。実を言うと僕はコンピュータ入門の授業をしているのですが、既成のソフトの使い方をやらせるのはどうも面白くなくてドリトルを使ってみようかな、とか考えていた所、Squeakを見て「こりゃすごい。小学生でもできるじゃないか」と教材としての興味も持っています。
ただ、教える側はいろんな事情を良く知った上でないと使えないので、現在修行中というわけですが、わかるにつれて、ますますわからないことが増えるという困った状態です。
- わかるにつれて、ますますわからないことが増えるのは理解が進んでいる証拠です。その道のプロに申し上げるようなことではないですが…汗。この「わからないこと爆発」を乗り越えると、光が見えてくるというのは分かってはいるのですが、こと自分の勉強に関しては、これが歳をとるにつれおっくうになってきていけません(涙。
自分のモルフを作るというのは、意味がわからずも、本を見ながら挑戦中です。「Squeak-Open Personal Computing and Multimedia」の中のテストモルフを作ったのですが、他のモルフをドロップすると色が変わるのができたときは感動でした(涙)。
その過程をどしろうとの苦戦の記録として公開しても良いのですが、Swikiでの編集の仕方を練習しないといけませんね(汗)あとMathMorphで紹介されていたMorphicWrapperも奇妙で面白いですね。数学的な対象がおしゃべりするのは子供たちにどういう影響を与えるんだろう、なんて考えてしまいます。--Lem - 2002-05-22, 18:06:50
- ざっくばらんにでも構いませんから、是非。 必要なら、体裁は私が適当に整えます(失礼でなければリライトなども…)。ページも、ほら、もう用意しちゃいましたから。Lem さんによる、Morphic 奮闘記 (笑) 最初は、edit ボタンで適当に書き込んで「この内容で表示」ボタンで様子を見る…ところからはじめてみてください。これ(新しいスタイルの WWW パブリッシング)はこれで楽しいですよ。--sumim
とほほ、こんなの用意されちゃ書かないわけにはいきませんね。(困惑!でもちょっとだけ自分の場所があるのはいい気分)自分がいかに何も知らない状態から無謀なことをやろうとしてるのかを日記風につづってみたいと思いますが、いいですか?超初心者を力づけるものになればという思いから書いてみたいと思います。sumimさんは僕の勘違いなどに、つっこみやコメントをひまなときにでも入れて下さい。ちょっとづつ書いていきます。--Lem - 2002-05-22, 21:27:35
- 早速の書き込み、ありがとうございます。今後の展開が楽しみです。--sumim
- Lemさん、はじめまして。とてもスリリングですね。面白いです。--abee - 2002-05-24, 01:02:50
ありがとうございます。そう言っていただけると書いてるかいがあります。--Lem - 2002-05-24, 08:19:39
- Lemさん。ご苦労様です。やっぱそうですよね、折角 おもしろいタイルスクリプティングをおぼえたら、それを Smalltalk でいじりたいですよね。で、ど素人の自分は作った絵は単純に object だから、こいつに命令したら動くよな、とか思うわけです。で、ついでに、タイルスクリプティングでの動かす、回転等の命令というか、それもきっとどっこかのクラスに属していて、これをもとにして新しいことを足していけばとそーやって単純におもってはじめると、うまくいかない^^;
Lem さんのページをみながら自分も、最近はこの sumim さんのホームページ一日一回は眺めるだけで(日本でここしか Squeak のページが更新されないんですよね)ちょっと止まっていますが、やっと注文した、サクサクSmalltalk もとどいたし まだまだ続けますよ。 -- heididorf - 2002-05-25, 18:36:32
- まだ heididorf さん用に用意したページも空き部屋のままなので、よかったらざっくばらんにつぶやきでもいいですから書き込んでみてください。--sumim
heididorf さんありがとうございます。失礼かもしれませんが、heididorf さんが感じておられた疑問などがとても僕と似ていたのでお名前を少し拝借しました。書いてるとsumimさんが鋭い突っ込みを入れてくださるので、書いてるうちにまたまた疑問が増えてきます。とにかく、どしろうとの勘違い特集みたいな感じで続けられる所まで続けようかなって思ってます。一緒に頑張りましょうね。--Lem - 2002-05-25, 19:04:12
- いやぁ。ここを始めた甲斐があるというものです。もっと多くの方にも、「レッスン」は実はきっかけやおまけに過ぎなくて、ここを(いや、ここに限らずどこでも…ですが)、ご自身の考えや疑問を披露したり、情報を共有するために積極的に利用すべき場であると認識していただけるようになるといいのですが…。--sumim - 2002-05-25, 19:43:20
sumim さんコメントありがとうございます。書いていて、なんとなく、こんなの書いてていいのかな?なんて不安になることもありました。とりあえず、続けていいということですね。--Lem - 2002-05-25, 23:52:03
- いえいえ。この調子でお願いします。お忙しいところありがとうございます。楽しく拝読させていただいております。今後、レッスンと似たようなチュートリアルを書く上でもとても参考になります。ご執筆の途中でつっこみのタイミングが悪いとは思いつつも、ざっくばらんにさせていただいておりますが、どうぞご容赦を。--sumim - 2002-05-26, 00:13:14
つっこみは、理解がより深まります。ellipse2345 とかを別のところ(例えばシステムブラウザ)とかの空いたところにコピーしてインスペクトすると Unknown Variable って出てきますね。Workspaceの中の局所変数みたいなものだと考えていいんでしょうか。すでに出てるMorophはなかなかつかまえられないけど、
elly := EllipseMorph new.
elly openInWorld.
ってやると新しいモルフは捕まえられますね。今ならわかる楕円を画面に出す方法(笑)でもやっぱり他の場所だとellyはUnknownになります。ellipse2345 と elly は同じようなものですよね。
おかげで「create textual references to dropped morphs」っていうまわりくどい言い方の意味がようやくわかった気がします。名前じゃなくて名前をつけたんですね。--Lem - 2002-05-26, 16:01:11
- 一時変数の処理がどうなっているのか知らないので分かりませんが、おおざっぱには同じものだと思って良いと思います。くだんの処理は Workspace>>acceptDroppingMorph:event:inMorph: にあります。この機能に細工して、グローバル変数にドロップインしたモルフを関連づけてやれば、どこでも使える“名前”とすることが可能だとは思います。が、ドラッグ&ドロップができるモルフに限って言えば、デバッグハロ(灰色ハロ)のメニューから inspect できるので、(気に入らなければ自由にいじってくれとは言われていても)システムをいじるところまでせんでもいいような…気もします(笑)。--sumim - 2002-05-26, 16:25:56
- ワークスペースの中で宣言しなくても使える変数はワークスペース変数と呼ばれています。この変数の奇妙な振る舞いについてはSMLの過去ログにあるスレッド「[SML 5503] 宣言無しの一時変数について」をお読みください(2002年2月分と3月分)。--abee - 2002-05-26, 17:24:50
そういえば、僕はSmalltalkのお勉強をしてるときに、ワークスペースの中でもいちいち変数を宣言していたのを思い出したました。| temp | とか、宣言してあとでこの中身をみようとしたらエラーっぽくなるんですよね。もう消えてるんですね。で、僕はなんだか不便だなあ、って感じていたんです。ところが、Squeakでは宣言なしに使ってるなあ、って思っていて、いいのかな?ずうっと消えない変数になったりしないのかな?なんて考えてたんですが、いつでもインスペクトできたりするんでこっちのが便利だなって思っていたんです。
abeeさんに紹介してもらった過去ログを読むと(まだ全部読んでませんが)ところどころ意味のわかることが書いてあって、興味深かったです。そのあとVisualWorkを動かしてみると、ワークスペースにVariableってタブがあって、今まで何のことが意味がわからなかったけど、今わかりました。ここでワークスペースの中で使った(宣言なしの)一時変数を見ることができるんですね。奇妙なふるまいについてはまだ、良くわかりません。 --Lem- 2002-05-26, 23:40:08
- 「便利」というのは、時として困った問題を引き起こします。Lemさんも気付かれたようにワークスペース変数の寿命は、一見してよく分かりません。何日も前にワークスペースの上の方で使った変数の値がまだ生きていて、今試そうとしている式の結果がおかしくなることも現実に起こります(しかも、その式だけ見ていてもどこもおかしくない)。
これに対して、一時変数はいちいち宣言しないと使えないですし、寿命や有効範囲も実行しているメソッドの中だけなので不便ですが、これらのことが厳密に定義されているので、曖昧な挙動を示すことがありません。これはプログラミングを行なう上でとても大切なことです。まったく同じプログラムがあるときは動いたり、あるときは動かなかったりというのはあんまりでしょう。その意味でワークスペース変数は初心者用ではなく、中上級者がその性質を分かった上で楽をするためにあると考えています。
ちょっと話が逸れますが、一般論として、発見的な学習は、発見的であるがゆえに面白いですが、体系的な学習に比べて、一定の水準以上に達することが難しいのではないかと思っています。
このことが日本語の本が多く、言語仕様やライブラリのかっちりしたVisualWorksを勧める理由のひとつでしょう。ただし、これには例外があって、徒弟制のような関係がある場合はうまくいくこともあるようです。Swikiのような環境が出現したことによって、その代わりになるかどうかが興味深いところです。--abee - 2002-05-27, 00:13:35
僕は現在、たいしたことに使ってないのでSaveしないからわからなかったですが、何日も前の変数がいたずらをするというのは怖いですね(汗)そういうことがあることを考えるとViualWorksのVariableというタブはとても大切ですね。
発見的、体系的学習の話ですが、学ぶ側は「発見的」学習を好んでやりますが、ああ面白かったで終わることが多いように感じます。また、我流になってしまう。このようなことを言われているのでしょうか?僕としては、教える側の立場からはグローバルには体系的にローカルには発見的にというイメージを理想にしています。--Lem - 2002-05-27, 10:27:12
- そうですね。どんなシステムでも突然ぽっと出てきたものではなく、それが出来るまでには色々な歴史があります。これらの中には表面をなぞっていくだけでは、理解が困難なものがあるのではということです。
確かにSmalltalkのインスペクタやデバッガは、オブジェクトを解体して調べることを可能にしますが、そのオブジェクトがなぜ作られたのかという意図まで汲み取ることは難しいと思います。特にMorphicおよびEToyのメカニズムは鷲見さんも指摘されているようにSmalltalkの歴史の中でも特殊な位置付けにあるもので、この解析からSmalltalkの世界に入るのは辛いような気がします。加えて、Squeakのコードは場当たり的に書き散らしたものが多く、「例によるプログラミング」を旨とする立場からすると、変なクセが付く可能性が高いのではという危惧もあります。--abee - 2002-05-29, 15:39:30
- abeeさんありがとうございます。いやあ、僕はだんだん謙虚になってきましたよ(笑)「Etoy の解析からSmalltalkの世界に入るのが辛い」というのは痛いほどわかりました(泣き笑い)いかに辛いかをつづったのが僕の奮闘記というわけですね。おっしゃるとおり、なぜ作られたかという意図はそう簡単に汲み取れるものではないです。こういう場でsumimさんのサジェスチョンがなければさっぱりわからなかったことがほとんどですから。---Lem
heididorfさん「サクサクSmalltalk」はどうですか?
僕はSmalltalkはじめてさわって、とても面白いと感じています。ただ、どうもStreamというクラスがいまいちしっくり来てません。修行不足です。また、グラフィックを出すしくみもまだ謎につつまれています。今、ゆっくり勉強中です。--Lem - 2002-05-27, 18:06:39
- サクサクSmalltalk ぼちぼち読んでいます。ご報告できることがあれば書込みさせていただきます。しばしお待ち下さい。 -- heididorf - 2002-05-27, 18:16:33
このページを編集 (31261 bytes)
|
以下の 2 ページから参照されています。 |
This page has been visited 7632 times.