プロトタイプベースといえばIO言語。 遊んでみました。
インストール
インストーラーはありません。バイナリをダウンロードしてきて実行します。Windowsの場合は、
- http://iolanguage.org/ のbinaries の windows からダウンロード。
- iobin-win32-current.zip って名前のzipファイルなので解凍する。
- IoLanguage-2012.11.09-win32.exe ってファイルが入っているので実行する。これも自己解凍形式。解凍先を聞かれるので適当に選びます。
解凍したフォルダにbinとlibというフォルダがあるので、コマンドプロンプトを開いてbinの方に移動して
ioと打つとREPLが起動します。
io Io 20110905
実行
7つの言語 7つの世界をお手本に動かしてみます。
オブジェクトを作成
Vehicleオブジェクトを作ります。 オブジェクトを作るときは元になるオブジェクトに対してcloneメッセージを送ります。 すごく...プロトタイプベースです。 あ、オブジェクトとメソッドの間に.(ドット)は要りません。
Io > Vehicle := Object clone ==> Vehicle_0x1653550: type = "Vehicle"
:= 演算子(IOでは演算子もメソッドらしいよ!)を使ってVehicleオブジェクトにプロパティ(IOではスロットと呼びます)を追加します。
Io> Vehicle description := "Something to take places" ==> Something to take places
追加したプロパティ、じゃなかったスロットを参照します。
Io> Vehicle description ==> Something to take places
スロットを定義するときは := で上書きなら = です(:=でも上書きできます)。:= の代わりに = を使うと怒られます。
Io> Vehicle nonexistingSlot = "This won't work." Exception: Slot nonexistingSlot not found. Must define slot using := operator before updating. --------- message 'updateSlot' in 'Command Line' on line 1
現在定義されているスロットを見るには slotNames メッセージを使います。
Io> Vehicle slotNames ==> list(description, type)
typeという定義した覚えのないスロットがあります。これは型を返します。
Io> Vehicle type ==> Vehicle
型
型?プロトタイプベースで型ってなんでしょう?大文字のオブジェクトは型になります。小文字のオブジェクトを作るとtypeスロットがありません。
Io> machGo := Vehicle clone ==> Vehicle_0x15cbb88: Io> machGo slotNames ==> list()
typeを見るとcloneした元のオブジェクトの型が表示されます。
Io> machGo type ==> Vehicle
マッハ号をさらに clone しても型はVehicleです。
Io> machGo2 := machGo clone ==> Vehicle_0x1633d90: Io> machGo2 type ==> Vehicle Io>
IO言語はプロトタイプベースですが型を扱うことができます。用途は知りません。