久しぶりにリファレンスマニュアル。
ああっ! そういえば動的なモジュールの include は考えたことなかった! どうしよう。
むー。真面目にやるなら、 include にもメタデータを付けて動的に追跡しないといけないよな。 検索は広めにひっかければいいとして、 検索後に情報を絞らないといけないな。
そうか。いまは追加元のライブラリ (origin-library) だけ表示してるけど、 この他にモジュールをインクルードしたライブラリ (include-origin-library) が必要だな。 ユーザからすれば、どのライブラリを require すると使えるかが問題なのだから、 include しているライブラリのほうが重要だ。 なぜなら include するということはそのライブラリは include すべきモジュールをすでに得ているはずである。 つまり origin-library を require しているはずである。 したがってユーザが include-origin-library を require したら 自動的に origin-library も使えるようになるはずだし、 またそのように期待してよいだろう。
真面目にやらない場合は、 (reopen/redefine) + include でドキュメントをごっそり複製してつっこめばいいわけだ。 このときにライブラリだけ書き換えれば include-origin も表示できるな。 うーんなんかこれでいいような気もしてきた。楽だし。
(17:15)
用語がいまいちなので再定義
ん? でもあれか、origin-library と includer-library が 違う場合ってどれくらいあるんだろ。ていうか、存在するか? 今回問題になった base64 ライブラリは origin = includer だしな。
なんか Rails 方面とかでバリバリ活用されてそうな嫌な予感がする。 出てきたときに悔しいから実装しとくかあ。
やっぱ、単純にコピーで実装したほうが楽かもなあ。 どのような手段によって (継承か、include か、直定義か) 提供されたかよりも、 どのライブラリを require すると使えるのか、がユーザにとっては知りたいわけだろうし。
このさい、 違うメソッド (のドキュメント) を参照できるようにしてしまおうかなあ。 メタデータとして「このメソッドはアレと同じ」という情報を付けてしまえばいい。 Signal.trap と Kernel.#trap とか、共有したい場合はけっこうあるし。
んで、include だけするライブラリについては、 そのドキュメント共有の仕組みを使ってメソッド単位でリンクしまくればいい。
こういうのを入れるとリンク切れが問題になったりするわけだが、 まあそのへんはあとで考えよう。 最悪、エントリを全部なめてチェックすりゃいいわけだし。
う、いや待てよ、やっぱまずいか。 include を単にメソッドのリストにコピーした場合、 オーバーライドが表現できなくなるな。 チェックしつつコピーすればいいか? いやでもその時点では元のクラスがロードされていない可能性があるな。 ということは検索時にオーバーライドチェックが必要? それもダルい。 パースを終えた時点でオーバーライドされてるかチェックして消せば多少はマシか? 検索側をこれいじょう複雑にするときついし、こっちのほうがまだいいな。
Ruby の実装と同じに、iclass を導入するのはどうだろう。 「Base64」モジュールに対して「@1@Base64」モジュールのように別名を付けて、 メソッドごっそりコピー。
あっ! いやいやいや待てそれはまずいな。っていうかコピー案はだめだ。 include したモジュールがまた別のモジュールを include してる可能性を考えてなかった。 やっぱり実体を分ける方針は筋が悪い。
うーん、いや、そうか。 そもそも includer-library をどこに記録したらいいんだろう。 include 先クラスに記録したとすると、 メソッド検索後に ancestors を全部見て、 定義元モジュールが include されてるところを探して、 なんかえらく面倒だな。速度の点は継承メソッドキャッシュと同じ方法で解決するとしても、 もうちょっとスマートな方法はないのかな。
この問題の厄介なところは、reopen/redefine 属性で調べられないとこか。 defined メソッドを別のライブラリが勝手に include しても reopen と同等になってしまう。 激しくウザい。
むー、やっぱ iclass のようなものが必要だな。 それも検索時のみ動的に作ったほうがよさげ。 元のモジュールの仮身となる iclass を作成し、 iclass は元のモジュールのラッパーにする。 IClassEntry#entries はエントリの kind を reopen 属性に変えて返すと。
……あれ、常に reopen とは限らないかな。 いやいやそんなことはない、いまは reopen な include の話だった。 パース時に reopen include であることは区別できるから、 別のライブラリが include しているという情報をクラスに記録しておけばいいんだな。 reopen include が普通の include よりも早くなることはありえないだろうから、 ancestors の順番が常に最後になることはさほど問題ない。
よし、なんとか解決できそうだ。
(20:29)
http://jp.rubyist.net/RubyKaigi2007/
遅ればせながら会議の件。
ささださんに「応募しといて」と名指しされたので なんか応募しようかと思うんだけど、何で応募しよう。 順当に行くとリファレンスマニュアルになるけど、あれどのくらい進むんだろう。
「このテーマでしゃべれ」てのがあったらコメントください。
(18:48)
~/c/bitclust % ./tools/statrefm.rb ../rubydoc --- Status 97/225 files done (43.11%) --- Ranking by number of files 1 128 (not yet) 2 57 sheepman 3 23 okkez 4 11 date 5 3 aamine 6 2 tadf 7 1 moriq --- Ranking by Kbytes 1 386 (not yet) 2 321 sheepman 3 121 okkez 4 37 date 5 12 aamine 6 2 moriq 7 2 tadf
12 月いっぱいにエントリを揃える計画で、現在 43% (ファイル数ベース)。 なんてありがちな数字だ。
こんなん俺が全部書いてやるよチクショー!って方は
http://doc.loveruby.net/wiki/HowToJoin.html
を読んで参加してね。
(18:53)
まあ、でもあれだ。 あと 128 ファイルだから、1 日 5 ファイルかたづければ 12 月で終わるよ。
おれもせめて自分のメンテしてるライブラリくらいはどうにかしよう。
(18:55)
現段階の作業方法をなんとなくお伝えする。
とりあえず svn up
~/c/rubydoc/refm/api % svn up At revision 839.
ASSIGN ファイルを編集してファイルのオーナーを自分にする
~/c/rubydoc/refm/api % grep net/smtp ASSIGN net/smtp ~/c/rubydoc/refm/api % vi ASSIGN ~/c/rubydoc/refm/api % grep net/smtp ASSIGN net/smtp aamine ~/c/rubydoc/refm/api % svn ci -m 'assign net/smtp to aamine' ASSIGN
本物にどういうメソッドが定義されてるか bc-methods で調査
~/c/rubydoc % bc-methods -rnet/smtp Net::SMTP 180 181 182 183 184 185 185 190 Net::SMTP.default_port o o o o o o o o Net::SMTP.default_ssl_context - - - - - - - o Net::SMTP.default_ssl_port - - - - - - - o Net::SMTP.default_tls_port - - - - - - - o Net::SMTP.disable_ssl - - - - - - - o Net::SMTP.disable_tls - - - - - - - o Net::SMTP.enable_ssl - - - - - - - o Net::SMTP.enable_tls - - - - - - - o Net::SMTP.ssl_context - - - - - - - o Net::SMTP.start o o o o o o o o Net::SMTP.use_ssl? - - - - - - - o Net::SMTP.use_tls? - - - - - - - o Net::SMTP#address o o o o o o o o Net::SMTP#auth_cram_md5 - - - - - - - o Net::SMTP#auth_login - - - - - - - o Net::SMTP#auth_plain - - - - - - - o Net::SMTP#authenticate - - - - - - - o Net::SMTP#data - - - - - - - o Net::SMTP#debug_output= - - - - - - - o Net::SMTP#disable_ssl - - - - - - - o Net::SMTP#disable_tls - - - - - - - o Net::SMTP#ehlo - - - - - - - o Net::SMTP#enable_ssl - - - - - - - o Net::SMTP#enable_tls - - - - - - - o Net::SMTP#esmtp o o o o o o o o Net::SMTP#esmtp= o o o o o o o o Net::SMTP#esmtp? o o o o o o o o Net::SMTP#finish o o o o o o o o Net::SMTP#helo - - - - - - - o Net::SMTP#inspect o o o o o o o o Net::SMTP#mailfrom - - - - - - - o Net::SMTP#open_message_stream o o o o o o o o Net::SMTP#open_timeout o o o o o o o o Net::SMTP#open_timeout= o o o o o o o o Net::SMTP#port o o o o o o o o Net::SMTP#quit - - - - - - - o Net::SMTP#rcptto - - - - - - - o Net::SMTP#rcptto_list - - - - - - - o Net::SMTP#read_timeout o o o o o o o o Net::SMTP#read_timeout= o o o o o o o o Net::SMTP#ready o o o o o o o o Net::SMTP#send_mail o o o o o o o o Net::SMTP#send_message o o o o o o o o Net::SMTP#sendmail o o o o o o o o Net::SMTP#set_debug_output o o o o o o o o Net::SMTP#start o o o o o o o o Net::SMTP#started? o o o o o o o o Net::SMTP#starttls - - - - - - - o Net::SMTP#use_ssl? - - - - - - - o Net::SMTP#use_tls? - - - - - - - o Net::SMTP::Revision o o o o o o o o
bc-methods --diff (いまオプションつくった) で足りないエントリを確認。
~/c/rubydoc/refm/api % bc-methods -rnet/smtp --diff=src/net/smtp.rd Net::SMTP -Net::SMTP#auth_cram_md5 -Net::SMTP#auth_login -Net::SMTP#auth_plain -Net::SMTP#authenticate -Net::SMTP#disable_ssl -Net::SMTP#disable_tls -Net::SMTP#enable_ssl -Net::SMTP#enable_tls 以下略
がんばって編集
~/c/rubydoc/refm/api % vi src/net/smtp.rd
もいっかい bc-methods --diff
~/c/rubydoc/refm/api % bc-methods -rnet/smtp --diff=src/net/smtp.rd Net::SMTP +Net::SMTP.new
ぜんぶエントリが書けた。new は継承してるメソッドだから増えてても OK。
ASSIGN ファイルの status を done にする
~/c/rubydoc/refm/api % vi ASSIGN ~/c/rubydoc/refm/api % grep aamine ASSIGN _builtin/Struct__Tms aamine done fileutils aamine net/http aamine net/https aamine net/pop aamine done net/smtp aamine done ←これな ping aamine done
こみっと
~/c/rubydoc/refm/api % svn ci -m 'net/smtp done' src/net/smtp.rd ASSIGN
(完)
ちなみに、文法エラーとかがあると cron で回してるビルドスクリプトから ruby-reference-manual-diff ML にエラーメールが飛ぶので、あせってなおす。
(19:31)
朝っぱらから宗教社会学II のレポートを書く。 おれもいろんなレポートを書いてきたけど、 ここまであからさまにやっつけとわかるレポートは久しぶりである。 もういいや D で
(06:31)
『Write Great Code vol.2』が届いた。 結局 Amazon を使ってしまうあたりが弱い。
中身は半分くらいしか読んでないけど、おもしろいな。 いま書いてる本と内容が近いせいかも。
「高級言語のコードがどうコンパイルされるか見ていく」 という方針の本は他にも意外とある。 『高級言語プログラマのためのアセンブラ入門』とか 『プログラミングの力を生み出す本』とか。 そのへんとこの本が違うところは、以下の三点だろう。
この三点から、複数のプラットフォームや言語を 苦もなくスイッチできる人 (== 必然的に上級者) 向けだなーという感じを受ける。 おれ的にはこの本が一番好みだ。
ただ、最初のほうではさんざん速度が速度がって言ってるけど、 本文はそれほど速度にこだわってるようには見えないんだよな。 なんだかんだ言ってありがちな結論に落ち着いているように見える。 少なくとも、RISC CPU でパイプラインスケジューリングとかやって ガリガリ高速化するぜ、という話ではない。 まあ、最初に大風呂敷広げすぎてたたみきれなくなることは 俺も覚えがあるので、あまりこの点は深くつっこまないでおく。
それから、"The Art of Assembly Language" でも使ってた HLA とかいう高級アセンブラを使ってるんだけど、 これはイマイチな選択だと思うんだよなあ。 学生にとってとっつきやすくなるとかなんとか書いてるけど、 本当にとっつきやすいか? これが? 微妙に似てるくせに違う言語が増えるのってめんどくさくね? ただでさえ GNU as と nasm で mov の向きが違って面倒なのに、 これ以上微妙な違いを増やさないでほしい。 俺は "The Art of..." も持ってるけど、HLA のせいで読む気なくなったんだよな。 GNU as でも nasm でもいいから、素直にアセンブラをそのまま使ってくれ。
あるいはせめて、コードリストの上に「何のコードなのか」を明示しておけば もうちょい混乱は減ったんじゃないのかな。このへんは編集の責任か。 これは自戒を込めて言うんだけど、著者とか翻訳者のような立場だと、 あるコードリストが何の言語で書いてあるかってのは意外とすぐわかるんだよね。 でも読者にはわかんない。 そのような差ができてしまうのは、コードに対するコンテキストの量が段違いだからだ。 特に俺みたいに大雑把なやつは 目次とか索引から用語だけで飛んでいくような読みかたをしているので、 突然コードリストが出てくると、いったいこれはどういうリストなんだろう……? と悩むことになってしまう。
それと、インストラクションのリファレンスは付けてほしかった。 アセンブリ出力の diff をえんえん載せるページがあるなら、 そのぶんをリファレンスにまわすべきだ。 オンラインリファレンスを引きながらじゃないと読めないってのはきつい。
ところで、どうでもいいことだけど、 p.210 のページ上端の見出しが「ブール論理とデジタル設計」になってる。 いったい何がどうしてこうなったんだろう。
えーっと、こんな感想だとメタクソに言っているように見えるかもしれないけど、 実際はそんなことはなく。そもそも、このクソ厚い本を届いた日に半分読むくらいだから、 個人的にはとても面白かったということだろう。
(16:22)
とつぜんメインマシンのキーボードがきかなくなった。 例の、テンキーぶったぎり改造してあるやつが。 抜き挿ししても再起動しても KVM スイッチをリセットしてもダメ。 他のキーボードだとつながるということは、これは壊れたかな。 そろそろ 9 年目だし、壊れてもおかしくはない。
うう、この適当なキータッチが気にいっていたのになあ。 同じキーボードをもう一枚くらい買っとくべきだった。 それにしたってテンキーはまた改造しないと邪魔だしなあ。ああーめんどくせー。
それに、どのキーボードを買ったらいいんだろ。 最近のナチュラルキーボードって、 クソ邪魔くさい、なんたらボタンがてんこもりなんだよな。 うざすぎる。
(09:09)
ということで買ってきた Microsoft Wireless Optical Desktop Pro。opticalってなんだ。ふーむ。「眼の、視覚の、可視の、光学上の」らしい。ますます謎だ。ん、そうか、もしかして光学マウスのことを言ってるのか?
秋葉原ヨドバシでキーボードを買ったついでにサンワサプライの「液晶用ウェットティッシュクリーナー」なるものを買ってきた。いつもウェブ見ながらごはん食べたりしてるので、どうしても汁が飛んだりするんだよね。そのたびにビクビクしながらティッシュでふくんだけど、いまいちきれいにならなくて困ってたんだ。
秋葉原ヨドバシでキーボードと液晶ふきを買ったついでに、ついうっかり Ys origin も買ってしまった。どうも今日発売らしくて、そこらじゅうでデモってたのね。そんで音楽聞いてたらフラフラと。もうだめだ。「空の軌跡」のせいで完璧に Falcom 信者と化してる。いまのおれでは Falcom が作ったというだけで何でも買ってしまいそうだ。ていうか Falcom は早く英雄伝説 VII を出してくださいおながいします。
それにしても、こんなもん買って、いつやる気なんだ俺は……。
本当に長いよこの名前。特徴を全部名詞で並べとけばいいと思ってないか?
で、いま KVM スイッチ (CPU 切り替え器) 経由で AMD64 な Linux につないでるんだけど、 何事もなく使えてしまっているな。 もっとも、打ち込んでから文字が表示されるまでに微妙なズレを感じる。 無線のオーバーヘッドじゃなかろうか。 ま、これくらいならシリアルコンソールからログインしてると思えばいいか。 そのうち慣れるだろう。
無線通信にも注意が必要っぽい。 モニタの左奥に置いておくとキーボードの通信が途切れることがある。 右まで持っていったら大丈夫になった。 キーボードの通信部が右にあるのかもしれない。
それから、これはしょうがないことだが、 「変換」と「カタひら」キーのキーコードが前のキーボードと違うらしくて 右 ALT になってない。まあ、これは調べて変換すれば済む話。
……あ、そうか。 「変換」と「カタひら」キーはもともと ALT にしてなかった。 元のキーボードだとスペースの上に押し込められてたんだ。 それで最下段があんなにすっきりしてたんだな。 つくづく 109 配列って糞だよな。 無変換だのカタひらだの残しといて、誰が喜ぶんだよ。 いや、だからって 104 キーが好きなわけでもないというところが俺の変なところだが。 あくまで 106 から無変換とかを抜いたやつがいいんだよな。
そしてこのキーボードで地味に最低なのが、 「6」の位置が右から左に移動してること。 左右がキッパリ分かれてるナチュラルキーボードでこの変更は辛い。 ここまでも「6」と打とうとするたびにキーのない場所を強打してしまった。
マウス。どこの設定が悪いのか知らないが、反応がよすぎるな。 xset でちょっと遅くしとこう。 あと、ホイールの反応が「ぬるぬる」している。 ホイールのクリックがめっちゃ固い。
そんなわけであまり気に入っていないキーボードだが、 それでもこれ以外にもう選択肢がないというところが本当に最低だ。 市場原理万歳。
(19:03)
無変換、変換、カタひら、Win, App をぜんぶ左 ALT に置き換え。 X のキーコードの調べかたなんてすっかり忘れてたけど、 xev というコマンドがあったね、そういえば。
keycode 115 = Meta_L keycode 116 = Meta_L keycode 120 = Meta_L keycode 129 = Meta_L keycode 131 = Meta_L
ちなみに CapsLock は左 Ctrl にしてしまう。 役立たずのキーどもはみんな死んでしまえ。
Linux 端末のほうは……まあいいかあっちは。
(19:23)
マウスが重い。なんか知らんが重い。
ホイールも重い。そして固い。
コードがないのは思いのほかいいものだ。からまる心配をしなくていい。 ただし受信機のコードはやっぱり目障りだ。
やはりマウスを使っているとキーボードのテンキーが邪魔くさい。 また前回と同じようにぶったぎりたい衝動にかられるが、 無線受信機がテンキー前部に配置されてたりすると泣くに泣けない。 あと、テンキーを切るとゴム足がいっしょになくなってしまうのも困る。 なんかいい方法はないかな。
まあ、あれだ。とりあえず開けるか。
(19:40)
試してみたら、あっさりテンキー部分を切除できそうな目途がたった。 内部は全部プラスチックだから、鉄板が入ってた前回に比れば作業は楽そうだ。 強度がちょっと心配だけど、なんとかなるか?
あとは道具か。プラスチックカッターくらいは買っておきたいところだな。 100 円カッターと精密ノコギリだけではさすがに無理そう。
しばらく使ってみて、不満エネルギーがたまったところで作業しよう。
(20:07)
マウスの接続が切れまくってるようだ。 移動したのは伝わってるのにクリックが伝わってない。
再接続したら直ったような気がする。 24h つけっぱなしなんて想定してないのかな。 ちくちょうめんどくせえぞ無線。
(14:10)
いやー、まずい、まずいなこれは。 予定通り進まないだろうとは思ってたけど、 やっぱり 12 月いっぱいでは第二段階が終わらなそうだ。 この段階って退屈だしなあ。 やっぱ文章書きたいよな文章。
(23:44)
えーと進行状況は 70% くらい?
~ % ruby c/bitclust/tools/statrefm.rb c/rubydoc --- Status 157/226 files done (69.47%) --- Ranking by number of files 1 96 sheepman 2 69 (not yet) 3 31 okkez 4 11 date 5 10 iwadon 6 5 aamine 7 2 tadf 8 1 kimuraw 9 1 moriq --- Ranking by Kbytes 1 423 sheepman 2 200 (not yet) 3 180 okkez 4 37 date 5 32 aamine 6 30 iwadon 7 13 kimuraw 8 2 moriq 9 2 tadf
あ、でも思ったよりは進んでるんだなあ。 まあほとんど sheepman さんと okkez さんによるわけですが。 俺ももうちょっとなんとかしよ。
俺はついつい文章まで一緒にいじっちゃうから進まないし 面倒くさくなるんだよねー。わかっちゃいるのだが。
(23:48)
しかし残りのファイルは約 70 だ。 仮に 5 人がフル稼働したとすると、1 人 14 ファイル。 今年は今日を入れてよければあと 7 日あるので、 1 日 2 ファイルやればよいことになるな。
……こういう計算をしてると、 なんか夏休みの宿題をやるみたいなデジャヴ感がただよいますな。 他にも「原稿を 1 日何ページやれば……」とか。
(00:09)
写真を入れてみた。
▼新旧キーボード比較の図
やはりテンキーが邪魔だ。 Firefox とか使うときにどうしても PageUp/PageDown を使いたいんだけど、 それがうまく見付けられない。 前のテンキーなしキーボードではキーボードの右端 == PageUp/PageDown だったんだけど、 いまはテンキーがあるからな。
また、十字キーを中心に寄せるために右 Ctrl が妙に左にあり、 とても押しにくい。ウザい。 こんなことするくらいならテンキーの幅を減らしやがれ。
そしてやっぱり「6」のキーが移動してるのが最低だ。 さっきコマンド打ってて、 「6」が打てなくなると「^」まで打てなくなることに気付いた (基本は 101 配列であるため、Shift + 「6」は「^」である)。 本当に最低だ。おかげで grep しにくくてしょうがない。
▼コードレスマウス
マウスホイールのクリックが妙に固いと思ったら、 俺の押しかたが合ってないようだ。 俺はホイールの後ろ側を前に押し出すように押すんだけど、 このマウスはその逆に、前から後ろに向かって押さなきゃいけないらしい。 全体的にもっと前を持てってことか。 あるいは、もっと手の大きい人間を想定しているのかもしれない。 とにかく俺のマウスの持ちかたとは非常に合わない。
マウスの右親指を当てるところがぐにーっとへこんでて、 親指と人差し指でつまむように持てるのはちょっといい感じ。
▼話には全然出てこない無線受信部。見ためがスイカの種っぽい
(01:19)
高校のときの漢文の先生はボケてるんじゃないかというのがもっぱらの噂であった。 なにしろ一学期に 10 ページしか進まないし、 授業中に突然キャベツの千切りのしかたについてレクチャーを始めるし。 あるいはうちの学年には問題児が多かったので、ストレスがたまっていたのかもしれない。
……てなことを、キャベツの千切りをしているといつも思い出してしまう。
……と日記に書こうと思いながら夕食作ってたら、 キャベツごと皿が落ちた。不幸だ。
(02:46)
進行状況をよくよく見てみる。 なんか意外と例外クラスとかが多いんだが、 残る大物はと言うと、dl, soap, tk, wsdl, xsd ……って、大物すぎだろこれは。
(06:05)
実はちょっと前から Subversion に乗り換えてたりする。 ついに世の趨勢に負けました。 TMail とか Racc とか、メンテする気のあるやつはすでにすべてコンバート済み。
http://i.loveruby.net/svn/public/
こうなると、BitChannel も Subversion に乗り換えざるをえないよなあ……。
(08:35)
■
ただただし [>BitChannel も Subversion に乗り換えざるをえないよなあ
期待age。]
組み込みライブラリが終わって 85.15% 完了。 残りはこんなもん (すでに割り当てられてるものも含む)。
……なんかデカいやつばっかりだし。 しかもこれでまだ中身は書き始めてないってんだから嫌になるね。
(09:32)
水面下でコーディングが続いている cflat コンパイラ (プロトタイプ Ruby 版)。 いつの間にかポインタが使えるようになった。
~/c/cflat/test % cat pointer.cb int main(int argc, char **argv) { int i; int *ptr; ptr = &i; *ptr = 5; printf("%d;%x\n", i, *ptr); return 0; } ~/c/cflat/test % rm -f pointer ~/c/cflat/test % make pointer ruby -I../lib ../bin/cbc pointer.cb ~/c/cflat/test % ./pointer 5;5
いまだにレジスタアロケーションを真面目にやっていないので、 アセンブリのコードがかなり笑える。
(07:01)
なーんか以前から Tru64UNIX のマシンに scp できなくて困ってたんだけど、 ようやく原因が判明した。 Tru64UNIX は商用 SSH (SSH2) が入ってるので、 OpenSSH な Linux とは scp の互換性がないらしい。
しょうがないので、次のように ssh コマンドを使って代用する。
% tar cf - ruby-1.8.?.tar.gz | (ssh tunami "cd /usr/users/aamine; tar xf -")
(12:52)
なんかすげー笹田さんが嫌がりそうなところを突いてしまった。 ネストしてる rescue の内側の、rescue に入る前で retry するとエラーになる。
~ % cat t ret = false begin puts 'outer rescue' exit if ret begin puts 'inner rescue' exit if ret ret = true retry rescue end rescue end ~ % ruby t outer rescue inner rescue t:13: retry outside of rescue clause
元のコードはこんなの。
when link? begin File.symlink linkname(), path() rescue Errno::EEXIST begin File.unlink path() retry ← ファイルをunlinkできたら改めてシンボリックリンクを作る rescue SystemCallError end end
うーむ、これは ruby-dev に投げるべきかどうか、微妙だ。 簡単に回避できるしな。
(15:42)
■ ささだ [これって仕様どおりじゃないの?]
■
青木 [その仕様を変えたほうがいいんじゃないか、
と提案したほうがいいような、しなくてもいいような、
微妙なところだなあということ。]
■ ささだ [あー、やっと問題がわかった。うーん、確かに悩ましい。]
■
ささだ [あれ、サンプルコード間違ってない? だから勘違いしたんだ。
begin
(p :exit; exit) if (count += 1) > 1
raise
rescue
p count
begin
p :retry
retry
rescue
end
end
は1.8.5でもYARVでも動くよ。]
■ ささだ [count = 0 忘れた。]
■
青木 [げ、本当だ。テストスクリプトが間違ってただけか!
これは恥ずい。しつれいしますた。]
■ なかむら(う) [実は、同じキーボードを持ってて、余ってたりするんだけど...]
■ zunda [HHK!高いけど!]
■ 青木 [ガーン。ちょうど今日買ってきてしまった……。
Microsoft の wireless optical desktop pro (長い)。]
■ 青木 [えー、HHK は小さすぎですよ。
あれ打ってると肩がこって……。]
■ HHK信者zunda [あれー。それぞれのキーの大きさは普通のものと一緒なんだけどなぁ…。]
■ 青木 [根本的にキーが左右に分かれてないとだめなのですよ。
一回ナチュラルキーボードに慣れちゃうと普通のは無理です。
ノートはしょうがないんで我慢しますけど。]
■ zunda [なるほどー。確かにアレに比べると普通のは小さいですね。]