K.Sasada's Home Page

Diary - 2005 December

研究日記

師走

_31(Sat)

優先順位を上げないといけないのは、あとは何ですかねぇ。


ご飯が無かったので、味噌ラーメンに余ったカレーをかけてみた。

うーん、微妙だ。


うわー、やっちまった。期日を June -> July と間違えた orz


ところで、http://www.namikilab.tuat.ac.jp/~sasada/diary/vote.cgi 12号の人気投票をしています。


しまった。この日記は月が新しくなったときに自動的にページを作る機能を持っていない。

で、2005 年度分は予め作っておいたんだけど、2006 年度分が無い。どうしようかな。


Function Module Instructions Retired samples Clockticks samples Cycles per Retired Instruction - CPI
rb_lastline_set cygruby19.dll 357 315 0.88
strftime cygruby19.dll 309 174 0.56
th_call0 cygruby19.dll 263 152 0.58
thread_dump_regs cygruby19.dll 206 127 0.62
th_eval cygruby19.dll 206 119 0.58
Init_yarvcore cygruby19.dll 175 108 0.62
debug_print_register cygruby19.dll 169 85 0.50
rb_check_type cygruby19.dll 121 105 0.87
native_thread_cleanup cygruby19.dll 80 39 0.49
rb_backref_set cygruby19.dll 71 48 0.68
rb_lastline_get cygruby19.dll 59 42 0.71
thread_eval cygruby19.dll 50 43 0.86
rb_svar cygruby19.dll 33 45 1.36
yarv_backtrace cygruby19.dll 24 68 2.83
yarv_caller cygruby19.dll 18 42 2.33
debug_print_pre cygruby19.dll 11 14 1.27
rb_backref_get cygruby19.dll 11 10 0.91
rb_obj_as_string cygruby19.dll 1 1 1.00
rb_hash_freeze cygruby19.dll 1 0.00
Init_heap cygruby19.dll 1 0.00
rb_parser_append_print cygruby19.dll 2

VTune にコマンドラインインターフェースがあるのを今初めて知った。というわけで、使ってみているんだけれど、とても難しい。

ちなみに、上記は fib(34) を動かしてみた結果。

$ vtl activity -c sampling -app "ruby","-I../yarv/lib ../yarv/benchmark/bmx_temp.rb" run
$ vtl view -hf -mn cygruby19.dll -sum -sort -cd

こんな感じで出力。うーん、わからん。変な結果だなぁ。


色々試したが、DLL のものだと、うまく関数ポインタを得ることが出来ていないような気がする。

というわけで、VTune は miniruby 専用にしておく。

gcc -O0

th_eval miniruby.exe 3267 3060 0.94
th_set_env miniruby.exe 529 598 1.13
eval_method_search miniruby.exe 235 120 0.51
rb_class_of miniruby.exe 146 80 0.55
yarv_get_current_running_thread miniruby.exe 67 90 1.34
rb_check_type miniruby.exe 53 67 1.26
rb_type miniruby.exe 47 90 1.91
memcpy miniruby.exe 1 0.00
rb_newobj miniruby.exe 1 0.00
st_lookup miniruby.exe 1 2 2.00
strhash miniruby.exe 1 0.00
rb_add_method miniruby.exe 1

gcc -O2

th_eval miniruby.exe 2659 1754 0.66
rb_check_type miniruby.exe 129 96 0.74
strhash miniruby.exe 1 1 1.00
rb_node_newnode miniruby.exe 1
rb_set_class_path miniruby.exe 1
set_syserr miniruby.exe 1
st_lookup miniruby.exe 1

hf オプションは hotspot functions で、ha オプションは hotspot address らしい。見たいのは address のような粒度の小さいものだが、しかし address を見ただけではソースコードのどのあたりかわからない。

アドレスからソースコードのファイル名と行番号を得るにはどうすればいいんだろうか。

GUI 版ではやってくれるんだけどなぁ。


どうにも思い浮かばないので(objdump -dl で出来るのかと思ったが、オフセットを得る方法がわからない)、ソースレベルの話は GUI 版を見ることにしよう。


100行くらいのマクロ関数の中でエラーがあると、マクロのどこにエラーがあったのかわからない(一行にまとめられてしまうため)。どうにも、こいつが都合が悪いため、なんとかしたいんだけど、いいアイデアがない。

いっそコピペ?

このでかい奴は自動生成するものなので、各ファイルに細切れに include させるのも手なんだが、呼び出すところで #include って書くのはかっこ悪い(呼び出し側は自動生成ではない)。

マクロの中で #include とはかけない(そりゃそうだ)とか、なんか色々方法を考えてみたんだけど、いい方法は思い浮かばない。うーん。


VTune は、色々調べたが諦め風味。

_青木(Sat Dec 31 14:09:26 JST 2005)

 addr2line

_30(Fri)

懸念だった cref について、やっとなんとかした。多分、これで Rubyがきちんと実現できた

多分、これで大分よくなるだろう。あとはまともな Binding か...。

しかし、diff が1500行で、それに対するログが1行って、われながら...。


カレーライスを2杯食べて、仮眠したら気持ち悪い...。


懸念だった TOPLEVEL_BINDING にも対応。これで ERB はばっちり。

... 速度以外は。

require 'erb'
100000.times{|e|
  ERB.new('<% e %>').result(binding)
}
--
ruby 13.024
yarv 12.683

ううむ。

_29(Thu)

やっと GC などのバグの元を見つけた、ような気がする。


ここまで実装して、やっと cref / class の扱いがわかってきた。んで、やっとなんとか、実装方法がわかってきた。

んー、やっぱり cref はメソッド呼出しごとに切り替える他無いのか? んー。module_eval みたいなのさえなければ、こんな苦労しなくていいのに。

lfp と一緒に特別な何かとして格納してやれば、なんとかなるような気はするな。あー、やっぱりなんとかならなかった。

そして、ruby_class 相当も必要ってことだろうか。この辺は別に問題ないか。

うーん、フレームごとに cref を用意するべきだろうか。今 10 word でこれ以上増やしたくないんだよな。

フレームごと、じゃなくてメソッドフレームごとにしてみるのはどうだろうか。なんとなく、うまくいきそうな気がしないこともない。


Ruby Quiz.

Const = :top
class C
  Const = :C
end

C.instance_eval %{
  p Const
}
C.instance_eval{
  p Const
}
C.module_eval %{
  p Const
}
C.module_eval{
  p Const
}
C.class_eval %{
  p Const
}
C.class_eval{
  p Const
}
eval %{
  p Const
}
eval{
  p Const
}

If you can answer all outputs, You are a great Ruby Hacker.


頭の中がやっとまとまった。

  • lfp[-2] が nil なら、デフォルトの cref を使う
  • lfp[-2] が !nil なら、それを cref として使う

これで行こう。これで問題ないはず。現在 $_, $~ のために lfp[-1] を用意(nil 初期化)しているが、ひとつ余計に nil 初期化したところで、速度的なオーバヘッドは皆無だろう。

よし、多分これで懸念は去った。

って、lfp[-1] をもっと有効活用すれば、コンパイラを一切いじらなくても対応できるな。RNode なので、nd_file をそれ用の領域にすれば問題無さそうだ。そうしてしまうかなぁ。しかし、ぎゅうぎゅうに詰めたものだ。


  1. Rails やろう!
  2. Ruby をインストールした!
  3. さて Rails でなんか作るぞ!

というとき、 Ruby または Rails の学習曲線的はどんなもんなんだろうか。


cvar は今、cref を見てるけど、ruby_class を見ないのはなぜだろう。


YARV がだんだんバグが少なくなっているのを見て、結構うれしい。それなりに動くようになっているような気がするので、試してもらえると助かります。signal 系と I/O 系がまだ手付かずだけど。


control frame stack は GC 領域にしたくなかったんだけど、しないとまずい、ということでするとにした。これを GC 対象にしたんだから、なんかもっと手が抜ける方法が思いつくかも。つかないかも...。


学校に来たので投票を更新。


ちょっとお正月風にしてみる。ちょっと早いけど。

_28(Wed)

バグ報告に対応するってのは、色々楽でいいですね。自分で開発してるより。


今、backtrace を C 関数の再帰で作ってるんだけれど、これがどうにもよろしくない。スタックオーバーフローを起こしたときに、大変なことに。

しかし、再帰を使わないとなると、面倒なんだよな。これ、ループで出来るんだろうか。

作ってから reverse すると...。うーん、どっちが速いんだろう。


ループしてリバースのほうが早かった。


backtrace 作るのが遅かったんだけれど、色々悩んでみたら、snprintf() してから rb_str_new2() で作るより、rb_sprintf() で文字列オブジェクトを作ったほうが速かったから、という結論になった。なんてこった。

こないだ Joel on Software で読んだ事例だよな、多分。

しかし、まだ遅いな。うーん。


根本的に、バックトレースとして出力するものがふえたからだと思う。バックトレース生成を遅延すれば、なんとかなりそう。

_shiro(Wed Dec 28 11:31:57 JST 2005)

 バグ報告の到着数が処理能力より小さいうちはね。

_maeda(Wed Dec 28 14:14:12 JST 2005)

 バックトレースの速度って重要なんですか。

_ささだ(Wed Dec 28 15:40:43 JST 2005)

 たしかに。人口的に、まだ心配ないかな>到着数

_ささだ(Wed Dec 28 15:41:19 JST 2005)

 例外発生したらバックトレース作るので。じゃぁ例外発生が頻繁に起こるのか、というと、ときどきそういうプログラムがあります。

_27(Tue)

帰宅。未踏の下期キックオフだった。

キーボードが進んだ進んだ。


VMware のライセンス来た。紙(10ページくらい)を届けるのに、このでかい箱はなんなんだ...。


VOA を聞いていたら、とても聞きなれた単語が。

VOA News - Women's Hall of Fame Adds New Members, Including Hillary Clinton

Answer a question about open-source software …

なんで、全米女性保健ネットワークにオープンソースソフトウェアがくっついてるんだろう。

軽く読めるし聞けるので、VOA Special English はおすすめ。ただ、Podcasting が溜まりまくってる。


mF24 こんなサービスができたのねぇ。だらだらと jazz を聞きたいんだが、一々ダウンロードするのが面倒だな。


VMware Player ではフォルダの共有、という機能は使えないらしい orz

さて、どうしたもんかね。


configure: error: cannot find sources () in ../yarv or ..

って、なんだ。

test -r で失敗してるらしい。


原因はわかった気がする。

_きむら(Tue Dec 27 15:26:06 JST 2005)

 覚悟を決めてVMware買ってしまえーっ。 って高いか(^^;

_ささだ(Wed Dec 28 00:22:13 JST 2005)

 買いました。

_26(Mon)

天下の結城さんが質問を受け付けていたけれど、マクドナルドでどんなメニューを頼むのか聞いてみたかった。

(いや、真面目な質問もしてみたいが...)

_25(Sun)

Merry Xmas.


なんとなく、動いたような気がする。次は命令融合とかの対処かな...。


関係ないけど、かなりダメな間違いを見つけてしまった orz

どうしよう。


上記は直した。


make ext で死ぬというバグをこちらでは cygwin 上で見つけてしまった orz

なんでー。mswin32 と、linux では再現しない。どうしたもんかな。


あれ、build ディレクトリを空にしてやりなおしたら動く...。ナンデー。

うーん、GC なんだろうか。


で、もう一度、と思ってやってみたら同じエラー。なんか、rm -rf ext しようとすると、ext/socket が busy とか出るんだが、なんでだ。何が悪い。


と、思ったら linux でも出るな。なんか、最適化オプションによって出たり出なかったり...。

gdb 上だと動くー。なんでー。


色々試すといろんなところで落ちるので、やっぱり GC かな。


もうちょっと簡単に再現するものが欲しい。

_24(Sat)

るびまのプレゼント、できれば本がなかなか買えない学生さんにお渡ししたいなぁ、などと思うが学生からの応募は(多分)一切無い。広報が足りないのかなあ。

あと、なんとなく不公平かな、って思って編集者は応募禁止にしてるんだが、さてこれは逆に編集者に不公平か。俺以外、ってことにして、俺(が作ったスクリプト)が選ぶ、ってことにすれば大丈夫なんだろうか。なんかこういうのに関する法律もあったような気がするんだが、調べられない。懸賞の額とかは出て来るんだけどな。


うぅ、やっぱり 2GB じゃ足りなくなってしまった。ちょっと音楽を追加しよう、とか思ってしまったばっかりに。割り切れてないなあ。


kahua seminar 2 でもらったオライリーのボールペン、書きづらい...。


ruby (syntax) quiz.

class C
  def m
    p "C#m"
  end
end

class D < C
  alias foo m
end

class C
  def m
    p "re-defined C#m"
  end
end

D.new.foo # what should be printed?

なんというか、やっと visibility をそれっぽくサポートした。遅すぎ。これ、実は去年の仕事だよな(まだ、scope 中の visibility は対応していない。つまり、引数無しの private とか)。

で、なんで一月もかかっていたかというと、現状のクラスのメソッドテーブルの持ち方ではどーもうまくいかなかったんですよね(RClass#m_tbl)。というわけで、その辺のデザインを全部とっかえて、ということを影響範囲を小さく保ちながらやる、ということができずうまいことできなくて困っていた。


うー、寝すぎ。


コンパイル時に各命令におけるスタックの深さを正確に計算する方法がうまく出来ない。融合操作を考えなければ出来そうなんだけれど。うーむ。いっそ禁止してしまうかなぁ。


なんとなく出来たかな、と思ったけど、まだまだだった。

_なかむら(う)(Mon Dec 26 09:47:20 JST 2005)

 世の中には本がなかなか買えない社会人だっていると思いますよ。(しないと思うけど)抽選時に職業差別するなら募集要項に書いてね。

_23(Fri)

Rubyist Magazine 0012 をリリースしました。

お楽しみください。


しかし今回はなんかなかなか出なかった。

リリースの日付をみてもらえるとわかると思うんですけど(Rubyist Magazine - るびま)、20 日を過ぎたのは今回が初めてなんです。逆に言うと、11 回は(11 回も!)凄く順調だった、といえるんだろうか(いや、中では毎回、色々大変なんですが)。

もしかしたら、そろそろ潮時なのかもな、などと考える年の瀬。


しかし、連休の初日にリリース、というのはアクセス数的にはどんなもんなのかな。


ガクガクブルブル orz


そういえば、るびま、プレゼントの締め切りは今年中なので、ご応募はお早めに。

_みずしま(Fri Dec 23 11:06:06 JST 2005)

 お疲れ様です。

_22(Thu)

オブジェクト倶楽部がアウェイ、というか、ただ単に私が初対面の人と話ができないだけと言うか。対人スキルが根本的に無いので、そこが問題なのよね。


なんか、今回はるびまなかなかリリースできんなあ。


こっそりと YARV 0.3.3 リリース。


YARV 0.3.3 released.

_るだらけ(Thu Dec 22 15:57:25 JST 2005)

 yarvext/evalc.patchが直らないまま何代か続いてるようです。

_ささだ(Thu Dec 22 21:47:10 JST 2005)

 yarvext/ 以下は対象外ということで、本当は削りたかったんだけれど、すっかり忘れていた、というのが真相です。

_21(Wed)

えー...。いまさらなものをちょっと(じゃないけど)やってみたんだけれど、まさかループものだったとは...。

しかし、よく出来てるな。すごい。

_maya(Wed Dec 21 22:58:25 JST 2005)

 ひぐらし?

_20(Tue)

SMB over ssh での portforwarding が出来なくなった.なんでか理由が全然わからない.なーんーでー.


なんかわからんけど設定を弄ったり戻したりputtyのバージョンをあげたりしたらつながった.なーんーでー.


さて,なんで久々に SMB でつなげようとしていたかというと,おうちのファイルをとってきたかったからなんだが,今の数時間を考えると帰ったほうが早かった orz


さくさくとバグを退治.多重代入の仕様,ほんとさっさと決まらないかなあ.


さぼってた ruby-eng 投げたっと。あとはるびまの編集か...。


るびまのインタビューの録音したファイルに、13 という数字をつけて、くだらない感傷なのかもしれないけど、あぁ、13回目なのだなぁ、などと一人感動していた。


2005年度下期未踏ソフトウェア創造事業 公募結果

_19(Mon)

というわけで、「査読2.0」ということで決定しました。


何がだ...。


1.times{
  defined?(break :foo)
  :bar
}

さて,このプログラムはどんな挙動を示すか.


Ruby プログラムを書くために私がエディタに求める機能は,今のところ (1) オートインデント(改行時に適切なインデントをしてくれる機能)(2) 適切な色付け(文法エラーとかを知るために必要) (3) 編集中のファイルを即座に実行する仕組みだけなので,xyzzy で困っていないんだけど,実はもっと便利な機能を見過ごしてるだけだったりする?

(1) (2) は ruby-mode がやってくれて,(3) は簡単に作れるから問題ない.

irb は (3) をもっと簡単に実現するものだけれど,3行以上のプログラムを試そうと思うと現実的じゃない(少なくとも私には).そして,試したいプログラムは大抵 3行以上ある.


(3) を実現するスクリプトを tips/拡張子に応じて何かする に貼ったら,なんか拡張されてた.


最近(といっても数ヶ月前)xyzzy 用にこんなコードを書いた.

(global-set-key
 '(#\C-c #\C-r)
 #'(lambda () (interactive)
     (let*
         ((file "~/src/rb/t.rb"))
       (if (or
            (and (get-file-buffer file)
                 (set-buffer (get-file-buffer file)))
            (find-file file))

           ;; insert
           (progn
             (goto-char 0)
             (insert "\n\n__END__\n")
             (goto-char 0))
         ))))

~/src/rb/t.rb というファイルに,私はなんでも放り込むんだけど,好きなタイミングですぐに新しい実験コードを書くために,そのファイルを開いて,ファイルの先頭に __END__ を挿入するというだけのスクリプト.

私の用途にはとても便利.


頭が悪いので,C-x C- ... のような,難しいことを覚えられないので,C-2 でとりあえずなんかしてくれるのが欲しいのだけれど,emacs だと C-[数字] ってキーバインド作れないのよね.


なんか,溜まってた話を消化...,出来てないなあ.


gccの話を聞いた.2000円分の何かを吸収できただろうか.


12/13 賞味期限のもやしにチャレンジ.


GCC は cvs から subversion に移ったとのこと.機械的なリポジトリの移行は殆ど問題なかったとのこと.subversion が選ばれたのは better cvs として,唯一の解だったとのこと.

GCC も移ったんだしさー,という論法は,どうなんだろうね.


30人上限,ということでもっと沢山人が居るのかと思ったら,15人弱だったようで.皆さん顔見知りばかりみたいで,アレだった.なかなか,あのコミュニティも.オブジェクト倶楽部とは真逆な感じで,居づらい.一人アウェイ.

しかし,なんで GCC の(日本ではとても貴重だと思うんだが)話に,こんだけしか聞きに来ないのかな.凄い,意外.


珍しくメモを取ったので面倒なんで載せておく。あんまり信用しないように。

... と思ったけど、あんまりにもひどい内容なので、さらすのはよしておこう。

_KM(Mon Dec 19 19:43:42 JST 2005)

 一人称シューティングゲーム」ある種の(というかこのテ)の語は、誰にもネタがわからないまま素訳(の時の直訳)が残ってしまったまま出版されたりしてそれが定着しちゃうことが。hack(6) の注が「地下迷宮爆破ゲーム」となってた例があります(この場合さらに空目に基づく誤訳になってますが)

_kjana(Mon Dec 19 23:01:39 JST 2005)

(global-set-key [?\C-2] 'set-mark-command)

とか .emacs に書いてあるけどな....

KEY is a key sequence; noninteractively, it is a string or vector of characters or event types, and non-ASCII characters with codes above 127 (such as ISO Latin-1) can be included if you use a vector.

ってやつ。多分、info にもっとちゃんとした説明があります。X 上でないと駄目なのが不満っていう話だとどうにもなりませんけど。

_ささだ(Tue Dec 20 00:07:01 JST 2005)

 Xだとできるのかー.

_18(Sun)

起きたら16時だった。


昨日は、まず kahua セミナー2へ行く。

2年ぶりくらいにkahuaを起動。まだ自分の文章があってびっくりした。使う人に簡単に管理させるための何かが必要ですね。アーキテクチャの基本は全然変わってなくて、容易に理解できた(思い出せた)。が、セミナーの説明で理解させることができたかどうかはちょっとわからなかった。

emacs から kahua-shell につなぐために ssh を要求するのはちょっと嫌だな。

kahua-admin から connect するのと、kahua-shell でつなぐのでは評価する環境が違うらしく、ちょっと戸惑った。

で、懇親会。久井さんのやつを色々教えてもらったり。

(define alias define)

は、Gauche special だ、とかなんとか。


その足で、Rails勉強会の懇親会に行った。Kahua セミナー懇親会で聞く話と全然違ったり、オブジェクト倶楽部のイベントでは顔を知らない人ばかりで何も出来なかったが、こっちでは(私は彼らの顔を知らないんだけど)彼らは私のことを、るびまの人だ、とかYARVの人、などで知っておられたようで、いろいろ話がしやすかったりして、こちらも楽しかった。


どちらかというと、本当に相反する集まりだったように思う。そういう点で、Rails は新鮮で楽しかった。


まつもとさんレベルだと、発表中にマシントラブルなどがあってもそれをネタにして会場を沸かせたり、資料が無くても十分しゃべれるんだけれど、たとえば私がそれをやったらとにかく顰蹙を買うだけ。とくに、学会発表なんかだと最悪。

なので、

  • USB メモリと、ネットワークでアクセスできるどこかに、一般的なフォーマット(パワーポイント、もしくは PDF)でバックアップを置く
  • 会場に着いたら、できるだけ早めに会場のプロジェクタに接続して試験

をします。というか、常識だと思ってるんだけど、なかなかそうではないらしく。発表者の人、気をつけましょうね。

一度、会場で事前テストしたら写らないことがわかったので、急遽運営側のマシンをお借りして無事終了、ということがあったな。それがはじめてのシンポジウム (SACSIS) だったわけだけど。


さて、まだ「査読」の話をするわけですが。

やはり、「原稿を読んで文章の質を高めるためによくすること」を「査読」という人は多いようです。Rails 勉強会でも、セッションのひとつにその意味で「査読会」ということをしていたそうです。

そうなると、この言葉が流行りだした元が気になるわけです(もちろん、日本語としての言葉の意味も気になるわけですが)。

誰かが流行らせた様な気もするんだけれど、誰か、ってのも気になりますねえ。その「誰か」はどうして査読という言葉を使ったかというのも気になる。

(間違いだとかどうのとか、そういうの関係なく、気になるって話です)


とかそんな話を柳田さんにしたら、「敷居が高い」という言葉について教えてくれました。

「敷居が高い」というのは

http://dictionary.goo.ne.jp/search.php?MT=%C9%DF%B5%EF&kind=jn&mode=0&base=1&row=0

――が高・い 不義理・不面目なことなどがあって、その人の家に行きにくい。

ということで、たとえば「Ruby を使うのは敷居が高い」という使い方は「辞書に書いてあるとおり」解釈すると、誤用ということらしい。

全然知りませんでした。


メソッド名などの補完について。

Ruby のシンボルは、標準で存在するものすべてを網羅しても数千くらいだろうから、全部候補にしてしまうとどうなんだろう。混乱するだけかな。3文字くらい入力すれば、だいたい決まるような気がするんだけど。

さくっと試せないのが基礎力のないところ。

_arton(Sun Dec 18 22:10:29 JST 2005)

 まだ引っ張るか、と思うと同時に、笹田さんのそういうところが好きだな。(引っ張るというか、また目にしたってことだとは書いてあるけど)。  確かに誤用(この場合は誤用というほど逆向きになるのでも明後日の方向に行くのでもなく、対象範囲の厳密性が薄れただけという点でちょっと微妙な気がするけど)の発生と定着の過程ってのは興味深いね。

_佐野(Mon Dec 19 09:52:35 JST 2005)

 こんにちは。補完はだいたいわかった(てる)のですが、候補をどう集めてくるのか良くわかってません。rubyのシンボルてどうやってとるんですか?xyzzyで静的な補完をしたいだけならetc/Rubyを適当にいじってEsc Tab (服部さんのruby-modeの場合)だと思います。徐々に候補を狭めてくのは割と怪しいのしかないのですが…

_なかだ(Mon Dec 19 10:43:45 JST 2005)

 Symbol.all_symbols

_しゅ(Mon Dec 19 10:49:03 JST 2005)

"review" を日本語で表現しようとして、「検閲じゃないし再検査じゃないし復習じゃないし回顧じゃないし批評だとしっくりこないし…よし(意味はよく考えてないけど)この『査読』で行こう!」ってなもんじゃないすかね。

_佐野(Tue Dec 20 00:57:49 JST 2005)

 なかださん、ありがとうございます。遊んでみます。

_ささだ(Tue Dec 20 00:58:49 JST 2005)

 all_symbols だと,Symbol の種類が特定できないから,もうちょっと工夫があるといい気がしますが....

_17(Sat)

ああ、寝坊した...。


はぁ、世の中には幸せな人は沢山いるのになぁ(自分の努力を棚に上げる)。

_16(Fri)

Ruby関係忘年会。終電まで久々に飲んだ。楽しかったです。


「さ」は、携帯から私が書くときの名前です(めんどーなので)。


たしかに、批評は違うかな、という気はします。

「査読」の意味を調べてみますと、

http://dictionary.goo.ne.jp/search.php?MT=%BA%BA%C6%C9&kind=&kwassist=0&mode=0&jn.x=34&jn.y=8

水準に達しているかどうかを審査するために読むこと。

とあります。これもそうだと思うのですが、私は、「査読」という行為は「○と×」を示すために読むことだと思っています(いや、△でもなんでもいいんですが、目的が「審査」である)。「審査」するプロセスの中で「こうしたほうがいいんじゃない」という「副次的」なものがあってもいいと思いますが、第一目的が「審査」することではないかと思います。

「文章の質を高めるために読んでもらってダメだしする」ことの目的は「審査」じゃなくて、「よくする」ことだと思うので、こういう文脈(「この文章をよくするためにだれだれに査読してもらいました」、など)での「査読」という言葉には違和感を感じます。


るびまでは、記事について、「アドバイザー」をお願いしたり、「レビューア」をお願いしたりしています。ただし、お願いすることは「記事をよくするためのアドバイス」であり、「査読」ではないと思っています。

記事が水準ではない、たとえば「るびまには載せられない」「次回に持ち越したほうがいいんじゃないか(今回載せるにはちょっと文章が練れてないかな)」などの判断をすることは「査読」だと思っています。まぁ、似たようなプロセスではあるんですが。


で、問題は「review」の意味に「査読」というのが入ってるんですね(peer review)。英語で「論文の査読者」のことを reviewer といいます(多分)。じゃぁ、よくいう「レビュー」を日本語にどうするか、というと、今は案がなかったりするので「レビュー」でいいんじゃない、などと思ってます。


まぁ、言葉というのは生き物だ、という言い方もありますし、「役不足」とか「すべからく」とか、ふつーの活字の原稿でも(いわゆる)間違った意味(それぞれ、「役者不足」、「すべて」)で使われたりしているので、「査読」という言葉は今はそう使うんだよ、と言われると反論する術はありません。


というか、日本語に不自由な私がこんなことを言っても説得力が無いなあ。


とまぁ、「査読」という単語の意味という、取るに足らないネタを私は書いてますが、この本自体の翻訳はほぼ完璧なんではないかと思います(今のところ)。とても読みやすい。話も面白い。仕様書の話は身につまされるというか。仕様書なんて書いたことねー(似非プログラマ)。

(訳注にあった、「一人称シューティングゲーム」という言葉はどうなんだろう、とちょっと思った。でも、これは翻訳じゃないし。いや、ぐぐってみると結構ひっかかるな。直訳すると First Person Shooterで、それでもいいのか。一人称視点、と思っていたのだけれど。女の子が「僕」とかいうのは、もちろん関係ないんだろうなぁ)


文字コードについての議論も面白かった。


そして、これはちょっとリークですが、るびま読者用にプレゼントを2冊くらいご用意いただけるようです。太っ腹!>オーム社


うぅ、久々に酒を多めに飲んで頭が痛い...。サワーなどを4杯ほどなんだけど。


プログラムマネージャというのは大変切望されてると思うんだけど、さてどうやって見つけてくるのかね。しかし、「コーダをPMの下に置かない」という話は直感的じゃない(ように私には感じられて)面白い。


火曜日のゴルフってどういう意味なんだろう。偉い人は火曜日にゴルフをするもんなんだろうか。

P81 の訳注の「コラムニスト」って誰を示してるんだろう。ピギー嬢? しかし、こんな仕様書読みたいんだか読みたくないんだか(同ページの注2 に笑った。活字だってところが。やりすぎると読みづらそうだが)。

はらはらドキドキな仕様書ってどうだろう。最後まで読まないと犯人がわからない(よまねーって)。


今日は下北沢経由で行くのがいいか。帰りは初台まで歩いてみよう。


なんとか起きれた。


オブジェクト倶楽部のイベントに行ってきた。色々興味深かったが、全体にやっぱりアウェイだなぁ。社交性がないので宴会でも何も出来ず。


ついでに(ついでかよ)咳さんのインタビューをさせていただきました。突然のお願いに快くご協力いただきました咳さん、須藤さん、角谷さんに深く御礼いたします。

るびまIRCの人たちもね。

_arton(Fri Dec 16 01:55:29 JST 2005)

 ちょっと「生き物」のところは異議がある。古い言葉が誤用から転移した例と比較するのはおかしいし、「今はそう使う」って最初にreviewの翻訳を「査読」に当てた状況を知って(一次資料に当たった上で)決め付けてますか?(っていうか僕も知らないけど)もし明治より前にある言葉なら、当然、論文の査読の意味での査読は語源じゃないし、そうでなければレビューの訳語なんですよ。

_ささだ(Fri Dec 16 02:08:02 JST 2005)

 「古い言葉からの誤用」の例は不適切だったかもしれません。そもそも「査読という言葉の意味に文章をよくすることを目的とする行為(つまり、review の意味をすべて汲み取った話)意味はない」という前提で書いた文章なので、その前提が崩れればまったくもって事実誤認な話だと思います。ただ、今のところその前提を崩すものを見つけていない(根拠は上記辞書へのリンクだけですが)ので、そのように書いています。もし間違っていたらごめんなさい。

 「査読」という言葉は「review」という言葉の一部の意味を示していてすべてではないと思っています。なので、そもそも「文章をよくするために読む行為」である「review」を「査読」と訳すのも変だなあ、などと思ってます。変だなぁ、であって「間違いである」という証拠が示せないのが駄目な感じですが。

_arton(Fri Dec 16 02:23:12 JST 2005)

 L'eclatに書いたけど、笹田さんの主張が正しいようだ、という結論に僕の中ではなりました。不当な言いがかりをつけたみたいでごめんなさい。で、後だしじゃんけんをすると、一応技術的な内容チェックだったんだよ。ただし、ほとんど技術的に黒白がつくような内容が無いから結果的には文章をこなれさせるだけのものになったけど。

_ささだ(Fri Dec 16 02:35:41 JST 2005)

 いや、こちらこそ変に拘ってしまってすみません。なぜか私は「査読」という言葉に異様にこだわってるんですよねぇ。ちなみに、「査読という言葉はreviewの訳語を作るために作った」という話はどこから来てるんでしょうか。国語に詳しい人に意見を聞いてみたいところ。

_arton(Fri Dec 16 02:57:53 JST 2005)

 ああ、頭からreviewの訳語と決め付けてるのは僕の思い込みで、翻訳語特有の匂いがするといういい加減な理由です。ただし、あれだけ用例があり実際に利用されている言葉で大辞林に出ていないというのは「用語」以外には考えられないし、論文と査読という組み合わせは輸入だと(これも)想像しているからです(近代科学の成り立ちから言って輸入で間違いないとは思う)。

_ささだ(Fri Dec 16 03:07:57 JST 2005)

 なるほど、説得力がありますね。

_arton(Fri Dec 16 04:10:08 JST 2005)

 P.81の訳注1って場所が間違ってる。*1)と同じくデイブ・バリーのことですね。http://www.ne.jp/asahi/macrosoft/main/DaveBarry.html とか。

_ささだ(Fri Dec 16 08:32:09 JST 2005)

 なるほどー。

_きむら(Fri Dec 16 10:41:40 JST 2005)

 (話の流れを読まずに) 文字コードの議論ってどんなことを話したんですか?

_babie(Fri Dec 16 12:58:00 JST 2005)

 献本あっても編集者は応募できないじゃないか!(私の立場で「献」本って書いていいのかしら?)

_ささだ(Fri Dec 16 23:27:04 JST 2005)

 こんな話>http://www.joelonsoftware.com/articles/Unicode.html

_きむら(Sat Dec 17 00:23:33 JST 2005)

 どもですー。忘年会行きたかったあ(仕事が落ち着いてればね)

_ささだ(Sat Dec 17 01:14:05 JST 2005)

 あ、文字コードの話は忘年会じゃなくて本のほうです。

_15(Thu)

いやー、やっとグインサーガ、追いついた。104巻、読了。10年かかったのか。なんつうか、ナゲェ。


Joel on Software の書籍版を、るびまやっていたから、ということで頂いてしまった。はじめてるびま編集していて何かもらったりしたような気がする。12/20 発売だそうです。

内容はこれから読みます。


今日のまつもとさんを囲む宴会、実は、18人で予約を取っていたんだけど、結局参加は12人、ということになって、電話越しの店員に嫌な声を出されてしまった。

ということで、飛び入りは可能、なのか?


うぅ、「Joel ...」で「査読」という言葉を「レビュー」という意味で使っているなぁ。

なんでそうなんだろう。語感がそれっぽいからだろうか。意味違うってば。


イントロダクションまで読んだ。

人間のチームをマネジメントしていると、C++のテンプレートさえまったく簡単なものに見えるようになる。

笑った。


さて,御茶ノ水に行こう.

_さ(Thu Dec 15 19:06:40 JST 2005)

 人があんまりこない

_きむら(Thu Dec 15 19:42:50 JST 2005)

 幹事ご苦労様です。今頃は盛り上がってるんでしょうか?

_arton(Thu Dec 15 22:33:08 JST 2005)

 なるほど。>査読 != レビュー。

_arton(Thu Dec 15 22:35:54 JST 2005)

 つい、送ってしまったけど、もちろん全く間違ってるよ。レビューの日本語訳としての査読と、論文の審査の意味の査読をごっちゃにしてるでしょ。

_さ(Fri Dec 16 00:16:41 JST 2005)

 大体予定どおりに終わり

_さ(Fri Dec 16 00:18:37 JST 2005)

 このREVIEWの日本語訳は批評

_さ(Fri Dec 16 00:19:23 JST 2005)

 等ではないでしょうか

_arton(Fri Dec 16 00:37:07 JST 2005)

 一連の書き込みから想定すると批評じゃなくて査読。というか査する対象領域が違うんだよね。と書けば良かったのか最初から。

_arton(Fri Dec 16 00:41:06 JST 2005)

 と書いたそばから別の見解を持った。僕にとって「批評」の対象領域は文芸が第1に来るからすごく「さ」さん00:18:37には違和感がある。それと同じことでしょうね、きっと。「誰でも自分の分野の意味でその言葉を受け取る」ってやつ。

_14(Wed)

いやー・・・。 やっとバグを見つけた。疲れた orz

一週間これに費やしたのか?

原因はメモリを破壊。

NODE *node;
hoge *foo = (hoge*)node;
...
foo->bar = ...;

とやっていたのが敗因。無理やり突っ込んでるのが駄目駄目なんだけれど、さてどうしたもんかねぇ。この領域(foo)をもっとまともに管理できればいいんだけど。


うう。また optparse.rb が動かない orz


えーと,今日どこまで何をやればいいんだっけ....


今の Delegator はブロックを渡してくれないらしい.まずそう.

_13(Tue)

寝坊した orz


セキュリティのチュートリアル、大変楽しかった。

というか、大山さんの仮想化技術の話が(セキュリティ関係ないし)。高木先生のわかりやすい話も面白かったけど。

セキュリティ技術について聞きに来た人たちが、大山さんの説明を聞いてぽかーんとしていたのが面白かった。


そしてうささんを囲む会。RUBY CAFE で Ruby Hack が出来なかった orz。料理は普通においしかったけど、あの量で share は取りづらかったね。

なんというか、品川駅近辺の物価は3倍くらい違ったような気がする。

_みずしま(Tue Dec 13 20:43:01 JST 2005)

 なんか日記の日付がおかしくなってます。http://www.namikilab.tuat.ac.jp/~sasada/diary/ でアクセスすると、2003年の日記が表示されます。(追記:すみません。コメント書いた後、もう一度見てみたら元に戻っていました。一体何だったんだろう)

_ささだ(Tue Dec 13 22:45:06 JST 2005)

 コメントをつけるとその日付が一番上にきます。

_12(Mon)

履歴書を TeX で作るためにちょっと調べたら,ちゃんと写真つきのものが作れた.よかった.


弊社製品のムービー再生にxvid.orgのムービー展開ライブラリを使用していた件について。

おお,と思ったんだけど.

それよりも,もう既に無かったことになってる P/ECE 用 GCC のソースを公開して欲しいぞ.知りたいのは GCC というよりはリンカだけど.リンカはオリジナルんなんだっけ?

P/ECE,もうさっぱり使ってないな.いい機械なんだけどな.


なんか物欲がうずきっぱなし.

DiMAGE X1 が欲しい.512MB くらいの SD カード買うかな.安いし.

http://www.pc-success.co.jp/frame.php?n=/pc/navi.html&h=/header/pc_hdr.html&m=/shop.php?sg_cd=7818

今は19インチモニタが3万なのか・・・.安い.

あと,複合機が欲しい.


えー,ruby-list にはまつもとさんを囲む忘年会の告知をしましたが,明日はなかむら(う)さんを囲む(というか,俺一人なので囲めない)忘年会っぽいことを品川でします.多分.興味のある方はメールしてください.

RUBY CAFE で Ruby Hack というのを狙ってるんだろうけど,どうだろう.


明日は日本ソフトウェア科学会 チュートリアル 「安全な情報基盤の実現に向けて」


svn のポリシの書き方にはまった.

リポジトリ hoge のアクセス制限は,

[/hoge]

じゃなくて

[hoge:/]

というセクションではじめる.

参考:http://subversion.bluegate.org/doc/ch06s04.html

_KM(Tue Dec 13 09:35:21 JST 2005)

 だからそれは開発元の oe さんとかチップ開発元の ep さんとかを巻き込んだ話に(というか特に ep さん)なっちゃうんだってばさ...

_ささだ(Tue Dec 13 22:37:21 JST 2005)

 「だから」って接続は変な気が。

_11(Sun)

RHG 読書会でした.

よくわかる人が居ないとつらい話だったか.


構造体メンバの「順番を入れ替える」とエラーが出たり出なかったり orz もう,さっぱり原因がわからん.


有楽町へ行ってきた.


ylug のMLに登録しようとしたんだけど,出来なかった(atdot.net のメールが弾かれた).しょぼん.


なんというか,3日も家に帰っていないと,それはそれで悲しいわけで.そして帰ろうと思ったら雪.


なんとかやーまにを書き上げたつもりになってるが,どうにもクオリティが低すぎる件について.

俺は命令の解説書なんて書くつもりはなかったんだがなぁ.簡単だから,そっちに流れてしまった.次はなんか他の面白いことを書いてみたいぞ.うーん,なんかリクエスト無いですかねえ.

_きむら(Sun Dec 11 18:48:16 JST 2005)

 ささださん、メールの返事くれないなんてひどい ;-)

_ささだ(Sun Dec 11 21:49:16 JST 2005)

 大変失礼しました.しかし,28時間でクレームがきたのは久々な気がします.

_10(Sat)

今日は RHG 読書会で、コンパイラの話を読みます。

読書会忘年会になりそうですので、暇な人はぜひ。


どうしても segv が取れない。原因は多分 Proc オブジェクトの生成なんだが。今日は諦めるか・・・。悔しい。


(z)super の実引数、仮引数の扱いを多分完璧にできたと思う。気になっていたのでうれしい。


いつまでたってもやーまにが書けないのでまた凄い難易度を下げた orz


また他のエラーを見つけてしまった orz

これはかなり嫌なエラーだなぁ・・・。


バグ取れなかった&帰れなかった orz

_9(Fri)

就職のお誘いを受ける.Access さん.仕事大変そうだけど給料はよさそう.Dr でも普通に取ってくれるらしい.凄い人気企業なのかと思ったら,仕事が大変という印象からか,そう高倍率でも無いらしい.

広告:ささだは就職活動中です.


なかださんの出した例は解析できないだろうか.

recv.method(a, &begin
                 foo(*ary, &raise)
                rescue
                 nil
                end)

手でコンパイルしてみる.

  getlocal recv
  getlocal a
LABEL:
  putself
  getlocal ary
  putself
  send :recv, 0
  send :foo, 1 (splat, procarg)
RESCUE_CONT:
  send :method, 1 (procarg)


rescue_clause:
  putnil
  end

となって,十分解析できるような気がする.


というわけで,未踏下期の意見交換会に行ってきた.

色々話す.世の中は狭いなぁと思ったり広いなぁと思ったり.

_なかだ(Fri Dec 09 14:20:14 JST 2005)

 splatは直接スタックに展開されるんじゃないのカー。

_ささだ(Fri Dec 09 22:31:45 JST 2005)

 ないんですよ−

_babie(Fri Dec 09 23:20:24 JST 2005)

 Access さんを検索する裏技を教えてください。

_ささだ(Sat Dec 10 00:37:25 JST 2005)

 裏技?

_8(Thu)

というわけで、プラネタリウムを作った。実に2時間。結構大変だった。

でも、見れた。感動。

いい買い物をした。


書籍のほうを見てみる。「大人の科学」と書いてあるのに子供向けな内容ばかりなのはなんでだろう。


gc にもバージョン番号があったのか,と誤読.


考えてみると,zsuper は要らないことに気づく.ステ.


なんとなく気になっていた root_iseq というものが要らない(別名のものがあればよい)ことに気づき,ステ.捨てたら大分気が楽になった.


ちょっと必要があって研究業績をまとめてみた(../tmp/g.pdf).

共著は多いが,自分はあまりやっていないことに気づく. うーむ.


さて,るびまの記事は業績に入るんでしょうか.関西勉強会でしゃべったりするのは入るんでしょうか.


懐中時計はあるので,さぁ時計男だ! と思ってもバイク通学だし.


ところで,やっとこさバイクの免許更新してきた.ほぼ何事も無く,すんなり.

一点.免許配布時,行ってみたらもう配布済みだったらしく,待てど暮らせど配られない.なんか呼びかけられて,もう配り終わったよ,と言われて直接渡される.顔写真でわかったらしい.講習が終わった後すぐに行ったんだけどなあ.


オブジェクト倶楽部のクリスマスイベント,学生無料だわーい,と思っていたら,懇親会は有料だった.しょぼーん.

さて,こちらの懇親会には行ったことがないんだけど,どうしよう.なんか登録がめんどいのが障壁に.


やばいなー.やーまに書く余裕が無い.主に心に.

_7(Wed)

yard というデバッガを教えてもらう。なんで有名じゃないんだろう。


BlackDogというものを知る。USBパワーで動作するLinuxマシンらしい。すげぇほしいかも。


やる気がなくなったんで(いつもだな...)、vncserver をいじってみる。inetd で起動するようにしたら、そもそも DISPLAY が何かわからんし。.vnc/xstartup も起動してくれないし(inetd のユーザは自分にしている)。.vnc/xstartup は vncserver が動かしてる気がしなくも無いが...。ということは、Xvnc じゃなくて vncserver を起動するようにすればいいのかなぁ。でも、inetd に bind してほしいのだから、なんか違うような気はする。

XDM なんか通さない(ローカルのVMwareにつなぎに行くので認証なんか要らん)ので -query オプションをつけないんだけど、だからなんかまずいのかなぁ。

手動で kde を立ち上げたらなんか動いた。


で、VNC をフルスクリーンモードにしたら、元に戻れないという驚愕の事実。がーん

Xvnc を殺して解決(?)。


うーむ、-query がない例が見つからない。

なんで shell script を inetd から立ち上げようとすると失敗するんだろう。


また next でエラーか....


でかいプレゼン買ってきた.

あとがきまで読んだ(あとがきだけ読んだ).こういうデザインなのねー.


アスペクト指向入門買ってきた.


ついでに,大人の科学 vol.9 買ってしまった.


shell のリダイレクトで,

  • foo > bar 2>&1
  • foo 2>&1 > bar

の違いを知る.>&- とかも知る.何に使うか知らんが.

入門UNIXシェルプログラミングを読んでるんだな.shell 難しい.Ruby よりよっぽど難しいぜ.


1.times{
  while true
    class C
      begin
        break
      ensure
        break
      end
    end
  end
}

こんなのはなにが返るべきなんかねぇ(実は自明)。


p(while true
  class C
    begin
      break :foo
    ensure
      break :bar
    end
  end
end)

こんなのはどうですかね。ちなみに YARV ではエラーになってしまった。


原因はわかった。根本的に YARV ではこれ対応してないわ。どうしよ。

break があると stack を撒き戻すんだけれど、この例では撒き戻してはいけない。

で、撒き戻しを抑止する方法なんだが、コンパイル中に適切にその命令でのスタックの深さを測らないといけない。さて、これは可能か。いや、可能なんだけど、自動生成系と絡めたとき、可変長(命令オペランドで指定される数)、スタックを pop するような命令だと、きちんとできるようにするためには工夫が必要。しかもオペランド融合、命令融合したときにはもう目が当てられないわけです。さぁどうしてくれる(知るかよ)。


あぁ,一ついいアイデア,というか抜け穴を考えた.実行時に戻すスタックポインタを計算すればいいんだ.

何を当たり前のこと言ってるんだこの野郎,と思われるかもしれないけれど,一応,もうちょっと考えている.この問題は,SP を 0 じゃなく,もうちょっと進んだ状態にする,という話.

recv.method(a, begin
                 raise
               rescue
                 1
               end)

#=> このとき,スタックはこんな感じになる

recv, a # recv.method(a までやった
recv, a, self # recv.method(begin; raise までやった
recv, a, 1 # ) までやった

#=> 今の YARV だとこうなる
recv, a # recv.method(a までやった
recv, a, self # recv.method(begin; raise までやった
1 # ) までやった. つまり,recv, a が pop されてしまう

さて,ここでは例外から帰ってきたとき, recv と a は pop されて欲しくないので SP は 2 の位置からスタート,ということになる.つまり,2 という値が欲しい.

というわけで,begin の前に,sp の値(cont_spとしよう)をどこかに保存してあげればいい.ここで,例外テーブルにじかに書き込んでやればいいわけだ.多分.

一度書き込んでしまえば後はスルーしてもいいので,自分自身を nop に書き換えてしまえばよい.cont_sp を保存する必要がある場面なんて殆ど無い(と信じたい)ので,この命令自体の頻度は低い.

というわけで,コンパイラに手を入れずに簡単に対応できるね,って考えてみたんだけど,やっぱりコンパイル時点で決まったほうが気持ちいいなぁ,と思う今日この頃です.はい.

(この cont_sp 保存命令が必要か必要じゃないか,という判断には,そもそも cont_sp が 0 or over を判断しなくてはいけなくて,結局コンパイル時にスタックの位置を考えてあげなければいけない,という)

さて,簡単に出来ることだろうか.


node を traverse するときに(命令オペランドは決定するので)スタックの位置は決定するような気はする.だから,融合操作(とスタックキャッシング)をしなければスタックの位置はわかりそうである.

さて,融合操作のときにうまくそれが効くか.なんとなくうまく行きそうな気はするなぁ.オペランド融合ではスタックの位置は変わらないし,命令融合だったら,融合する前と後でつじつまが合えばいいのだから.


というわけで,基本命令についてきっちりスタックの位置がわかっているのならば,なんとかなりそうだということがわかった.

あとは,基本命令のスタックの位置の解析を手動でやるか,手でやるか,だなぁ.可変長の命令じゃなければ簡単だから,大部分のふつーの命令は自動で,そうじゃなければ手動でやるか.


Ruby を紹介するためにはどうすればいいのか,入門書を勉強してみるか.というわけで,楽しい Ruby を買うか.RubyWay とかも一応買わないといけないんだろうかなぁ.


勉強のために(何の)でかいプレゼンを読む.読みやすいですね.

よくかけてるけど,よくかけてるから,これしか読まない人が出てこないか不安.これはふつりなも同じ印象なんだよな.うーん.

ちなみに,最初のページの写真は dan さんが撮った写真です.こんなデジカメでも書籍に貼れるんだなぁ(でもやっぱりぼけてるな).


なんで読みやすいんだろう.

  • 口調
  • フォント(字の大きさ含む)
  • 行間

あと,短いのでゴールがわかりやすいってのもあるかなぁ.

_speakillof(Fri Dec 09 03:03:06 JST 2005)

 yard は使ったことがあります。実は結構で好きです。yard に興味があるなら http://www.mind.sccs.chukyo-u.ac.jp/~yyuu/rem/ はどうでしょう?

_shiro(Fri Dec 09 07:45:12 JST 2005)

継続はスタック全セーブ/リストアなんでしたっけ。Gaucheはフレームをひとつづつセーブして、継続起動時はヒープのフレームを直接参照するので、関数の頭でのspと途中の時点でのspとの間隔はコンパイル時に決まりません。この例のようなケースでは引数式の評価の前に継続フレームのpushを入れています。

_ささだ(Fri Dec 09 11:24:40 JST 2005)

 yard とか rem とか興味深いですね。もっとメジャーになればいいと思うのですが(誰か記事書かないかな...)。

_ささだ(Fri Dec 09 11:33:31 JST 2005)

 そうか、Schemeでは例外の起動は継続の呼び出しになるんですね。YARVでは簡単のためにスタック全セーブ / リストア にしてしまおうかと思っています(マシンスタック / YARVスタック双方)。Rubyでの例外発生とRubyでの継続実行のコストは違いがあるべきだと思っています(前者が圧倒的に高速でないといけない)。デザイン的には同じことを違う方法を使って行うので気持ち悪いんですが。

_なかだ(Fri Dec 09 12:25:39 JST 2005)
recv.method(a, &begin
                 foo(*ary, &raise)
               rescue
                 nil
               end)

みたいのは?

_6(Tue)

YARV、それなりに対応できているような気がするので評価などしてもらえるとうれしいです。スレッドとかシグナルとか、まだいい加減だけど。

IO は全部書き換えないと駄目かなぁ。


なぜか ICO を終わらせたりするんだけれど、はて2回目をやるべきか。 印象としては手をつなぐゼルダの伝説。


連載って毎号続けないといけないんだっけ。


IPA:未踏ソフトウェア創造事業:2005年度下期未踏ソフト に、応募件数が出ている。

高田さん、ねらい目? うちの先生への応募が増えてるな。


連載の話を出したのは、るびまを念頭に考えてます。

るびまの連載記事は、毎号出すから連載って意味じゃなくて、一度で終わらないとか、続き物という意味で連載にしてるんですが、さて毎号出せなければ、出せなかった分は「休載」ということになるんだろうか、と思って。

ちなみに、やーまには先月出さなかったけど休載とは思ってない人。いや、次回予告を裏切ったので、休載かなぁ。罪悪感は全然無いんだけど。


pr = lambda{
  p self
}

pr.call
1.instance_eval{
  pr.call
}
1.instance_eval(&pr)

ブロックの中の self が変わるのは気持ち悪いなあ(そういうもんだけど)。

_向井(Tue Dec 06 13:17:14 JST 2005)

 二周目はキャラの台詞の字幕が日本語になりますよ

_ささだ(Tue Dec 06 14:54:53 JST 2005)

 らしいっすね(攻略ページで見た奴)。

_るだらけ(Tue Dec 06 21:06:10 JST 2005)

 モーニングを購読してますが毎号載ってる話は少ないですね。人気が出てくるとスグに隔週になってます。要は人気が(ry;;

_5(Mon)

while
  begin
    break
  ensure
    break
  end
end

が動かない。うーむ。


begin
  while true
    begin
      break
    ensure
      p :ensure
      raise
    end
  end
rescue
end

今度はこれが動かない。理由はわかったんだけど、どうしたもんかな。

while cond
  begin
    BODY
    break
  ensure
    ENSURE
    raise
  end
end

とやると、

  jump WHILE_NEXT
WHILE_REDO:
  eval BODY      # begin 部
  eavl ENSURE    # # ensure 部
  send raise     # #
  put nil        #
  jump WHILE_END #
  eval ENSURE      # ensure 部
  send raise       #
WHILE_NEXT:
  eval cond
  if WHILE_REDO
WHILE_END:
----
ENSURE:
  ENSURE
  raise

とコンパイルされる。つまり ENSURE の部分を while の BODY の後ろにコピーしてるんだけど、そうすると、ENSURE の部分が begin 部に含まれてしまって、ensure 部の中で raise したものが、ensure で捉えられる(ややこしい)ことになる。さて、こいつをなんとかするにはコピーする場所を変えるか、キャッチするアドレスをいじるかしないといけないのだけれど、さてどうしたものかな。

ensure 部の中から脱出するのを真面目に考えてないからいけないんだけれども。やれやれ。


■案1

  jump WHILE_NEXT
WHILE_REDO:
  eval BODY      # begin 部
  eavl ENSURE      # ensure 部
  send raise       #
  put nil        #
  jump WHILE_END #
  eval ENSURE      # ensure 部
  send raise       #
WHILE_NEXT:
  eval cond
  if WHILE_REDO
WHILE_END:
----
ENSURE:
  ENSURE
  raise

■案2

  jump WHILE_NEXT
WHILE_REDO:
  eval BODY      # begin 部
  jump ENSURE1
ENSURE_RET:
  put nil        #
  jump WHILE_END #
  eval ENSURE      # ensure 部
  send raise       #
WHILE_NEXT:
  eval cond
  if WHILE_REDO
WHILE_END:
...
  end
ENSURE1:
  eavl ENSURE      # ensure 部
  send raise       #
  jump ENSURE_RET

----
ENSURE:
  ENSURE
  raise

どう考えても案1が綺麗だよなぁ。でも、テーブルいじるの面倒だし。

もう一案。この領域はスルー、って教えてあげるのはどうだろうか。うーむ、無理かな。


この辺は、ensure がネストしてたりとかbreakが何個もあったりすると泥沼。どうしたもんかね。


というわけで、案1、コンパイラで頑張る、を選択。

なんというか、無駄に break の対応にコンパイラの行数が。

while true
  begin
    p 1
    break
    p 2
    break
  ensure
    p :ensure
  end
end

は、次のようになる。

== disasm: <ISeq:<main>@../yarv/test.rb>================================
== catch table
|type: en, st: 0000, ed: 0010, sp: 0000, cont: 0054
== disasm: <ISeq:ensure@../yarv/test.rb>================================
local scope table (size: 1, argc: 0)
[ 1] __$!
0000 putself                                                          (   9)
0001 putobject        :ensure
0003 send             :p, 1, nil, 0, <ic>
0009 pop
0010 getdynamic       1, 0
0013 throw            0
|type: en, st: 0020, ed: 0032, sp: 0000, cont: 0054
== disasm: <ISeq:ensure@../yarv/test.rb>================================
local scope table (size: 1, argc: 0)
[ 1] __$!
0000 putself                                                          (   9)
0001 putobject        :ensure
0003 send             :p, 1, nil, 0, <ic>
0009 pop
0010 getdynamic       1, 0
0013 throw            0
|type: en, st: 0042, ed: 0044, sp: 0000, cont: 0054
== disasm: <ISeq:ensure@../yarv/test.rb>================================
local scope table (size: 1, argc: 0)
[ 1] __$!
0000 putself                                                          (   9)
0001 putobject        :ensure
0003 send             :p, 1, nil, 0, <ic>
0009 pop
0010 getdynamic       1, 0
0013 throw            0
|type: br, st: 0000, ed: 0057, sp: 0000, cont: 0057
|type: nx, st: 0000, ed: 0057, sp: 0000, cont: 0054
|type: rd, st: 0000, ed: 0057, sp: 0000, cont: 0000
|------------------------------------------------------------------------
local scope table (size: 1, argc: 0)

0000 putself                                                          (   4)
0001 putobject        1
0003 send             :p, 1, nil, 0, <ic>
0009 pop
0010 putself                                                          (   9)
0011 putobject        :ensure
0013 send             :p, 1, nil, 0, <ic>
0019 pop
0020 putnil
0021 end                                                              (   5)
0022 putself                                                          (   6)
0023 putobject        2
0025 send             :p, 1, nil, 0, <ic>
0031 pop
0032 putself                                                          (   9)
0033 putobject        :ensure
0035 send             :p, 1, nil, 0, <ic>
0041 pop
0042 putnil
0043 end                                                              (   7)
0044 putself                                                          (   9)
0045 putobject        :ensure
0047 send             :p, 1, nil, 0, <ic>
0053 pop
0054 jump             0                                               (   2)
0056 putnil
0057 end                                                              (   9)

手で dead code eliminationするとこうなる。

== catch table
|type: en, st: 0000, ed: 0010, sp: 0000, cont: 0054
|type: en, st: 0020, ed: 0032, sp: 0000, cont: 0054
|type: en, st: 0042, ed: 0044, sp: 0000, cont: 0054
|type: br, st: 0000, ed: 0057, sp: 0000, cont: 0057
|type: nx, st: 0000, ed: 0057, sp: 0000, cont: 0054
|type: rd, st: 0000, ed: 0057, sp: 0000, cont: 0000
|------------------------------------------------------------------------
local scope table (size: 1, argc: 0)

0000 putself                                                          (   4)
0001 putobject        1
0003 send             :p, 1, nil, 0, <ic>
0009 pop
0010 putself                                                          (   9)
0011 putobject        :ensure
0013 send             :p, 1, nil, 0, <ic>
0019 pop
0020 putnil
0021 end                                                              (   5)
...

さて、Array#each、Integer#times、Range#each だけ を高速化したんだけれど、他に高速化しないといけないような、よく使うものってあるかな。

まぁ、フレームワークみたいなものは作ったんだから、どうしても、ってところをちょいちょい追加できるってことでよしとしとこう(拡張ライブラリのようになっている)。

ちなみに、Hash#each は Ruby レベルで書くことは不可能なのでやらない。こればっかりはなぁ。


さて、あとは visibilityなんだが...。


ちなみに、今回のblock inlining は現状のRubyでも十分通用する話。でも、速くはならない。


ところで、

begin
  BLOCK
rescue
  RESCUE_BLOCK
ensure
  ENSURE_BLOCK
end

というコードがあったとき、RESCUE_BLOCK を rescue 部、ENSURE_BLOCK を ensure 部と呼ぶのは問題ないと思うんだけど、BLOCK をなんというか、いつも戸惑う。YARV の説明などで、とくに戸惑う。

候補:

  • begin 部(begin/end だけで式になるからなぁ)
  • (Java で言う)try 部(Java / C++ より。だけど、Rubyだからなぁ)
  • 例外について保護された部分(冗長)

なんというのがいいんでしょうかねぇ。


goooo(ry)ooogleをYahooで検索 に爆笑してしまったので自分もやってみた。google で yahoo

["yah", 249000]
["yaho", 60700]
["yahoo", 35800000]
["yahooo", 35300]
["yahoooo", 10800]
["yahooooo", 3590]
["yahoooooo", 1820]
["yahooooooo", 1610]
["yahoooooooo", 2230]
["yahooooooooo", 954]
["yahoooooooooo", 1310]
["yahooooooooooo", 636]
["yahoooooooooooo", 488]
["yahooooooooooooo", 472]
["yahoooooooooooooo", 400]
["yahooooooooooooooo", 374]
["yahoooooooooooooooo", 462]
["yahooooooooooooooooo", 215]
["yahoooooooooooooooooo", 191]
["yahooooooooooooooooooo", 127]
["yahoooooooooooooooooooo", 160]
["yahooooooooooooooooooooo", 141]
["yahoooooooooooooooooooooo", 382]
["yahooooooooooooooooooooooo", 330]
["yahoooooooooooooooooooooooo", 298]
["yahooooooooooooooooooooooooo", 355]
["yahoooooooooooooooooooooooooo", 291]
["yahooooooooooooooooooooooooooo", 266]
["yahoooooooooooooooooooooooooooo", 176]
["yahooooooooooooooooooooooooooooo", 206]
["yahoooooooooooooooooooooooooooooo", 216]
["yahooooooooooooooooooooooooooooooo", 405]
["yahoooooooooooooooooooooooooooooooo", 197]
["yahooooooooooooooooooooooooooooooooo", 171]
["yahoooooooooooooooooooooooooooooooooo", 104]
["yahooooooooooooooooooooooooooooooooooo", 130]
["yahoooooooooooooooooooooooooooooooooooo", 124]
["yahooooooooooooooooooooooooooooooooooooo", 99]
["yahoooooooooooooooooooooooooooooooooooooo", 128]
["yahooooooooooooooooooooooooooooooooooooooo", 110]
["yahoooooooooooooooooooooooooooooooooooooooo", 78]
["yahooooooooooooooooooooooooooooooooooooooooo", 67]
["yahoooooooooooooooooooooooooooooooooooooooooo", 99]
["yahooooooooooooooooooooooooooooooooooooooooooo", 54]
["yahoooooooooooooooooooooooooooooooooooooooooooo", 44]
["yahooooooooooooooooooooooooooooooooooooooooooooo", 43]
["yahoooooooooooooooooooooooooooooooooooooooooooooo", 36]
["yahooooooooooooooooooooooooooooooooooooooooooooooo", 185]
["yahoooooooooooooooooooooooooooooooooooooooooooooooo", 27]
["yahooooooooooooooooooooooooooooooooooooooooooooooooo", 28]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooo", 21]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooo", 40]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooo", 81]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooo", 48]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooo", 26]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 39]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 17]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 21]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 11]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 12]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 11]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 10]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 30]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 9]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 6]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 6]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 3]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 7]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 8]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 6]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 8]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 4]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 4]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 6]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 5]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 3]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 8]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 5]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 4]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 4]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 5]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 3]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 3]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 2]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 1]
["yahooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0]

0 になったかと思えばまた復活する。


IRC でも昔ツンデレshellの話はあったんだけれど、ツンデレは基本的に stateful なので、stateless な shell はあわないだろう、と思った。

(そこでログイン回数とか history の長さとか、時間とか...)


今のままだと caller binding 出来ないことに気づく。参ったな。

_まつもと(Mon Dec 05 20:29:26 JST 2005)

 本体とかbody部とか呼んでます

_ささだ(Tue Dec 06 11:47:24 JST 2005)

 私もそう呼びますかね。

_4(Sun)

なんでRubyはwhile文ひとつとってもとても難しいかね。

こう、どの辺が難しいかというと、

while cond
  class Foo
    next bar
  end
end

を実現することあたりが難しい。

_fuck my suck(Tue Jul 24 02:35:17 JST 2007)

 lol1

_e(Tue Jun 28 14:05:01 +0900 2016)

 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

_e(Tue Jun 28 14:05:04 +0900 2016)

 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

_3(Sat)

お台場産総研でBlueGeneを見学させていただきました.とても寒かったです(空調).


Binary2.0 でした.どれも面白かったですが,時間が無かったせいもありますが,もっと深い話を聞きたかったものです(正直,どれもこれも消化不良な.一人一時間くらいあっても良かったんではなかろうか(話者にそんな暇はなさげ)).それだけ凝縮されていた話ということだったんでしょう.

りょうせいさんにAXEの社長さんという方を紹介してもらったんですが,ぱっと面接だったらしく,すぱっと不合格になりました.というわけで,就職活動失敗.ああいう人じゃないと社長さんは務まらないんでしょうねえ.

2次会,まごまごしてしまってすみません.とくにartonさんごめんなさい.


というわけで,遅いので西山さんとそれから水島君も一緒に研究室へ.


衝撃,千葉先生はこんな本まで書いていた>http://www.meteo-intergate.com/catalog/link/kobetsu/5891.htm


水島君にEclipse のプラグインの話とGroovy組み込みについての話を聞く.


私はよく FPGA ボードという言葉を聞きますね.


やってみたかった block の inlining (Integer#times と Range#each だけ)をやってみた.繰り返し自体はとても速くなったと思う.

意味を保つために色々な工夫をした.命令が2個ほど増えた.ついでに,バグをつぶした.

かなり気持ち悪い書き方になっている部分があるため,なんとかしたいとは思う.ファイルを分けるかな,やっぱり.

この辺の話は PRO には出せなさそうだけど,どっかでまとめてみたいものだなぁ.どこかいいところありませんかね.YARV Maniacs では書くと思うけどね(続いてたら).でも,Rubyオンリーだから,論文としての価値は無いかな.


Range#each インライン化をすることによって,例えば Range#map (Enumerable#map)は C で書くよりも Ruby で書いたほうが速くなった(2.0 秒が 1.2秒くらい.相当速い).


さて,ここで問題になるのは,例えば Haskell の prelude.hs みたいなものが Ruby には無いため,Ruby Scriptで書いた組み込みメソッドなどは定義できないこと.

どうしたもんですかね.C で文字列に書いて eval?

_arton(Sat Dec 03 12:30:27 JST 2005)

 なんで? 気にしてないというか、「とくに」ってことは無いと思うよ。

_ささだ(Sat Dec 03 15:55:07 JST 2005)

 いや,寒いといっていらしたのに,なかなか決まらなくて申し訳なかったなあ,と.

_maeda(Sun Dec 04 12:11:44 JST 2005)

C で書くよりも Ruby で書いたほうが速くなった

素晴らしいじゃないですか。

Haskell の prelude.hs みたいなものが Ruby には無い

暗黙の裡に読めばいいじゃない。あんまり大きくなると、処理系の起動が遅くなっちゃうかな。

_ささだ(Sun Dec 04 21:55:55 JST 2005)

 やっぱそうなりますかねぇ。

_maeda(Sat Dec 10 11:44:47 JST 2005)

あとは、

  • 「すでに読んだ状態」のヒープイメージを作っておいてmmap。
  • コンパイル結果のVMコードを、Cの定数として配列に入れとく。起動時にリンク。
  • AOTでCにコンパイルしてリンク。

とか。

_2(Fri)

今日はいいことがあった。よかった。これで、通算4本。

まぁ、数は関係ないけど。


今日はBinary2.0の前にBlue geneデスヨ(中尾さん、どうもありがとうございます)。SC2.0ですよ、ってSCは2.0じゃきかねーよな。(SC: SuperComputing)

_1(Thu)

TUNTUN という名前に爆笑したおやつ時.JIAJIAを意識してるんだろうが.


スタックポインタをチェックするコードを書いたらなんか色々エラー.うーむ.


Komodo 3.5 が出たようなので、ちょっと試してみた。何気なく GUI ビルダーがあったので cygwin 版の Ruby で試してみる。Tk なんて入れた覚えが無いからどーせできないだろうーと思ってたら、ふつーに動いた!

動くことを知りませんでした。スゲーぜ cygwin。

で、Komodo 3.5 ですが、色々頑張ってるようです。メソッド名補完とかも怪しげに動いてます。まぁ、$300 払うかは、どうなんだろう。プロフェッショナル版の機能を使いこなしてないだけとも。


Professional と Personal は、商用アプリ開発に使えるか使えないか、が違うのかな。

_blah(Mon Jun 16 20:58:24 +0900 2008)

 go suck it

Sasada Koichi / sasada@namikilab.tuat.ac.jp
$Date: 2003/04/28 10:27:51 $