トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

#contents

*Squeak とは

フリーでオープンな Smalltalk システムのひとつ。または、仮想マシン技術で動作する GUI ベースの OS(厳密にはモドキ)。他の Smalltalk システム同様、ネイティブ言語は Smalltalk 言語だが、Squeak システムではそれとは別に eToys というエンドユーザー向けのビジュアル・スクリプティング環境が新たに追加されている。

*Smalltalk システム

'70 年代、XEROX のパロアルト研究所(PARC)で作られた試作機「ALTO」用の OS のひとつ ((ALTO = GUI(の元祖)というイメージが強いが、ALTO のいくつかある OS の中で本格的に GUI を採用した OS は Smalltalk だけ。なお、Smalltalk を OS として動作する ALTO は「暫定ダイナブック」と呼ばれた。'79、PARC の見学でジョブズたちが観たのも ALTO というよりはこの暫定ダイナブック。)) 。今やお馴染みの GUI、そして、オブジェクト指向 ((ただし、ここでのオブジェクト指向はカプセル化・継承・多態性の三要素で知られる C++ 由来のオブジェクト指向ではなく「すべてをオブジェクトとそれに対するメッセージ送信で表現すべし」というドグマにもとづく考え方。本来、両者は区別されるべきだが、渾然一体として語られることが多く、混乱の元となっている。メッセージ指向とも。)) を本格的に採用した史上初の個人ユーザー向けコンピュータシステムで、後の OS に多くの影響を与えた。結果的に、Smalltalk を OS にした ALTO が世に出ることはなく ((同じ XEROX だが PARC ではない部署で作られた別の GUI ベース OS「Star」を搭載し、パソコンではなくワークステーションとして販売された。暫定ダイナブックの販売が却下されたのも、Star のせいと言われている。)) 、Smalltalk は用途を限定した開発環境「Smalltalk-80」 ((現在も、VisualWorks として販売されている。ちなみに Squeak は、発掘された Smalltalk-80 のサブセット( Apple 社向けにライセンスされた古い MC68000 Mac 用 Apple Smalltalk)をベースに作られたので、VisualWorks とは遠い親戚ならぬ、パラレルワールドの同一人物。)) として販売されたため、その後は単なる言語処理系というイメージが定着してしまった。


*Smalltalk 言語

Smalltalk システムのネイティブ言語。自身の処理系、言語仕様的部分も含めた基礎部分から、GUI フレームワーク、標準添付のアプリケーション((見せ方でアプリケーションソフトのように思わせているだけで、実際には、通常の OS におけるアプリケーションソフトに相当するものはない。))にいたる当該システムのほぼ全機能がこの言語により記述されている。さらに、GUI や各種ツールを介して用いることで、エンドユーザー向けスクリプティング言語としても使用できる((というか、Smalltalk システムは、エンドユーザーと開発者(システム記述者やアプリケーション構築者)の区別を原則としてしない。ただ、逆にこのポリシーは、古くより Smalltalk を開発環境としてしか認識しない無理解をはびこらせ、その進化を妨げてしまってもいる。))。

原則として Smalltalk 言語のコードは式のみで構成される。式はリテラル式((簡単には、オブジェクトを直接生成する式のこと。念のため。))を除き、

 メッセージレシーバ メッセージ

の書式に従う。これを「メッセージ式」と呼ぶ。配列要素へのアクセス、二項式、条件式、条件分岐、ループなど通常の言語では構文の一部などとして定められているものの記述も例外ではない。書式のメッセージレシーバ部分には、リテラル式、オブジェクトを束縛した変数、(オブジェクトを返す((Smalltalk の式、つまり、メッセージ式は要不要に関わらず必ず返値を持つ。void はない(あるいはそうした指定はできない)、ということ。)))別のメッセージ式のいずれかが当てはまる。

メッセージ部分の記述は、Smalltalk 言語でもっともとっつきにくい特徴のひとつであるが、ちょっと変わった関数の呼び出しにすぎない…と考えると比較的理解しやすい。関数は、0個以上の引数をとり、関数名には引数と同数の「:」を含めなければならない(それ以外はアルファベットのみで構成)。また、引数を1つ以上持つ関数の関数名は「:」で終わらなければならない。引数を2つ以上持つ場合は、「:」を連続させてはいけない((ただし、同種の記法を採用した Objective-C ではこれを許している。))。最後に、メッセージとしての記述の際、引数は「:」の後に(必要なら前後にスペースを伴わせて)挿入/追記する。

以上をまとめると、たとえば、次のようなものが典型的なメッセージ式となる。

 Point x: 3 y: 4    "Point がレシーバ、x: 3 y: 4 がメッセージ"
                    "#x:y: が関数名、3 と 4 が引数"

一般的な言語の書式に従うと、これは Point.x:y:(3,4) というふうに書くことができる((「:」も関数名に含まれることに注意。たとえば、foo と foo: なら両者は区別される。))ので参考にされたい。他方で、二項式に相当するメッセージ式は「二項メッセージ式」と呼ばれ、関数名がアルファベットではなく記号のみより成り立つ点で異なるが、ほぼ同じ考え方に従って解釈する。

 3 + 4              "3 がレシーバ、+ 4 がメッセージ"
                    "#+ が関数名、4 が引数"

Smalltalk では、関数を「メソッド」、関数名を「セレクタ」((もちろん、素直に「メソッド名」でもよい。))と呼ぶ。なお、セレクタの実体はシンボル((等価なとき同一性が保証され、かつ、内容を変更できない特殊な文字列オブジェクト。))であることから、そのリテラル記述の際に使用する「#」を冠して、#x:y:、#+ などと表現するのが一般的である。((さらに、それを内包するクラスを明示的にして、Integer >> #+、Float >> #+、Fraction >> #+ などと記するのがより正式。))

関数、つまりメソッドは単独での存在を許されず、必ず何かしらのクラスに明示的に内包される。また、メッセージ式(つまり、インスタンスへのメッセージ送信)を介さずに関数を直接“名指し”で起動することはできない((実はできたりもするが、ふつうはそういうことはしない。こうした「できるけどやらない」といった暗黙の了解や紳士協定、古くからの慣習が Smalltalk には実に多い。「Smalltalk は書物からでは学べない」というようなことが言われるのも、そのため。))。Smalltalk 言語には組み込みの関数というものはなく((区別としてあるのは、ディストリビューションに最初から含まれていたか、あとからユーザーが追加したか程度で、それすら定義を終えた瞬間から区別はなくなる。))、そのすべてが、システムに付随するクラスライブラリを介して提供されている。これに動的型システムである(変数に型がない)ことを言い添えれば、以上が、言語仕様のほぼすべて。LISP に次いで単純な仕様の言語と言える。

ただこれだけでは Smalltalk 言語の何も理解したことにならないので、実際に使用するにあたっては、本来の言語仕様的な部分を定める(ディストリビューションに共通して含まれる)基本的なクラスに対する理解はもちろん、GUI や各種ツール群について最低限の知識もまた、別に必要になる。


*eToy(SqueakToys)

Squeak システムに標準で装備されたビジュアルスクリプト言語とその環境。Smalltalk 言語で組まれているが、Smalltalk 言語とはまったく別の仕様を持つ((たとえば、Ruby は C 言語で組まれているが、Ruby と C 言語はまったく異質の言語である、のと同じ。))。言語としての大きな違いは、コードがメッセージ式で構成されないこと、静的型システムである(変数に型がある)こと、インスタンスベース((プロトタイプベースとも言う。クラスがない(言語仕様に含まれない)ことが強調されがちだが、これは本質ではない。))である(インスタンスがメソッドを持てる)こと、など。

ユーザーは、「モーフ」という視覚化に適したオブジェクト((厳密には、スクリプティングは「プレーヤ」と呼ばれる不可視のオブジェクトに対し行なわれる。モーフは、プレーヤのまとう「コスチューム」に過ぎない。))に対し、各モーフに対応する「ビューワ」と呼ばれるある種のコントロールパネルから、「フレーズ」と呼ばれるタイル状の機能を意味する矩形をブロック上に組み合わせてスクリプトを記述する。


*リンク

-本家です~
[[Welcome to Squeak:http://www.squeak.org/]]

-日本語版の中心~
[[多言語化Squeakホームページ:http://squeak.hp.infoseek.co.jp/]]

-eToyならココがおすすめ☆~
[[Fun Fun Fun Squeak!!:http://hw001.gate01.com/~thoru/squeak/funsqueak.html]]

-超簡単なWikiとかもできるよ~
[[SqueakでSmallWiki:http://www.mars.dti.ne.jp/~umejava/smalltalk/squeak/swiki/smallWiki.html]]

*コメント/通信欄

[とりあえずページを作っただけなので、これから書きます・・・詳しい方、書いてください(笑)--機械]

[では、とおりいっぺんに。w --sumim]

[説明感謝です・・・私じゃここまで書けない --機械]

[恐縮です。このくらいならおやすい御用です。他に、書いておいたほうがよい情報、知りたいことがありましたらお気軽に。最近は Python もかじっておりますので、ちょっとした比較や対比なども可能です。--sumim]

[項目増やしてみました。特にSmalltalk言語(オブジェクト指向プログラミング言語)については私もまだまだ勉強中なので、C++系言語(含むPython etc)との比較について何か書いていただければ幸いです。--機械]

[どこからはじめたらいいか分からなかったので、とりあえず、言語仕様の初歩の初歩だけ書いてみました。さて、ここからどうやって C++ などとの比較に繋げましょうか…。w --sumim]

#comment