Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2006-02-17)
[go: Go Back, main page]

«前の日記(2006-02-16) 最新 次の日記(2006-02-18)» 編集

Matzにっき

<< 2006/02/ 1 1. 『よくわかる現代魔法
2. ActiveState To Spin Out
2 1. Rast高速化パッチ
2. レノボ、Core Duoを搭載したThinkPad X60 / T60を発表
3 1. ruby_class削減
2. Rastが遅いわけ
3. 英会話
4. 雪
5. コンピュータは難しすぎて使えない
4 1. 参観日
2. 『コンピュータ技術者になるには』
3. Ruby温泉ミーティング2006春
5 1. 断食安息日
6 1. 日経Linuxとオープンソースマガジン 2006年4月号
2. るびま 13号
7 1. 日経Linux
2. 日本国民全員にプログラマになってほしい
8 1. 妻の誕生日
2. 日本政府はさっさとオープンソース振興から手を引いてしまえ
3. 良書
9 1. デベロッパーズサミット
10 1. デブサミ2日目
2. 「サミット」
11 1. 実家へ
2. 『i』
12 1. 松江
2. バリアフリー
13 1. Why Ruby?
2. WebプログラマはRailsに乗るべきか?
3. Language Design Is Not Just Solving Puzzles
4. 第7回アジアOSSシンポジウム
14 1. バレンタインデー
2. 機械は人狼を見つけられるかな
3. C#への期待。アンダースからの返答
15 1. オープンソースマガジン・ゲラ
2. 小人さん
3. 「仕事でオープンソース・ソフトを開発したければ有名人になれ」,Seasar2開発者のひが氏
16 1. 日経Linux・ゲラ
2. Otaku, Cedric's weblog: Python going extinct?
3. 競争に打ち勝つための最新武器--オープンソース
17 1. ご当地バカ百景
2. OSSにとってどのような支援策が必要か?
3. 定数探索ルール変更
18 1. 掃除
2. 多重継承言語としてのRuby
3. Rails' Ridiculous Restrictions, a Rant
19 1. 娘のお話
2. バプテスマ会
20 1. お客さま
2. るびマっ 13号
21 1. 「Matzにっき」が壊れた
2. 「有名」になること
3. テレビ出演
22 1. reddit.com日本語版
2. 「有名」になること(2)
3. 風邪ひいた
4. private問題
23 1. 体調不良・スライド
2. 父親の誕生日
24 1. 平成17年度上期未踏ソフトウェア創造事業 千葉PM 成果報告会
2. 『Joel on Software
25 1. 次女誕生日・買い物
26 1. 定例集会・監査
27 1. private問題、その後
2. 復刊ドットコム
28 1. Joelが腹立たしいわけ
2. Ruby2.0への一歩
>>
迷惑メール対策なら Dr.WEB
『Dr.WEB メールデーモン』、MTA 用迷惑メール対策製品です!


2006-02-17 [長年日記]

_ ご当地バカ百景

よくわかるのは今住んでる島根県と育った鳥取県なのだが、まあ、「くすっ」と笑えるくらいか。

しかし、宍道湖七珍の「すもうあしこし」ってなんだったっけ。

  • す - スズキ
  • も - モロゲエビ (別名テナガエビ)
  • う - ウナギ
  • あ - アマサギ
  • し - シジミ
  • こ - コイ
  • し - シラウオ

...だったかな。Googleするとトップはうちの会社の人だった。

_ [OSS] OSSにとってどのような支援策が必要か?

よしおかさんによる。人財という話になっているようだ。まあ、そうかも。

コネクションは重要だ。が、そのコネクションを上手に活用するのはもっと重要だ。

私は幸い日本のオープンソース界ではたぶんトップレベルのコネクションを持っていると思うのだが、あんまり活用しきれてないなあ。

マレーシアで時間があったら、よしおかさんとそういう話もできるといいな。

_ [Ruby] 定数探索ルール変更

1.9で定数探索のルールを変更した。1.8までの定数探索ルールは

  1. 自クラス
  2. ネスト上外側のクラス(トップレベルを除く)
  3. スーパークラス...Objectまで

だが、これはスーパークラスの定数とスーパークラスの定数がどちらが優先かよくわからない、とか、ネストの外側の定数参照はレキシカルな参照に見えるが実はそうじゃない、とか、あまり気に入らないと思っていたのだ。

新しいルールは以下の通り。

  1. 自クラス
  2. スーパークラス(Objectを除く)
  3. ネスト上外側のクラス

本当はもっと単純なルールにしたかったのだが、結局前と同じくらい複雑になっている。いろいろな局面でもっとも便利なルールを考えていたらこうなってしまった。

このルールの(2)でObjectを除いているのは、 Objectがグローバルな定数の置き場所になっているため。グローバル定数よりはよりスコープの狭いネストの外側の定数を優先したかったため。ネストの一番外側はObjectと決まっているので、このルールで見えるべき定数は全部見える。

探索順序が変わっただけで、探索範囲は減っていないから、定数の名称が重複しない限り問題は発生しない。

標準添付のライブラリの範囲内で問題が起きたのは以下の二ヶ所。

webrick/httpservlet/cgihandler.rb:

class CGIHandler < AbstractServlet
  Ruby = File::join(::Config::CONFIG['bindir'],
                    ::Config::CONFIG['ruby_install_name'])
  Ruby << ::Config::CONFIG['EXEEXT']
  CGIRunner = "\"#{Ruby}\" \"#{Config::LIBDIR}/httpservlet/cgi_runner.rb\""

ここではトップレベルのConfigとWEBrick::Configが混在している。 5行目を以下のように書き換えた。

CGIRunner = "\"#{Ruby}\" \"#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb\""

よりわかりやすい方向に矯正されたと思う。

もうひとつはresolv.rb:

class A < Resource
  ClassHash[[TypeValue = 1, ClassValue = ClassValue]] = self

ここの「ClassValue = ClassValue」が問題の箇所。これはネストの外側の定数を自クラスにコピーしている、と読むらしい。

以下のように書き換えた

class A < Resource
  TypeValue = 1
  ClassValue = IN::ClassValue
  ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

こちらもより明確になったのではないだろうか。大差ないけど。

ついでに、load()のwrap modeにおいて正しい順序で定数探索するようにした。 1.8ではwrapを行うanonymous moduleの優先順位が高すぎる。 1.9でもメソッドの探索順位は直ってないわけだが...。

これは将来Classboxを導入した時にwrap modeをClassboxで実装すれば根本的に解決するように思う。Classboxっていろいろ使えるな、魔法のようだ。効率良く実装できれば世界が変わるかも。

お名前:
E-mail:
コメント:
本日のリンク元
検索

«前の日記(2006-02-16) 最新 次の日記(2006-02-18)» 編集

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.