- 1 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 00:03:44 ]
- www.iolanguage.com/
f21.aaa.livedoor.jp/~kizz/prog/io/_docs/IoProgrammingGuide_ja.html
- 2 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 07:51:21 ]
- なんでそんな伸びそうも無いものを。
>1 にネタ振りが出来ないようなら早晩落ちるぞ。
- 3 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 12:04:58 ]
- 言語そのものは知らんが実装はガベコレだけ読んだな。
- 4 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 13:20:05 ]
- ioの構文、メッセージ機構はすごく興味あるんだけど
バインディング機構がヘボいから萌えない…
- 5 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:28:07 ]
- 特殊形式に見えるものが普通のメソッドだったりするからメタプログラミングとかは結構できそうだな
文法もわりとわかりやすいな
- 6 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 03:22:30 ]
- このインターネッツ時代にわざわざ検索しにくい名前をつけんなと
- 7 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:04:19 ]
- >>5
それは良いけど、これはいただけない気が… Range v := "before" f := method(arg, arg) v println #=> before 0 to(10) foreach(v, v println) #=> 012345678910 v println #=> 10
- 8 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:15:50 ]
- (過去の)関連スレ
{_proto: プロトタイプベース・オブジェクト指向}; pc11.2ch.net/test/read.cgi/tech/1109948927/
- 9 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:14:47 ]
- >>6
io-language iolanguage で検索するよろし
- 10 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:18:52 ]
- >>7
Rubyのブロックと同じ問題ですなあ
- 11 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:42:51 ]
- v := "before"
が無くても同じ、これは嫌だな Rubyのは1.9で直ってるんだよね
- 12 名前:デフォルトの名無しさん [2008/02/03(日) 10:57:05 ]
- LLパトルロワイヤルスレから来ました
io-languageの話題はここでいいのかな・・・ まあいいや io-languageでメッセージ?オブジェクトそのものを取り出すにはどうしたらいいんでしょ Io> unko := Object clone do(puripuri := method("&&&" println)) ==> Object_0x581898: puripuri = method(...) Io> unko puripuri &&& ==> &&& Io> unko puripuri slotSummary &&& ←puripuriが実行されてしまう ==> "&&&": ←文字列にslotSummaryしてしまう 上記で、puripuriを取り出したいのですが・・・
- 13 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:57:55 ]
- > io-languageの話題はここでいいのかな・・・
> > まあいいや コピペ失敗 orz ここは読み飛ばしてください
- 14 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:01:52 ]
- unko getSlot("puripuri")
ってこと?
- 15 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:45:22 ]
- >>14
それだ!!!!1 ありがとうございました。 文字列で渡すのがなんか新鮮に感じた
- 16 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 19:40:17 ]
- 何かよさげな言語の予感
- 17 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 19:58:23 ]
- >>7
v := "before" f := method(arg, arg) v println #=> before Sandbox doSandboxString("Range; 0 to(10) foreach(v, v println)") v println スマートとは言い難いけど、Sandboxを使ってとりあえず回避。
- 18 名前:7 mailto:sage [2008/02/03(日) 20:39:23 ]
- >>17
Sandboxなんてあったのか… あれから考えて、こんな風にやってみた。 うまくいっているようには見える。 scope := method( expr := call message arguments first context := Object clone msg := message(do) msg setNext(expr) context prependProto(call sender) context forward := method( self proto doMessage(call message clone do( setNext(nil) )) ) context doMessage(msg) ) obj := Object clone obj l := list(1, 2, 3) obj f := method( scope( l foreach(v, v println) )) chk := method( "[obj] " print ; obj slotNames print ; " [v] " print ; Lobby slotNames println ) obj f ; chk scope( obj l foreach(v, v println) ) ; chk obj l foreach(v, v println) ; chk scopeブロック(?)内で self がいる(self l とする)ような仕様で良ければ forward メソッドの設定は省ける。
- 19 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:38:43 ]
- ↓のみてて思ったんだけど、++とか--みたいな演算子って直接呼べないの?
ttp://blog.xole.net/article.php?id=658 value := 0 value ++ := method(self = self + 1) value -- := method(self = self - 1) value ++ println value -- println 結果はファイルから読み込むと何もでないんだけど、コンソール(?)からやるとなんか出力されるんだよね > io Io> value := 0 ==> 0 Io> value ++ := method(self = self + 1) ==> method(...) Io> value ++ println ==> 1 Io> value ++ println ==> 1 Io> value println ==> 0 なんでだろ? あと、↓のにすると上手く動く。この違いがわからない...orz value getSlot("++") setScope(value) call println value getSlot("--") call println
- 20 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 03:07:40 ]
- >>19
selfに代入しても、元のが変わらんっぽい Io> value := 0 ==> 0 Io> value test := method(self = "banzai!") ==> method( self = "banzai!" ) Io> value test ==> banzai! Io> value ==> 1
- 21 名前:7 mailto:sage [2008/02/05(火) 03:24:01 ]
- >>19
> value ++ println これは、value ++(println) となって println は引数として扱われる。 んで、メソッドの側で仮引数を指定していないのでなにも起こらない。 コンソールで 1 が返ってくるのは、コンソールがメソッドの返値を表示するようになっているだけで、 println が表示しているわけではない。 > value ++ := method(v, self = self + 1) とすれば何が起こっているかわかりやすいかも。 >>20 self はローカル領域オブジェクトのスロットなんじゃない? 変わる方がおかしいと思います。
- 22 名前:20 mailto:sage [2008/02/05(火) 03:41:13 ]
- Io> value := Sequence clone setItemType("float32") setEncoding("number") setSize(1)
==> 0.000000 Io> value ++ := method(self += 1) ==> method( self += 1 ) Io> value ++ ==> 1.000000 Io> value ==> 1.000000 やったー ++ できたよー orz >>21 そっか、selfも単なるread onlyなスロットだからか・・・
- 23 名前:20 mailto:sage [2008/02/05(火) 04:18:45 ]
- Io> value := 0
==> 0 Io> value ++ := method(call sender setSlot("value", self + 1)) ==> method( call sender value := self + 1 ) Io> value ++ ==> 1 Io> value ==> 1 先生!receiverの名前を得る方法はないんでしょうか! どうでもいいけど、referenceがページ分けされてないので検索しずらいです('A`) www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html
- 24 名前:7 mailto:sage [2008/02/05(火) 04:42:21 ]
- >>23
リファレンス読むと、 call message previous name で、出来そうだけど実際には previous が無い模様。 ソース読むと、それっぽい実装はあありました。 使えるようになれば、value ++ とか出来そうですね。 ただ、>>21の問題もあるので細工がいりそうですけど。 >検索しずらいです('A`) 以前のJavaScript使った妙なやつよりはマシな気がする。
- 25 名前:20 mailto:sage [2008/02/05(火) 05:25:05 ]
- 絶対にスマートにできる方法があるはず!と思ってソース見たら
Number.c の Number のデータ部分に代入しているのが(DATA(self) = しているところ)、 IoNumber_rawClone、IoNumber_newWithDouble_、IoNumber_copyFrom_ くらいしかなくて、 IoNumber_rawClone は、Clone用、 IoNumber_newWithDouble_は、内部のIoState用、 IoNumber_copyFrom_は、組み込まれてないww(たぶん内部用) オワタ\(^o^)/ Number copyFrom メソッド実装汁!って本家に言っとくか、パッチなげるかだなw
- 26 名前:20 mailto:sage [2008/02/05(火) 05:26:36 ]
- ああ、言い忘れた。一応、IoNumber_readFromStream にもあったから、Stream使ったらいけるかも
- 27 名前:20 mailto:sage [2008/02/05(火) 06:14:24 ]
- 連投スマソ。
>>26 のStream関連はまだ使われてないようでした orz >>24 確かに call message previous で行ける!と思いましたが、 IoMessage_previous の中の実装が ifdef で外されている上に、 Ioのメソッドとして組み込まれてないですね。
- 28 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 13:10:12 ]
- チラシの裏です。
Windows版でコンパイルしたくなって四苦八苦してたんですが、 downloadページで配布されている Io-2008-01-20.tar.gz が、 ShellExecuteのための shell32.lib がリンクされてねえとか、setenvがねえとか、 OS依存なエラーでwin32環境でコンパイルできなくて、どうなっとるねん!!1 エラーつぶしているうちに、Changelog 見たらWindows関連部分が Fix されてるっぽくて、 www.iolanguage.com/scm/git/checkout/Io/ ↑見たら直ってて、俺の時間返せー!!! って感じです・・・ orz とりあえず、git落として最新版ダウンロードしたお
- 29 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:18:29 ]
- 最近のバージョンって do( とかで改行すると、エラーで続きが入力できない。
- 30 名前:19 mailto:sage [2008/02/06(水) 01:22:28 ]
- なるほど、selfはローカルのslotかあ。
というか、前回の>>19で書いた++は1の評価を返してるだけ? value := 3 value setSlot("++", method((self + 2) println)) value ++ // 5 やたー ということは...ここは>>19のクロージャか!!w value := 6 value ++ := block( block( value = value + 1 call activated ) ) call (value ++) call call call call value println 全然答えじゃねえorz
- 31 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:48:38 ]
- >>30
解決になっとらんでワロタ
- 32 名前:7 mailto:sage [2008/02/06(水) 03:16:47 ]
- 無理矢理解決してみた。
v := 0 inc := method( res := nil recv := call target cntxt := call sender cntxt foreachSlot(name, value, if (recv == cntxt getSlot(name), res = cntxt setSlot(name, cntxt getSlot(name) + 1) ) ) msg := call message right := msg argAt(0) msg setArguments(list()) msg setNext(right) res ++ := Lobby getSlot("inc") res ) v ++ := getSlot("inc") v println (v ++ ++ ++ println) v println
- 33 名前:7 mailto:sage [2008/02/06(水) 03:19:22 ]
- >>32 書いてて気づいたんだけれど
1 + ; 2 は、 1 + 2 と解釈されるのね。 改行も同様につながってしまう。 そのせいで右辺のメッセージのごまかしが完全じゃない。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 03:55:34 ]
- 俺も...と思ったけど、ダメだったorz
value := 0 value ++ := method( call message setName("call") call sender setSlot("self", self + 1) ) (value ++) println //1 value println // 0
- 35 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:08:19 ]
- ++の話題、Smalltalkスレで聞いたら、同じような力技でしたw
アラン・ケイも認めた!Ruby>>>>>Smalltalk pc11.2ch.net/test/read.cgi/tech/1150106090/169 > >>165 > やっつけですが、Squeak Smalltalk で。 > > Object >> inc > | sender index | > sender := thisContext sender. > index := (sender method at: sender pc - 2) \\ 16 + 1. > ^sender tempAt: index put: (sender tempAt: index) + 1 > > | a b before after | > a:= 1. b := 2. > before := {a. b}. > a inc. b inc. > after := {a. b}. > ^{before. after} "=> #(#(1 2) #(2 3)) "
- 36 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:19:36 ]
- >>35
Io もレシーバが代入されているスロット名を知る手段があればできるんだけどね。
- 37 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 07:44:21 ]
- つーか何が特徴なの?って物ばっかりだなこの手のは
++にしてもただの欠陥だし 無理矢理処理系の裏技使って解決しました! ってまるっきりバカに見える
- 38 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:08:10 ]
- > つーか何が特徴なの?って物ばっかりだなこの手のは
それは、あなたがバカなだけ > ++にしてもただの欠陥だし それは正しい > 無理矢理処理系の裏技使って解決しました! > ってまるっきりバカに見える スマートではないのには同意。 しかし、どの言語にもスマートにできないものはある。 >>37の使っている言語にも苦手な処理はあるだろう?
- 39 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:23:45 ]
- >>37 はスマートにディップスイッチでバイナリを直打ちしている
- 40 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:24:26 ]
- なんだこいつ
- 41 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:32:58 ]
- >>38
これはこれは 別に>>38を名指しでバカって言ったわけじゃないよ リトマス試験紙にするつもりは無かったのだが それと、欠陥なら直せば?
- 42 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:57:51 ]
- 欠陥ではなくセマンティックスの違いでしょう。
変数を箱のようなものと捉えるか、ラベルのようなものと捉えるか、という。
- 43 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:52:34 ]
- マクロを導入すればいいのに。それで解決する問題だ。
- 44 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:12:13 ]
- >>43
あーそーゆーことね。
- 45 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:38:49 ]
- まー、Ioはマクロがなくてもこれだけできる!みたいなところはある
というかマクロも実装できそうだがどうか
- 46 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 15:55:43 ]
- っていうか、
>>41 >それと、欠陥なら直せば? あなたの使ってる言語はすぐ直せるの欠陥? だいたいの場合、欠陥があったら言語のコアな部分を弄らないといけないと思うんだけど、そうじゃないのが現実なんだろうか...? small talkの例がでたけど、ioとかこの辺の言語は、その欠陥をなんとかできそうな感じなんだよな。 だからみんな魅力を感じてるんじゃないかと。
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:08:46 ]
- ++関連見てきた。
pc11.2ch.net/test/read.cgi/tech/1188997302/559 なんかすげー理解が広がリングwww これ見ると言語実装論みたいのが分かって面白いわ あと、smalltalkの実装も面白い
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 23:56:58 ]
- IoでObjective-Cの文法を導入する試み。
こういう「クレージー」なことができる言語は素晴らしい。 が、日常的に使いたいかどうかはまた別問題である。 www.rubyist.net/~matz/20080216.html#p01
- 49 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:42:59 ]
- Rangeってどうすれば使えるのでしょうか?
何か準備がいるのかな。 Io 20070410 Io> Range Exception: Object does not respond to 'Range' --------- Object Range Command Line 2
- 50 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:11:29 ]
- windowsなら、C:\usr\local に置かなきゃ駄目
ってやつ?
- 51 名前:デフォルトの名無しさん [2008/03/05(水) 12:21:31 ]
- winバイナリだと正規表現もないのな
- 52 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:49:16 ]
- たしかにwindowsバイナリで、別の場所に入れてました。
c:\usr\local\bin にコピーしてやってみたら使えるようになりました。 どうもありがとう。 Io> 1 to(8) map(v,v**2) ==> list(1, 4, 9, 16, 25, 36, 49, 64) Io> 1 to(8) map(**2) ==> list(1, 1, 1, 1, 1, 1, 1, 1) Io> "" asMutable do(65 to(65+25) map(v,append(v))) ==> ABCDEFGHIJKLMNOPQRSTUVWXYZ
- 53 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:10:19 ]
- 数値と数値を連結すると文字列じゃなくて数値になるんですね。
Io> 123 .. 456 ==> 123456 Io> 123 .. 456 +1 ==> 123457 Io> 123 .. 456 /3 ==> 123152 Io> 123+456/3 ==> 275
- 54 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:34:50 ]
- >>53
type で見てみると Sequence だし 123 .. (456 / 3) こういうことじゃない? 下のようにするとエラーも出るし。 Io> Number ++ := method(v, self .. v) ==> method(v, self .. v ) Io> 123 ++ 456 / 3 Exception: Io Assertion 'operation not valid on non-number encodings' --------- message '/' in 'Command Line' on line 1
- 55 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 16:59:00 ]
- 対話モードの結果にダブルクオートが出ないから勘違いしたのかな
何でもかんでもオブジェクトをasStringしてつなぐ模様
- 56 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 17:50:07 ]
- どうも失礼しました。計算したものが連結されてるだけなんですね。
- 57 名前:デフォルトの名無しさん [2008/04/18(金) 01:11:19 ]
- Ioで日本語プログラミング
Io でもおk - はてな使ったら負けだと思っている d.hatena.ne.jp/mr_konn/20080304/1204632557 関連ページ 第20回 日本語でおk | WIRED VISION wiredvision.jp/blog/masui/200803/200803030100.html Ruby もいいけど Smalltalk でも、おk。 - sumim’s smalltalking-tos d.hatena.ne.jp/sumim/20080303/p1 inforno :: 日本語プログラミング言語Scala inforno.net/articles/2008/03/04/japanese-language-programing-in-scala
- 58 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:47:28 ]
- DarwinportsでIoを入れたのですが >>49と同じ状態で詰まっています
どのようにすればいいのでしょうか?
- 59 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:02:02 ]
- >>58
普通に落としてインストールする
- 60 名前:デフォルトの名無しさん [2008/04/27(日) 09:17:59 ]
- Io> exit
Exception: while saving history file '$HOME/.io_history', reason: Device not configured --------- saveHistory Z_CLI..io 42 ReadLine ? Z_CLI..io 42 Call relayStopStatus A2_Object.io 295 CLI saveHistory Z_CLI..io 55 Object exit Command Line 1 こんなのが出て正常に終了できない
- 61 名前:デフォルトの名無しさん [2008/04/27(日) 10:35:17 ]
- HOME環境変数は設定されてる?
- 62 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 12:35:51 ]
- できてます
また起動時に.io_historyがあるとすぐ落ちます
- 63 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 22:28:52 ]
- インクリメント演算子実装してるが
++numなら簡単だが num++はむずいな
- 64 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:25:44 ]
- なぜ?
- 65 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:02:09 ]
- 前置だとmessage call argAt(0)でnumそのものを取得出来て
そっからメッセージの書き換えでnum = num + 1;っていうメッセージを作れるけど 後置だとすでにnumが評価されていてnumのメッセージそのものを取得できない。
- 66 名前:65 mailto:sage [2008/04/30(水) 20:27:07 ]
- まあ俺がioに詳しくないだけかもしれんけど
- 67 名前:デフォルトの名無しさん [2008/05/01(木) 19:43:40 ]
- > ++num
ああ、その手があったか!
- 68 名前:デフォルトの名無しさん [2008/05/21(水) 03:29:46 ]
- Ioではオブジェクトリテラル({a:1,b:2}みたいなやつ)って書けないの?
着想を得たってあがってるNewtonScript、Luaにはあったのに。
- 69 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:27:36 ]
- >>68
演算子や中括弧にもメソッド割り当てられるから簡単にできるよ
- 70 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:59:45 ]
- >>69
中括弧に割り当てるのやめて、まじやめて 昔","演算子で泣かされたの重いだして涙目
- 71 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 07:59:19 ]
- ホワイトスペースに割り当てられたら最強なのにね
- 72 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 08:26:26 ]
- >>70
いや引数の数チェックしてやればいいだけの話だし
- 73 名前:デフォルトの名無しさん [2008/05/28(水) 03:38:05 ]
- >>69
すげえ、本当に簡単に出来るね。 List,Mapでの[]といい、なんで標準で定義してないんだろう。 {} := method( obj := Object clone call message arguments foreach(i,obj doMessage(i setName("setSlot"))) obj ) {a=1,b=1+1} println
- 74 名前:デフォルトの名無しさん [2008/05/31(土) 04:53:46 ]
- 多分、>>68-73 みたいなFAQな流れを期待して、
Io sugeeeeとなるというのを想定しているのだろう
- 75 名前:デフォルトの名無しさん [2008/07/05(土) 05:35:52 ]
- ほしゅ
- 76 名前:デフォルトの名無しさん [2008/07/30(水) 20:44:36 ]
- 対話型で初期化処理とかできないの?
- 77 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 20:26:33 ]
- 何をしたいの?
- 78 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 08:09:26 ]
- 対話型インタプリタとエディタを同時に使いたい
イメージ的には、 prolog系でのedit. haskellの処理系の:editみたいなことがしたい
- 79 名前:デフォルトの名無しさん [2008/10/09(木) 13:58:00 ]
- hosyu
|

|