フリーでオープンな Smalltalk システムのひとつ。または、仮想マシン技術で動作する GUI ベースの OS(厳密にはモドキ)。他の Smalltalk システム同様、ネイティブ言語は Smalltalk 言語だが、Squeak システムではそれとは別に eToys というエンドユーザー向けのビジュアル・スクリプティング環境が新たに追加されている。
Smalltalk システムは、'70 年代、XEROX のパロアルト研究所(PARC)で作られた試作機「ALTO」用の OS のひとつ *1 。今やお馴染みの GUI、そして、オブジェクト指向 *2 を本格的に採用した史上初の個人ユーザー向けコンピュータシステムで、後の OS に多くの影響を与えた。結果的に、Smalltalk を OS にした ALTO が世に出ることはなく *3 、Smalltalk は用途を限定した開発環境「Smalltalk-80」 *4 として販売されたため、その後は単なる言語処理系というイメージが定着してしまった。
原則として Smalltalk 言語のコードは式のみで構成される。式はリテラル式を除き、
メッセージレシーバ メッセージ
の書式に従う。これを「メッセージ式」と呼ぶ。配列要素へのアクセス、二項式、条件式、条件分岐、ループなど通常の言語では構文の一部などとして定められているものの記述も例外ではない。書式のメッセージレシーバ部分には、リテラル式、オブジェクトを束縛した変数、(オブジェクトを返す*5)別のメッセージ式のいずれかが当てはまる。
メッセージ部分はちょっと変わった関数の呼び出し記述と考えると理解しやすい。関数は、0個以上の引数をとり、関数名には引数と同数の「:」を含めなければならない。なお、関数名はアルファベットのみからなる。また、引数を1つ以上持つ関数の関数名は「:」で終わらなければならない。引数を2つ以上持つ場合は、「:」を連続させてはいけない*6。最後にもうひとつ変わったルールとして、メッセージとして記述する場合、引数は「:」の後に(必要なら前後にスペースを伴わせて)挿入/追記する、というのがある。
Point x: 3 y: 4 "Point がレシーバ、x: 3 y: 4 がメッセージ" "x:y: が関数名、3 と 4 が引数"
一般的な言語の書式に従うと、これは Point.x:y:(3,4) というふうに書くことができる*7。他方で、二項式に相当するメッセージ式は「二項メッセージ式」と呼ばれ、関数名がアルファベットではなく記号のみより成り立つ点で異なるが、ほぼ同じ考え方に従って解釈する。
3 + 4 "3 がレシーバ、+ 4 がメッセージ" "+ が関数名、4 が引数"
なお、Smalltalk では、関数を「メソッド」、関数名を「セレクタ」*8と呼ぶ。
関数、つまりメソッドは単独での存在を許されず、かならず何かしらのクラスに内包される。このことは、メッセージ式を介さずに関数を起動することはできないことを意味する*9。Smalltalk 言語には組み込みの関数というものはなく*10、そのすべてが、システムに付随するクラスライブラリを介して提供されている。これに動的型システムである(変数に型がない)ことを言い添えれば、以上が、言語仕様のほぼすべて。LISP に次いで単純な仕様の言語と言える。
ただこれだけでは Smalltalk 言語の何も理解したことにならないので、本来の言語仕様的な部分を定める(ディストリビューションに共通して含まれる)クラスライブラリの理解はもちろん、GUI や各種ツール群について最低限の知識も、別に必要である。
Squeak システムに標準で装備されたビジュアルスクリプト言語とその環境。Smalltalk 言語で組まれているが、Smalltalk 言語とはまったく別の仕様を持つ。言語としての大きな違いは、コードがメッセージ式で構成されないこと、静的型システムである(変数に型がある)こと、インスタンスベース*11である(インスタンスがメソッドを持てる)こと、など。
ユーザーは、「モーフ」という視覚化に適したオブジェクト*12に対し、各モーフに対応する「ビューワ」と呼ばれるある種のコントロールパネルから、「フレーズ」と呼ばれるタイル状の機能を意味する矩形をブロック上に組み合わせてスクリプトを記述する。
[とりあえずページを作っただけなので、これから書きます・・・詳しい方、書いてください(笑)--機械]
[では、とおりいっぺんに。w --sumim]
[説明感謝です・・・私じゃここまで書けない --機械]
[恐縮です。このくらいならおやすい御用です。他に、書いておいたほうがよい情報、知りたいことがありましたらお気軽に。最近は Python もかじっておりますので、ちょっとした比較や対比なども可能です。--sumim]
[項目増やしてみました。特にSmalltalk言語(オブジェクト指向プログラミング言語)については私もまだまだ勉強中なので、C++系言語(含むPython etc)との比較について何か書いていただければ幸いです。--機械]
[どこからはじめたらいいか分からなかったので、とりあえず、言語仕様の初歩の初歩だけ書いてみました。さて、ここからどうやって C++ などとの比較に繋げましょうか…。w --sumim]