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."