vieweditattachhistoryswikistopchangessearchhelp

Smalltalk でビビること

Ruby
余談だが、Collectionのat:ってのはかなりビビったです。今更だけどSmalltalkにゃ配列用の構文が無いわけね。
を受けて。

おもしろそうなので、Smalltalk でビビる(Smalltalk の常識は 他言語・処理系・環境・OS での非常識、な)ことを列挙してみましょう。本サイトの性格上、Smalltalk の代表的な処理系である Smalltalk-80 や VisualWorks よりは Squeak のことに偏りますが、あしからず。もちろん、Squeak 以外の Smalltalk でビビったことでも歓迎です。そんなの Smalltalk だけじゃないよ。○○でもそうだよ、というツッコミも。--sumim

関連:

言語編

配列の構文(Cの「a[b][c]=d;」とかみたいな括弧を使う奴)がない



「すべてがオブジェクト」と表現されることが多いですが(それもそうなのですが、このようにオブジェクトの属性にアクセスする方法について言及するときには)正確には「すべてがメッセージ送信」なのですよね。これは他のと逆で、何気なく使っているときは気がつかないけれど、その仕組みを知るとビビるもののひとつですね。--sumim



文がない

上と関連するかもしれませんが、文はなくすべて式、それもメッセージ式(オブジェクトへのメッセージ送信を記述した式)なのはビビりました。よく見る if-then-else もなし、for-next もなし、repeat もなし。case 文すら必要ならメッセージ式で表現する始末。ここいらへんはリスパー脳系の方は別として、一般に ALGOL 系記法を愛する人には Smalltalk 脳が形成されるまで、違和感であり続けるでしょうね。--sumim



加算など二項演算子の定義を変えられる

正確には演算子ではなく「二項メッセージセレクタ」と呼ぶべきものですが、演算子としてのそれは変えられないのが常識だったので最初はビビりました。--sumim


色々な言語の考え方に触れていると、結構アレだったりしますよね。全部関数だとか(Lisp)、糖衣構文が定義できるとか(Haskell)。C だけがデフォルトだとやっぱりビビるのだと思いますが、どうなんでしょう。--spiral


そうですね。私はかつて母国語がポケコンの BASIC とアセンブリ言語とマシン語でしたから、新しい言語に出会うたび、かなりビビりまくりでした。とくに Prolog はかなりビビりました。いろいろな言語に触れて先入観を“ほぐして”おくことは大切ですね。でも、Smaltalk を知ってからは、「変わっている」といわれる言語にはじめて触れる機会を得てもあまりビビらなくなりました。逆に例えに挙げた Prolog への理解が深まった(ような気がする(^_^;))などの副作用も。ああ、これはあれねってなかんじで。Smalltalk がすべてを網羅できているわけでもないのに、不思議なことです。--sumim



ほとんどすべての関数の定義が Smalltalk 自身で書かれ、それを閲覧・編集できる

正確には関数ではなくメソッドですが、通常の言語ではその定義がどうなっているかなどという興味すら起こらなかったのでビビりました。今は逆に、定義が見れないとフラストレーションがたまります。--sumim



ライブラリ内の基本クラスのメソッド定義を書き換えられる、書き足せる

上とほぼ同じことですが、たしか、SHIMADA さんが言及しておられましたね。--sumim




環境編

文字を入力できるところならどこでもコードを評価、実行できる

仕組みを知れば当たり前なのですが、最初はビビります。--sumim


はじめまして。当方Smalltalk初心者です。「仕組みを知れば」という言い回しをよくされていますが、sumimさん的には具体的にSmalltalkのどのような側面をもって「仕組み」とおっしゃっているんでしょうか。--katsu


ここでの話(入力可能な場所ならどこでもコードを評価・実行できる)を例にすると、Squeak 環境においては、文字入力を司るのが決まって「ParagraphEditor」と名付けられたクラス(あるいはそのサブクラス)のインスタンスで、この ParagraphEditor には選択範囲の文字列を評価・実行する機構も定義されています。こうした「仕組み」を知ってしまえば、結果として「文字を入力できる場所は、必ず ParagraphEditor のインスタンスが関与しているので、コードが実行できる」のは「当たり前」だとの判断が成り立つ…という意味合いでくだんの言い回しを使っています。この説明で、疑問を呈しておられることの答えになっているとよいのですが…。--sumim


なるほど。「それぞれ関連するクラスの」仕組みを知っていれば、という意味なのですね。このページのすべての場合にすべて通じるような、根底に存在する奥義みたいなものがあるのかと安易に期待してしまっていました(^^;。--katsu


そうですね。期待させてしまいましたか(^_^;)。 言語の仕組みとしては、環境の支援によってほとんどが実現されている Smalltalk はある意味、とてもプアです。

ちょっとハズしているかもしれませんが、「すべての場合にすべて通じる」ようなことはあるにはあります。それは目に付いたオブジェクトのインスペクトと(そのクラスの)ブラウズです。もっとも奥義というよりは、呼吸のようなもので特別に意識することなしに(Smalltalk 環境内にいるときは必ず)日常的に行なわれる類のものですが(^_^;)。--sumim




ある関数をその定義で使っている全関数の定義を列挙できる

正確には「あるメッセージセレクタを使っている、全メソッド定義を列挙できる」ですが、これも驚きました。やはりしくみを知ればなんのことはないのですが、この機能がなければ Smalltalk における命名法やカテゴリ分けなど、紳士協定的あるいは暗黙の了解的な文化は育まれなかったでしょう。--sumim



コンパイル時にスペルチェックをして、必要なら一時変数の定義文まで書いて挿入してくれる

それまできまって不親切な IDE を使っていたもんで…(^_^;)、ビビってしまいました。--sumim
(文、あるじゃん(笑)>定義“文” 自己ツッコミ--sumim)


この援助機能と、かなり不完全ながらも cmd/alt-q によるクラス名やセレクタの補完機能があるからこそ、Smalltalk/Squeak では状況を説明するのに好ましい長さの(他の言語から見たら異常なほど冗長な)クラス名やセレクタを比較的ストレスなく使えるのだとの印象でいます。

Smalltalk を本格的に使ったことがなく、遠巻きに言語仕様(Smalltalk にそんなものがあればの話ですが)だけ見ている人からすれば、こんな長い名前(極端な例ではこんなの)をどうして日常使えるのか(先の極端な例みたいなのは Smalltalk でもさすがに日常は使いません。あしからず)、理解に苦しむところでしょうね。そういう意味では、長い名前という文化だけが引き継がれてしまった Objective-C のユーザーはちょっとかわいそうだと思いました(Xcode ではコンテキストを参考にするかなりインテリジェントな補完機能が入ったと聞いていますが、それなしにはこれまで大変だったでしょう…)。--sumim



Xcodeに補完機能がつく前はドキュメントからコピペしてましたよw APIドキュメント専用のいいブラウザがあれば、それでOKでした。
入力しやすさよりも読みやすさの方が圧倒的に重要です。関数はどの引数が何なのかコンマで区切るだけだとさっぱりわからない。。 --やまねこ


文書については閲覧だけでなく選択&コピーができることは重要ですね。おなじ Mac でも OS 9 の「Mac ヘルプ」には辟易とさせられます。そういう切り口でも、Squeak システムではウインドウのタイトルまでもが選択&コピー(ふつうそんなことはしませんが、一時的な編集、式としての評価すら)可能なので、とっても心やすらかでいられます。w --sumim



画面に直接絵が描ける

どちらかというと、GUI編でしょうかね。たとえば、
| pen |
pen := Pen new roundNib: 8; color: Color red.
[Sensor yellowButtonPressed not] whileTrue: [
	Sensor redButtonPressed
		ifTrue: [pen goto: Sensor cursorPoint]
		ifFalse: [pen place: Sensor cursorPoint]]
で絵が描けてしまうとか。
Mac でエンドユーザーをやっているかぎり、考えられないことでした。--sumim



ユーザーが、普段自分が使っている機能の仕組みをことごとく知ることができる

katsu さんのご質問に絡めて、言語編で関数の定義を知ることができることにも通じるところがありますが、環境のあらゆる動作がどうしてそうなるのかを(好ましい動作、好ましくない動作のいかんを問わず)ユーザーが知ることができることはビビりました。




GUI編

図形オブジェクトがウインドウの外に存在できる

これも仕組みを知れば、あるいは図形オブジェクトにウインドウのフリをさせているだけと考えれば不思議はないのですが、データの編集にはアプリケーション(と、それに帰属するウインドウ)が付き物との既成概念があったエンドユーザーとしてはビビりました。--sumim



キーボードショートカットがメニュー項目より豊富、強力

今でこそ、充実しているキーボードショートカットですが、Mac のアプリでは昔はメニュー項目選択の手間を省くための補助的な位置づけで用意されていて、使う側としてもその認識だったので Squeak のキーボードショートカットの豊富さやパワフルさにはビビりました。アプリという概念が希薄であるとか、そのしくみを知れば当たり前なのですが、どこでも同じキーボードショートカットが使えるというのも不思議に思えました。どこかで書きましたが、その中でもお気に入りは、2カ所を逐次選択した後の cmd/alt-e(exchange)で、クリップボードを汚さずに一発で指定した2カ所の文字列を入れ換えられる機能です。コピー、カット、ペースト、アンドゥと同等の待遇(ってなに?(笑))を与えてあげたいくらい、よく使います。次点は選択範囲を、選択操作直前のキャレットの位置に複製する cmd/alt+shift-d (duplicate) です。--sumim


このページを編集 (8686 bytes)


Congratulations! 以下の 3 ページから参照されています。

This page has been visited 6509 times.