Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
_ っていうか、ほとんどの言語はズルしないと答えが時間内に出せないかスタックが足りないかだよ!
_ 偶然なのかどうか、Matzにっきから竹内先生のスライドの存在を知る。
スライド11を見て、自分のコードがズルではなく正当な式変形(?)だったことを発見。
... ごめんなさい、嘘です、ズルを紛れ込ませて1B削ってます。
_ awkでsubmitする人が少なくて寂しいので、どうか参戦してください...
なお、あのサーバのawkはmawkだそうです。\
_ ガーン。
心が痛んだのでズルなしで短いのも登録しときました。\
_ しかし、「これが限界だろ」とか思ってるとそれ以上縮むアイデアは出ないんだけど、他の人に抜かれて実現性を突きつけられると、またどうにかするためのアイデアが出てくるんだよねえ。
_ というわけで、一昨日から合宿してるわけなんだけど、全然同じ宿に泊まってないのでそもそも合宿の定義に反しているという説もある。
_ 一昨日は基本的には動かしたのは口だけ。
ささださんとこと青木さんとこにそれぞれまとまってる通り。
要するにtrunkにここ最近入った驚くような変更は2.0に回される、と。
では、1.8に比べて1.9には何が入るかというと、大きいのはYARVとm17n、ということになる。
Dir.globはなんか二人のところで書いてあることが微妙に違う気がするけど、取ってくるencodingを指定できるようにするみたいな話だったと思う。
_ 昨日は結構真面目にhack。
1.8のVS8SP1対応は予定通り(ってYARVに関係ない)。
本命はtrunkでのwin32/win32.cとthread_win32.ciにある同じような関数を統合したり要らなくなってるものを消したりという作業... だったのだけど、その過程でtrunkはおろか1.8にも問題があるシチュエーションがあることが判明し、慌てて直すはめに。
夜に、キーワード引数について議論というかなんというか。
これも青木さんとこに書いてあるとおりなんだけど、多重代入を自然(?)に拡張することによってあっさり実現できてしまうんじゃなかんべ、という方向に。
superの引数を*と書けるようにする話は、super(*)はsuper starと読んでください。
カニクリームコロッケはそういえば食ってない。
pで始まるfriendっぽい単語でpoisonというアイデアも出ていた。友達だと信用していると毒を盛られるらしい。つーか酔ってるだけだろ、それ。
_ 今日は午前中は1.8のシグナル周り。
って、なんでこんなに1.8ばかり見てるんだ、俺。
_ 昨日の午後はうちの子が遊びに来たのでつい遊んでしまった。
いちおう最終日ということでまとめとか。
そういやソースツリーをちょっとは整理しようぜ、ということで、includeとencodingくらいは掘るか、という話にまとまる。
その後、玉造温泉でサウナを堪能。
_ 今日もいちおうちょっとだけ。
ゴルフサポートとキーワード引数について考える。
_ 昨日で終わって帰ってきてるんだけど、口を動かして手を動かしてない分のまとめなどを。
記憶違いはあるかもしれない。
_ まず、既に出ているように、今回はRuby 1.9とは何なのか、についてが検討された。
基本的な方針としては、数ヶ月前の1.9の仕様+YARV+m17n。
1.8とは80%〜90%の互換性を保つ。この条件の範囲で可能ならばキーワード引数も。
なお、最近のドラスティックな言語仕様変更については既にrevertされている。
_ m17nに関しては、ベースは懐かしのm17nブランチで実験されたものがそのまま使えるはず。
鬼車とのすり合わせに関してはまだまだ検討しなければならない。鬼車の勉強が必要(私が)。
今のRuby内の鬼車は4.xだけど、5.xにしたいという話もあった。
StringとIOがエンコーディングを属性として持つであろうことはほぼ確定。
システムコールから来る文字列に関しては、原則としてエンコーディングはバイナリと考えるが、よくわかっている個別のものに関しては環境変数LANGなり$KCODE(という名前のままかどうかはわからないが)なりに影響されることになる。
IOについては、オープン時などの生成時にエンコーディングが設定される。
IO.openなんかはエンコーディングを指定する引数がどっかに入る。例えばUTF-8の場合、mode引数が"ru"になるとか"r:utf-8"になるとかキーワード引数使ってencoding:"utf-8"とか。
_ キーワード引数については、多重代入の自然な(?)拡張として実現できるのではないかという方向。
これはつまりkey1:val1, key2:val2 = {:key1 => 123, :key2 => 456} と書けるようになるということ。
なお、キー名と変数名が同一の場合(たぶんそうすることが多いだろう)は2回書くのは無駄なので、受け側に関してはkey1:とだけ書けばいいという構文糖がおそらく用意される。
でも(しばらくは導入されないであろう):=とかぶりそうなので、左辺値としてシンボルリテラル(:key1)が現れたときはkey1:key1とみなすということでいいんじゃないかと提案してみたが、これはこれで受けが悪かった。
_ 可視性についても(私がいない時に)検討がされたりしたらしいが、1.9では変更されないと思われるのでとりあえず当面は考えなくていいと思う。
_ おまけ。ゴルフサポートについて。
メソッド名を短縮形でアクセスできる機能があるといいのではないかという発想から、メソッド名は自動的にabbrev検索するというアイデアが出たのだが、別に一意に定まるところまで書かなくても、それより短い名前だったらアルファベット順で前に来るメソッドを実行すればいいじゃん、という画期的なアイデアが出る。
というわけで、ささださん謹製のg.rb(*1)。
class Object def method_missing m, *a, &b t = (public_methods + private_methods).sort.find{|e| /^#{m}/ =~ e.to_s} t ? __send__(t, *a, &b) : super end end if $0 == __FILE__ p o pr 'Hello World!' end
なおputsはputcというメソッドがあるので短くなりません。
これが標準添付になるかどうかはゴルファーの陳情次第(ほんとかよ)。
また、デフォルトでこれを組み込んだ処理系gorubyもRuby組み込みアプリケーションのサンプルとして添付するのはどうかという意見(と実装例)あり。
_ そういえば、昨日はまつもと家のみなさんにも会ったのだが、末娘ちゃんが我々の顔を見るなり「こわい〜」と言い出したり。怖いのは誰だ?
一昨日うちの子もなかださんとささださんを見て泣いていたので、たぶんそのあたりであろう(←それ、ただの人見知りです)。
_ 80%〜90%の件は、本当にそういう話だったかそもそも自信なかったり...
手元に検討に使ったホワイトボードのデジカメ画像があって、そこに「80%〜90%」って書いてあったので、そういう話だったかなー、とか勝手に思っただけです(ひどい)。
実は1.8から80%〜90%の速度低下はやむを得ない、という話だったりして。そんなわけないか。
_ 鬼車の件は、確かまつもとさんが現在の鬼車を触ってよりruby(のm17n)にとって都合のいいようにいじるという話で、それで本家から分岐するという話だったのですが、その後結局m17n進んでないのとご指摘のとおりのUnicode Propertyとかの話があって、それならまた本家を追っかけよう、ということのはずです。
鬼車の勉強については、今回のm17nの話で鬼車にまつわる部分は全然ついていけなかったので、鬼車のAPIをちゃんと理解せなあかんなあ、ということです。
木村さんはその辺は当然ばっちりなはず。私は鬼車のコードはほとんど見たことないのでかなり問題外です...(前に(?<)あたりのコードを読んだくらいか)
_ コマンド名は自分のコードの長さに関係ないからどうでもいいのだす。
_ each_with_indexといえば、_は特別扱いしてたとえばeach_with_indexならewiと書ければいいんじゃないかとかそういう話もありました。実装は作ってないけど。
他にも青木さんとこにいろいろ極悪なネタが出てるな。
ああ、そうそう、Kernel#hは当然必要だよね。これでHello, world!は1Bで最強確定。
被捕捉アンテナ類
[Ant]
[Antenna-Julia]
[Rabbit's Antenna]
[Ruby hotlinks]