ほしい言語
たぶんプロトタイプベースな Ruby がほしいのかもなぁ。
self #=> Global env. Object
hoge = "hoge"
self.hoge = "hoge"
Global.hoge = "hoge"
Global.Global #=> Global
Global.proto #=> Object
Global.fun #=> fun {|&block| [native] }
Object.foo = fun {
self #=> a env. object having receiver as proto
}
Array.map = fun {|&f|
ret = []
self.each {|i|
ret << f(i)
}
ret
}
String.each = fun {|&f|
split("").each(&f)
}
String.map = Array.slot("map")
String["map"] = Array.slot("map")
String.set_slot("map", Array.slot("map"))
String["[]="]("map", Array.slot("map"))
Array.clone.set(1, 2, 3) == [1, 2, 3] == Array.with(1, 2, 3)
o = Object.clone.do {
self #=> just the `o`
hoge = "hoge"
self.foo = "foo"
fuga = fun {|x|
"fuga"
}
}
o.hoge #=> "hoge"
o.foo #=> "foo"
o.fuga #=> "fuga"
o.slot("fuga") #=> fun {|x| "fuga" }
Array.sum = Array.slot("inject").partial(0) {|r,i| r + i}
[1, 2, 3].sum #=> 6括弧の省略をしても呼びだしされるあたりがなんかうまくいかなそう。文法の矛盾があったりして、寝ておきたら「だめじゃんw」と思うんだろうなぁ。
Ruby を書いててときどき、 JS みたいに関数を自由にあつかいたいと思う。Ruby はクラスベースで、メソッドはかならずどこかのクラスに属し、UnboundMethod は bind しないかぎりよべず、bind の対象ももとのクラスと関係がないといけない。だから……だからなんだろう……
うまくまとまらない。
したいこと
- 環境 (変数をセットする場) もオブジェクトにして書きかえしたい
- スコープチェイン == 環境オブジェクトのプロトタイプチェイン
- 関数/メソッドはとりだしてつけかえたりしたい。
- 関数/メソッドを部分適用したい
- メソッドよびだしの括弧は省略したい
- return かきたくない
- 関数を簡単に関数にわたしたい。
- 正規表現リテラルはほしい。
- ダックタイピングしたい
- if とか case とかは構文としてあっていい (無理にメッセージセンドにしない)
- 関数はメソッドと同じように呼びだしたい。