pepsiはプロトタイプベース言語?

こっちに引っ越してきました。

pepsi.htmlを読んでいます。表題の通りなんですね。Smalltalk/80と似た言語ということで頭っからクラスベースと思い込んでいました。

むちゃくちゃな例ですが、こんなことができます。

{ import: st80 }
Wao : Object ()
Wao wao [ 'wao' println ]
[
Wao wao.
]
Wap := [ Wao new ]
Wao wap [ 'wap' println ]
[
Wap wao.
]

WaoはObjectを継承するプロトタイプオブジェクトです。Objectを継承する理由は、途中でnewメソッドを使っているからです。これはただの宣言のように見えますが実際Waoオブジェクトを作成したことになります。

その次の行でWaoにメソッドwaoを追加しています。これは画面にwaoと表示します。

トップレベルにある大カッコで囲まれたのはブロックで、ファイルの頭の方のものから実行されます。最初のものは定義したWaoにいきなりwaoメッセージを送ります。

WapはTranslation Unit変数(変換単位変数?グローバル変数のようなもの)で、プロトタイプWaoのコピーが格納されます。

次のはWaoオブジェクトにwapメソッドを追加しています。

最後のブロックはWapにwaoを送ったり、後から追加したwapをWaoに送ったりしています。

出力は以下のようになります。

'wao'
'wao'
'wap'
'wap'

st80ライブラリやjoltのソースを見るとかなりいろんなことがわかります。