2011年9月23日金曜日

7つの言語7つの世界 Io 1日目



探してみよう




確認してみよう




  • Ioは強く型付けされた言語か? 弱く型付けされた言語か?


    • Ioは強く型付けされた言語。1 + "one"はエラー



  • 0、空文字列、nilは真か偽か?


    • 0、空文字列はtrue、nilはfalse

    • (true and 0) println; (true and "") println; (true and nil) println



  • プロトタイプのスロットの確認


    • proto slotNames、protoでプロトタイプを取得してslotNamesメッセージ送る



  • =、:=、::=の違い


    • a = 1はupdateSlot("a", 1)、a := 1はsetSlot("a", 1)、 a ::= 1はnewSlot("a", 1)にコンパイルされる

    • =はスロットに値を入れる。スロットが存在していない場合例外を投げる

    • :=はスロットを作成して値を設定。

    • ::=はスロットとセッター(fooだったらsetFoo)を作成して値を設定




試してみよう




  • ファイルからIoのプログラムを実行


    • $ io -hでヘルプ見れる。普通にファイル名渡せばいいみたい。

    • $ echo '"Hello, Io!" println' > day1.io; io day1.io



  • スロットの名前を指定して格納されているコードを実行



$ io
Io 20090105
Io> a := Object clone
==> Object_0x10268e620:

Io> a fuga := method("fuga" println)
==> method(
"fuga" println
)
Io> a fuga
fuga
==> fuga
Io>


これでいいかな?他の人の見たら



Io> a getSlot("fuga") call
fuga
==> fuga
Io>


でした。


感想等


「問題は何をするか」ではない、「何をしないか」だ


フェリスはある朝突然に - Wikipedia


に出て来る台詞らしい。


かっこいい。


JavaScriptと同じようなプロトタイプベースのオブジェクト指向言語。言語自体は凄くシンプル。


プログラミング言語の仕組みを勉強するために作ったらしい。なんかすごい。


JavaScriptは人気すぎるからIoにした、って本の最初の方で書いてたけど、Ioは日本語の情報少なくてちょっと困りそう。頑張って最後まで読む。


ioに書かれてるfeatures見ると




  • small vm(1万行以下)

  • 複数のVMが同じプロセスで動く

  • ガベコレ、弱い参照

  • アクターベースの並列モデル、コルーチン

  • 64bit C99での実装

  • 組み込み言語

  • 例外


とりあえずbrewで入れました。



$ brew install io

雑記



  • Objectが一番てっぺん、Objectにcloneメッセージ送って新しいオブジェクトを作る。

  • オブジェクトはスロットを持つ。slotNamesというメッセージを送ると持ってるスロットが確認出来る。

  • 代入は=、スロットが存在しないのにFooObject = "foo"するとエラー

  • 無かったら新しく作ってくれるのが:=

  • 全てのオブジェクトはtypeに答える


    • 5 typeするとNumberが帰って来る



  • 大文字で始まる名前のオブジェクトはタイプ

  • 送られてきたメッセージに答えらなかったらプロトタイプに転送する

  • Ioではタイプも、タイプを元に作成されるオブジェクトも、どちらもオブジェクト。

  • メソッドの定義はmethod()、methodのタイプはBlock。メソッドもオブジェクト。

  • getSlotでスロットの値を取得出来る。スロットが無かったら親のスロットを辿る。

  • protoメッセージを送ると自分のプロトタイプが取れる


    • REPLも実はオブジェクトのメソッド内で実行してるのかprotoと打つと親が帰って来る



  • Lobbyに全ての名前が入ってる

  • コレクション


    • List


      • ObjectのlistメソッドでListタイプのデータが作れる

      • Listにはaverage sum at append pop prependなどのメソッドがある。



    • Map


      • Mapはハッシュのようなもの、シンタックスシュガーはない。

      • atPut at asObject asList keys sizeなどのメソッドがある





  • 真偽値


    • true false

    • どちらもシングルトンのオブジェクト、cloneを上書きして自身を返すようにする







0 件のコメント:

コメントを投稿