@ledsun blog

無味の味は佳境に入らざればすなわち知れず

初めてのIO言語

プロトタイプベースといえばIO言語。 遊んでみました。

インストール

インストーラーはありません。バイナリをダウンロードしてきて実行します。Windowsの場合は、

  1. http://iolanguage.org/ のbinaries の windows からダウンロード。
  2. iobin-win32-current.zip って名前のzipファイルなので解凍する。
  3. 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言語はプロトタイプベースですが型を扱うことができます。用途は知りません。

7つの言語 7つの世界