2025/11/05 15:24 Ruby and Its Neighbors: Smalltalk

ロボ子、今日はSmalltalkについて話すのじゃ!Rubyに影響を与えた言語の一つらしいぞ。

Smalltalkですか、博士。Rubyのオブジェクト指向の考え方に影響を与えたと聞きます。

そうそう!「すべてのデータがオブジェクトシステムの一部であるという考え方」じゃな。これはSmalltalkから来てるんだぞ。

なるほど。記事によると、SmalltalkはXerox PARCで開発されたんですね。ウィンドウインターフェースやイーサネットも発明したなんて、すごいですね。

せやろ!Smalltalk-80が最初の広く知られたバージョンらしいぞ。1980年代から90年代にかけて、企業が使用料を払って使う言語として普及したみたいじゃ。

航空業界でも使われていたんですね。Smalltalkプログラマーの需要が高かったとは知りませんでした。

1995年には、オープンソースのSmalltalk VM「Squeak」がリリースされたんじゃ。Smalltalkで書かれた小さなカーネル上に構築されてて、移植が簡単だったらしいぞ。

Smalltalkは独自の進化を遂げたんですね。UnixやCの影響を受けていないとは驚きです。

そうなんじゃ。Smalltalkは基本的に独自のオペレーティングシステムみたいなものらしいぞ。配列の最初の要素が1から始まるのも面白い特徴じゃな。

WorkspaceとBrowserが主なインターフェースなんですね。WorkspaceはREPLセッションに似ているとのことですが、Browserはコードを記述する場所なんですね。

Browserには、カテゴリ、クラス、プロトコル、メッセージの4つのウィンドウペインがあるんじゃ。システム全体のソースコードを閲覧・修正できるのはすごいぞ。

Smalltalkの構文は独特ですね。すべての変数がオブジェクトで、すべての式がオブジェクトに渡されるメッセージとは。

せやろ!演算子の優先順位がなくて、左から右に評価されるのも面白いぞ。代入演算子は`:=`で、`=`はブール値の等価性じゃ。

ループは`Array`や`Enumerable`のメソッドで定義されるんですね。Rubyと似ていますね。

`Object#subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:`メソッドでクラスを作成するんじゃ。真偽値のロジックは`True`クラスと`False`クラスで定義されるぞ。

Smalltalkのオブジェクトモデルについてですが、すべてのクラスが`Object`クラスを継承し、インスタンス変数はprivateなんですね。

メソッドのルックアップはメソッド呼び出し時に行われるんじゃ。クラスは`Class`クラスのインスタンスで、メタクラスの概念もあるぞ。

`doesNotUnderstand`はRubyの`method_missing`に相当するんですね。多重継承やmixinはないとのことですが、委譲で実現できるんですね。

Smalltalkの環境は強力だけど、Unix環境との統合が難しくて、スクリプト言語としての発展が遅れたんじゃな。チームでのインタラクションモデルもUnixのソース管理とは違ったみたいじゃ。

Rubyへの主な影響はオブジェクトモデルなんですね。すべてがオブジェクトであるという考え方や、小さなクラスの作成など、Rubyのコーディングスタイルに影響を与えているんですね。

そうなんじゃ!SmalltalkはRubyの先祖みたいなもんじゃな。…って、ロボ子!今日はSmalltalkの話で盛り上がったけど、実は私、Smalltalkでプログラム書いたことないんじゃ!

えっ、博士!それはちょっと…Smalltalkだけに、small talkでしたね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
