探してみよう
- Ioの問題点
- 「"Io言語" 問題点」で探したら7つの言語7つの世界関連のものしか引っかからない
- 日本語の情報が少ない「"Io言語" 問題点」でググったら235件…
- Io プログラミングガイド日本語あった!
- 英語でも情報がすくない。Newest 'iolanguage' Questions - Stack Overflow
- 質問に答えてくれるIoコミュニティ
- iolanguage : Io
- no title
- 日本のユーザー会見つけれなかった。
- Ioのイディオムに関するスタイルガイド
- Io Programming/Io Style Guide - Wikibooks, open books for an open world
- io-fans: Homeにチュートリアルへのリンク等があった
確認してみよう
- 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>
でした。
感想等
「問題は何をするか」ではない、「何をしないか」だ
に出て来る台詞らしい。
かっこいい。
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などのメソッドがある
- List
- 真偽値
- true false
- どちらもシングルトンのオブジェクト、cloneを上書きして自身を返すようにする
0 件のコメント:
コメントを投稿