Io begin

釣られて始めてみた。
http://www.iolanguage.com/scm/git/checkout/Io/docs/IoGuide.html / http://www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html

  • 全てオブジェクト。スロットはプロパティかつメソッド。
  • 構文はメッセージ式のみ*1
    引数に渡された式は遅延評価される(→制御構造の実現)。
Io> m := method(nil); m("hoge" print)
==> nil
Io> m := method(a, nil); m("hoge" print)
hoge==> nil
Io> method(x:=1+2%3/4*5**6) code
==> method(setSlot("x", 1 +(2 %(3) /(4) *(5 **(6)))))
  • 『Io』だと短すぎ(て検索性に欠け)るので通称『iolanguage』(長い)。


とにかく徹底してシンプル。
『グルーピングのための括弧』すらメソッドで実現している。

Io> ()

  Exception: Io Assertion 'argument required'
  ---------
  message '' in 'Command Line' on line 0

Io> (7+8)*9
==> 135
Io> getSlot("")
==> Object_()
Io> setSlot("",0)
==> 0
Io> (7+8)*9
==> 0
Io> ()
==> 0


ゴルフも強いかと思いきや…

# echo.io
File standardInput contents print

Smalltalk風の冗長なメソッド名が仇となるのだった。( −−)

*1:暗黙のレシーバが存在するので,Smalltalkと違ってチェインの先頭もメッセージ。

*2:"For performance reasons, String and Number literal messages have their results cached in their message objects."