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-01-24)
[go: Go Back, main page]

«前の日記(2006-01-22) 最新 次の日記(2006-01-25)» 編集

Matzにっき

<< 2006/01/ 1 1. 元旦
2 1. 出産
2. 帰省
3. 到着
3 1. デジタル体重計のユーザインタフェース
4 1. Classbox
2. Classboxの実装
5 1. 帰宅
2. PCレスライフ
6 1. PC修理
7 1. 雪かき
2. プログラミング言語SRU
8 1. 断食安息日
2. あーめん
3. 筋肉痛・体調不良
9 1. 米子
10 1. オープンソースマガジン3月号
11 1. 日経Linux 3月号
12 1. Charming Ruby Compiler
2. The Open Nature Of Ruby
13 1. ニート娘に悩む親
2. Python Status Update
3. 泥縄
14 1. 宣教師のお手伝い
2. Simplified/Traditional
3. ボーリング
15 1. 代打不発
2. セミナリー補習
16 1. 不達
2. 誕生日
17 1. 萌え指向プログラミング言語「萌香」
2. Classbox/R
18 1. CommonLispのpackage
19 1. これは便利! と思える elisp プログラムを教えてください
20 1. 「オブジェクト指向神話」神話
21 1. 片付けの日
2. 食べ放題は危険
22 1. 松江
2. お客さま
23 24 1. ruby_block撲滅運動
2. 『よくわかる現代魔法
25 1. 遅延Enumerable
26 1. Thinkpad復活
2. Rastに挑戦?
3. オープンソースの全文検索エンジンの速度性能比較」のご紹介
27 1. 「Javaの生みの親」に聞く「AJAX、LAMP、Ruby on Rails」
2. 「オブジェクト指向」改め「抽象データ指向」
28 1. LINQ
2. シガーソングライター(もどき)
29 1. 慈愛
2. 天国
30 31 1. サブジェクト指向
>>

2006-01-24 [長年日記]

_ [Ruby] ruby_block撲滅運動

Rubyソースコード完全ガイド』14章「コンテキスト」によると、Rubyには実行時スタックが「なんと七本もある」のだそうだ。

そんなにあったっけ。

  • ruby_frame
  • ruby_scope
  • ruby_block
  • ruby_iter
  • ruby_dyna_vars
  • ruby_class
  • ruby_cref

ふむ、確かに七つリストされてるな。実際にはprot_tagもあるので8つだ。

この辺がRubyの実行系が複雑だと揶揄されている根源でもあるのだが、 ふと思い立って、ruby_blockをなくしてみようとやってみた。

ブロックとは本質的には引数の一部なので、引数が格納されるframeに置いてやるのがよいだろう。 ruby_frameに「struct BLOCK *block;」というメンバを追加する。

また、引数の一部であることからrb_call()やrb_call0()にblockを示す引数を追加する。 ブロックが与えられているときにはblock構造体を、ないときには0を渡すことにする。

イテレータを実現するNODE_ITERやNODE_FORを修正して、 rb_callを呼び出すときにblock構造体を渡すようにする。

ruby_blockがなくなったので、ruby_blockが現時点で有効かどうかを示すフラグである ruby_iterは不要になる。同様の理由でruby_frameのiterメンバも不要になる。

あとはそれらに付随していろいろごちゃごちゃと修正を加えると、 あら不思議ruby_blockは無くなってしまいました。 ついでにruby_iterもなくなってスタックは6本に。

スタックが少なくなって、 なんだかちょっとインタプリタがすっきりした(でもコード重複は増えちゃったけど)。

今までが100とすれば、今は99くらいかな。

パフォーマンスについても期待したんだけど、全然変わらないみたい。 まだ、make test-allが通らないんでcheck inはもう少し待ってね。

次はruby_classとruby_cbaseの統合かな。

しかし、『Rubyソースコード完全ガイド』って 絶版になってるの? Amazonでユーズド商品の価格が25,975円になってるんだけど。 こんなプレミア価格ってアリなの?

_よくわかる現代魔法

娘に頼まれた本を購入したついでに買ってしまう。

いや、精神集中に素数計算を遅延実行すると書いてあったのに惹かれた というのが本音かもしれない。

sieve(n:ns) = n:sieve[m<-ns, m`rem`n/=0]

ってコードはHaskellだよね。前にakrさんがこの本のことに触れていたような気がするな。

でも、プログラムが出てくるのはそこだけで、 後はまあコンピュータは単なる小道具くらいかな。 登場人物の一人(女子高生)が「CとPerlならわかるけど」と発言するくらいかな、 業界人として面白かったのは。

しかし、

  • ある種のパターンが空間に作用することが魔法の原理
  • コンピュータによってそのパターンを構成させるのが現代魔法

という設定はなかなかよろしかった。のに、ちょっと消化不良な感が。

いや、業界人が喜ぶ話は、きっと一般人には面白くもなんともないんだろうから、 ラノベとしては成功しなさそう。

ところで、二巻『ガーベージコレクター』も 眺めてみたのだが、レベルは同じ程度。素材はいいと思うんだけどなあ。

この巻のタイトルであるGCには思い入れがあるぶん、辛くなってしまう。 なんだよ、「マーカー」と「リファレンサー」が 「ガーベージコレクター」が回収しないように保護するってのは。 そこは「マーカー」が「スイーパー」から保護するって言わなくちゃ。 「マーク&スイープ」を採用してるんなら。

いや、人間の記憶のGCってどうなってんのかな、正直な話。 なんか参照されてても平気で回収されてるような気がするな。

本日のツッコミ(全4件) [ツッコミを入れる]
_ ちょっと通りますよ (2006-01-29 03:05)

よくわかる現代魔法 といえば たらい/Haskell vs Ruby/遅延評価
です。

http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%a4%bf%a4%e9%a4%a4%a4%de%a4%ef%a4%b7%a4%d9%a4%f3%a4%c1

_ ささだ (2006-01-29 08:45)

え,cbaseとcref(cbase)って統合できますか?

_ yk (2006-01-29 13:47)

桜坂洋というと
http://www.amazon.co.jp/exec/obidos/ASIN/4150308004/qid=1138508554/sr=1-2/ref=sr_1_10_2/250-3000310-2437017
も面白いですよ、たぶん。
特に理由もなく向こうから好きになってくれる女の子という設定が許せるならですが。

_ まつもと (2006-01-29 18:21)

無理かも。cbaseとclassの統合。
まだちゃんと検討していないので。

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

«前の日記(2006-01-22) 最新 次の日記(2006-01-25)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.