トップ «前10日分 最新 次10日分» 追記

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ToDo:


2008-06-02

_ おお

ありがとうございますー

http://homepage1.nifty.com/herumi/diary/0806.html#2

とりあえずそのへんのヘッダは別にいらないっぽかったので コメントアウトして固めて上げなおしておきました。

でも無いってのもへんな話なのかな Ruby わからん

(23:34)

_ tamarin

今さらながら斜めよみした。

http://www.dodgson.org/omo/t/?date=20080510#p02

おもしろいなぁ。 んでも何か所か疑問というかよくわからんとこがあった。

LIRを生成しつづけるとメモリがあふれる、 ってとこだけど、プアな環境では、ってことかな。 LIRとnative codeでそれほどサイズに差があるとは思えないし。

あと関数内にtraceしてったらそのままインライン展開されるおー とかホンマかーという。 もろもろ問題ありそうな気がするけど その気が正しいかどうかもよくわからん。

http://blog.mozilla.com/dmandelin/2008/05/23/tamarin-tracing-internals-iii-lir/

(23:40)

本日のツッコミ(全2件) [ツッコミを入れる]

_ omo [もろもろありそうですね。 とりあえず再入可能ではないらしいし・・・ http://blog.mozilla.co..]

_ shinh [おお見落としてましたありがとうございます > 再入不可 コメントの "TT isn't re-entrant ..]


2008-06-01

_ ふりー

http://twitter.com/yanbe/statuses/822305215

ただしい。

でも、じゆーを守ろうとすると一時的にふじゆーになるのは 普通にごく当たり前なことだとおもう。

(04:00)


2008-05-31

_ C=1

1.9.0-0, 1.9.0-1

== disasm: <ISeq:<compiled>@<compiled>>=================================
0000 putobject        1                                               (  16)
0002 dup
0003 putnil
0004 setconstant      :C
0006 leave

== disasm: <ISeq:<compiled>@<compiled>>=================================
0000 putobject        1                                               (  16)
0002 dup
0003 putcbase
0004 setconstant      :C
0006 leave

とりあえず putcbase ってなんなのという問題がですね。 そして vm_get_ev_const もよくわからんのだよ

(03:18)

_ cbase

http://i.loveruby.net/ja/hack/frame.html

とりあえず self.type でそれなりに動きそう。 ていうか問題は self がちゃんと実装されてないことすね。

(04:17)


2008-05-29

_ マジスパ

http://d.hatena.ne.jp/ytqwerty/20080525#p1

行くんなら呼んでくだされば飛んでいくのにという。 あと下北は迷うと思う。何年たっても迷う。 あとマジスパは体にいいどころか基本的に毒物だと思うあれは。 虚空100らへんあたり喰うと確実に腹下すし、 アクエリアス喰ってる最中に腹壊してる感じがした。 たぶん体がこれは毒だー出せー出せーと緊急指令を出してるんだと思い込んでいる

(00:54)

_ 体調

ずっと悪いが行けないほどでもないのがにんとも。 出社した方がラクに補食できるというのもにんとも

(08:36)

_ 体調

なんかよく考えると次々症状が変わってる気がする。

最初は熱っぽい、だるい、頭がいたい、って感じで、 まぁ普通に仕事とかいう感じじゃなかった。 その後に熱系はおさまりつつのどが痛くなって、 次にセキとハナが出るようになった。 セキとハナと平行して腹壊して、下痢っぽくなった。 で今はセキハナなくなったけど腹壊し&&胃がむかついたり吐き気とか。

(20:20)

_ STM

は流行らないと勝手に素人考えで考えてるので流行って欲しくない。 面白いかどうかとかよく知らないけど、 単に失敗しなくなるだけの技術ってもえないとかいう個人的なアレと、 スレッドとかどうでもいいよという個人的なアレから 基本的に来てるわけだけど。

一応僕の考えによると、 みんなスレッドプログラミング難しいとか言ってるけど、 あるルールを守れば全然難しくない。 そのルールっていうのは「スレッドを使わない」 っていう簡単なものなんだけど、 なかなかこんな簡単なルールを守れない子もいるらしいので、 例外が2つくらいたぶんある。

outputs = Array.new(N)
threads = []
N.times do |i|
  threads << Thread.start(i) do |t|
    # なんかして output[t] に入れる
  end
end
threads.each{|th|th.join}

みたいに明らかにそれぞれが独立で動くパターンか、 タスクキュー的なのを挟んで生産者消費者の形になるパターン。 http://shinh.skr.jp/m/?date=20080424#p01

前者はまぁロックとかいらんし、 後者もタスクキューだけロックすりゃ基本的に大丈夫なはずなので 全然難しくない。 まぁログ吐くとか、共通部分もちょっとはあるだろうけど、 まぁそこだけ気をつければOKなわけで、 まぁそんなにむずかしくはならんと思う。

その二つのパターンの時も、 パフォーマンス的をすごく考えなきゃいけない事情とかがないなら、 プロセスわけちゃってもいい。 前者のパターンは別のマシンで動かしたりとかしやすいパターンだし、 後者は Unix pipe という強力で簡単な物体が助けてくれるはず。

でまぁ僕のルールを守らずに 並列性がそんなに高くないシーンでスレッドを使うと、 まぁ大変なことになるんだけど、 そういうシーンってのは、 スレッドを無理に使ってるってわけで、 速度が欲しいシーンだと思うんだけど、 そんなシーンだと STM は遅くなるんじゃないのかな。

あと関係そんなないけど、デッドロックが起きるから スレッドむずかしいとか聞くことがあるけど、 あれもおかしいと思う。 デッドロック起きたら gdb でアタッチして バックトレース見たら終わるやろという。 レースコンディションが困るというのはその通りだと思う。 今度これ読もう: http://valgrind.org/docs/manual/hg-manual.html#hg-manual.data-races.summary

でまぁ話戻して結局スレッドプログラムが本当に必要で、 かつスレッドプログラムが難しいプログラムのドメインって あんまり知らないんだよなーということがあって、 たぶん並列 GC だとか、プログラム言語作るとか、 すごい基本的なライブラリ作るとか、 要は言語処理系まわり以外にそういうドメイン思いつかんという。 でもそいうの作るのって一握りの人たちなので、 そんなこんなでスレッドってそんなに難しいのかなーと思っている。

たぶんポインタくらいの難易度なんじゃないかな。 意味不明な比較だが。

あーでも HPC の世界とか全く知らんので知らん。

(22:44)

_ もちろん

単に複雑なプログラムを楽しみたいというなら同意するので 存分にスレッド地獄を味わったらいいと思う。 しかしそんな人は STM とかいらないよね?

(22:46)

_ mprotect

やめたらだいぶ速くなった。

Ruby 1.9

> ruby1.9 bench_loop.rb
      user     system      total        real
for:     3.400000   0.010000   3.410000 (  3.431349)
times:   0.980000   0.000000   0.980000 (  0.976049)
upto:    0.920000   0.000000   0.920000 (  0.913937)
while:   0.480000   0.000000   0.480000 (  0.488412)

yajit

for:   SEGV
times: ./rubyjit.rb hoge.rb  0.52s user 0.01s system 98% cpu 0.532 total
upto:  ./rubyjit.rb hoge.rb  0.52s user 0.00s system 97% cpu 0.531 total
while: ./rubyjit.rb hoge.rb  0.19s user 0.00s system 96% cpu 0.199 total

これが機械語の力だー(SEGV含む)

http://shinh.skr.jp/m/?date=20080525#p07

適当にひっこぬいてきた Euler 55 をいじったコード

> time ruby1.9 euler55.rb
249
ruby1.9 euler55.rb  1.75s user 0.00s system 98% cpu 1.785 total
> time ./rubyjit.rb euler55.rb
249
./rubyjit.rb euler55.rb  1.66s user 0.01s system 99% cpu 1.677 total

こっちも勝ったか。

とりあえず速いとこ benchmark モジュール動くようにしよう。 あとなんか OSX とかでも試そうと思ったら OSX mremap 無いのねー

(23:36)

本日のツッコミ(全1件) [ツッコミを入れる]

_ YT [いやその昼に行こうと決心して晩飯になってしまうような体調だったわけでしてそのゴメンナサイ。]


2008-05-28

_ 1.9.0-0 からの流れ

  • 1.9.0-0: 81個
  • 1.9.0-1: emptstack が消えて adjuststack が発生
  • current: putcbase が発生

(07:11)

_ toregexp

げー引数の数変わってる…

(07:17)

_ colordiff.pl

いけてないな…

   @inputstream = <STDIN>;

の時点でアウトだろう

(00:01)

本日のツッコミ(全1件) [ツッコミを入れる]

_ Qxsvoswy [この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5..]


2008-05-27

_ mprotect(2)

man がおかしそうに思ったので レポートしたところ次回には反映されるとのこと

(01:36)

本日のツッコミ(全2件) [ツッコミを入れる]

_ kosaki [え? なんか間違ってるっけ? mmap()のmanが間違ってるのは最近LKMLで話題になってたけど]

_ shinh [SYNOPSIS の第二引数が size_t* になってるというような。]


2008-05-26

_ 本名

http://d.hatena.ne.jp/moira/20080502/1209734354

似た感覚があるなぁ。

匿名だとデタラメなことを色々したあげく バレて恥ずかしいことになりそうとかいう

(00:08)


2008-05-25

_ break

は throw で実現されてるらしい。

(03:44)

_ とりあえず

x86 の Ruby を作ろうと思った

なんか 404: http://www.ruby-lang.org/ja/

(19:31)

_ ruby x86

でけた。適当にとりあえずこんなかんじでできた。

% ./configure --target=i386-linux --program-suffix=86
% make CFLAGS='-fPIC -O -g -m32' LDSHARED='gcc -m32 -shared -Wl,-R'
% sudo make LDFLAGS='-m32 -L.' LDSHARED='gcc -m32 -shared' CFLAGS='-m32 -O -g' prefix=/usr/local/stow/ruby_x86 PREFIX=/usr/local/stow/ruby_x86 install-nodoc
% ruby86 -v
ruby 1.9.0 (2008-05-25 revision 0) [i386-linux]

でも extconf.rb 実行してもうまいこといかんので 手作業コンパイルするか。

(21:12)

_ Yajit::send

が悲惨すぎる。 結局スタックの積み方が逆なんだよというのが一番大きい問題である。

f(a, b)

とかを呼ぶ時、

push b
push a
call f

となって欲しいのだけど、 YARV は a から順に積んでくので、 順番を逆向きにしなくてはならない。

あーうーん rb_funcall を直接呼んでるのがアホなんだな。 rb_funcall2_rev とか作ってやれば良い気がする。

案外簡単だった。

(22:28)

_ あれ

アホな勘違いしたような

←若いアドレス
"%d\n"  4   self
  SP

なんだそのままじゃん。やはり rb_funcall 呼んでたヤツがおおまぬけ

(22:37)

_ やっぱ逆だろう…

落ち着いて考えるべき

YARV は

putnil
putstring "%d\n"
putobject 4

とかしてくるので、 CPU スタックの上では、

←若いアドレス
4  "%d\n"  self
SP

となる。向きを逆向ける必要はやはりあるだろー。

まぁ逆向けるコード入れることによって解決。 だいぶ簡潔になったのでやっと x86 に行く気が起きる、か

(23:08)

_ めも

i@u4 ~/wrk/yajit
> time ruby1.7 euler55.rb
zsh: correct 'ruby1.7' to 'ruby1.8' [nyae]? y
249
ruby1.8 euler55.rb  2.40s user 0.04s system 99% cpu 2.449 total
i@u4 ~/wrk/yajit
> time ruby1.9 euler55.rb
249
ruby1.9 euler55.rb  1.71s user 0.00s system 98% cpu 1.743 total
i@u4 ~/wrk/yajit
> time ./rubyjit.rb euler55.rb
249
./rubyjit.rb euler55.rb  1.66s user 0.10s system 99% cpu 1.775 total

(23:22)

_ x86

だと全部スタックで渡すので、

←
4 "%d\n" self
SP

とかなってるのだが、 受け手としては

←
argv argc mid self
SP

を期待しているため、

←
argv argc mid self 4 "%d\n" self
SP                argv

とすれば良いか。 つまり普通通りだな

あと argv の引っくり返しは C 側でやっても tail call が jmp になるので良さげ。

(23:35)


2008-05-24

_ あー

Xbox で斑鳩あるんだっけ…

http://d.hatena.ne.jp/KouMikage/20080523#p1

やりたいなあ Xbox 買いたす

(03:24)

_ getspecial

うあこれ $_ とかのためか…

ふーむむ

(03:59)

_ ほえー

def factor4(a)
  r = 1
  (1..a).each{|i|r *= i}
  r
end

local table (size: 3, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 3] a<Arg>     [ 2] r
0000 putobject        1                                               (  85)
0002 setlocal         r(2)
0004 putobject        1                                               (  86)
0006 getlocal         a(3)
0008 newrange         0
0010 send             :each, 0, block in factor4, 0, <ic>
0016 pop
0017 getlocal         r(2)                                            (  87)
0019 leave

local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s3)
[ 1] i<Arg>
0000 getdynamic       r(2), 1                                         (  86)
0003 getdynamic       i(1), 0
0006 opt_mult
0007 dup
0008 setdynamic       r(2), 1
0011 leave

def factor2(a)
  r = 1
  for i in 1..a
    r *= i
  end
  r
end

local table (size: 4, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 4] a<Arg>     [ 3] r          [ 2] i
0000 putobject        1                                               (  77)
0002 setlocal         r(3)
0004 putobject        1                                               (  78)
0006 getlocal         a(4)
0008 newrange         0
0010 send             :each, 0, block in factor2, 0, <ic>
0016 pop
0017 getlocal         r(3)                                            (  81)
0019 leave
local table (size: 1, argc: 0 [opts: 0, rest: 0, post: 0, block: -1] s0)
[ 1] <CFUNC><Rest>
0000 getdynamic       <CFUNC>(1), 0                                   (  80)
0003 expandarray      1, 0
0006 setlocal         i(2)                                            (  78)
0008 getlocal         r(3)                                            (  79)
0010 getlocal         i(2)
0012 opt_mult
0013 dup
0014 setlocal         r(3)
0016 leave

なのか。

えーと…

(06:55)

_ つまり

for の方はなぜこんな複雑なことになってしまうのかー。

あと

*a=1

local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 2] a
0000 putobject        1                                               (   1)
0002 dup
0003 expandarray      0, 1
0006 setlocal         a(2)
0008 leave

か。とりあえず expandarray の flag&4 は実装されてない… そして flag&2 もなにやら難解だな。

(07:03)

_ Ruby

スラッシュのオーバーライドってそいや組み込みには無いんか。

(10:30)

_ ニコニコのロースコアの人

なんか見たような名前で呼称されてるのを見てちょっと調べた。

つまるところ僕的にはエスプの人な TAC の人のとこの兄弟はみな異常というような話みたいだ。 HAL の人らしい。

(11:14)

_ Xbyak

       void protect(const void *addr, size_t size, bool canExec)
       {
#ifdef __linux__
               long pageSize = sysconf(_SC_PAGESIZE);
               char *p = (char*)(reinterpret_cast<size_t>(addr) & ~(pageSize - 1ULL));
               int mode = PROT_READ | PROT_WRITE | (canExec ? PROT_EXEC : 0);
               mprotect(p, ((size + (pageSize - 1)) / pageSize) * pageSize, mode);

これひょっとしてダメか。

size < pageSize でも p + size が page 境界をまたぐことはある気がする。

(16:56)

_ はてなー

なんかまわりに見たような名前が多くて面白い。

http://tophatenar.com/ranking/subscriber/78

via: http://d.hatena.ne.jp/lethevert/20080524/p2

odzさんに少しまけ、はともかく、 ABAさんに勝ってる!

(18:14)


2008-05-23

_ 週休4日

カゼにより予定より早期に実現した。

サボったんならともかく、割と本当にしんどいから全然意味ねーな…

今日は我が家がアリに侵略されてここはサバンナかと思った。 ゴミ袋を捨てたら平和的に退散してくれた。

あとカーネルなんちゃら行きたかったな。無念。 kzkさんにkosakiさんにf/tさんとかいろいろ珍しい感じ

(19:43)

_ ICFPC

2003年って車かー。なつかしいな。 http://d.hatena.ne.jp/ranha/20080523/1211474043

ちょっと ICFPC で上位どんくらいだったのかなと振り返ってみた。

  • 2007: 10/357/869 (2.8%)
  • 2006: 30/361 (8.3%)
  • 2005: 放棄
  • 2004: 86/361 (23.8%)
  • 2003: 20/90 (22.2%)

去年は卑怯なマグレでしかないので、 まぁ上位 10% くらいに入れるといいなぁという感じか。

(19:44)

_ TODO

名刺をつくる

(22:16)

_ Coda

http://d.hatena.ne.jp/suu-g/20080523/1211498211

って今どうなってるんだろう。

kernel 見たら fs/coda とかちゃんとあるね。

あとそいや 9p が何やらメインに入ったらしいとか言ってたなーと 思って見てみるとあった。

だからどうだという感じもするけど Documentation/filesystems/coda.txt は長い。 1600行とかある。

i@u4 ~/src/linux-2.6.25.4/fs/coda
> wc *
   12    43   324 Makefile
  116   354  2970 cache.c
  166   512  4219 cnode.c
   20    41   434 coda_int.h
  195   623  5259 coda_linux.c
  698  2163 17202 dir.c
  243   641  6331 file.c
  306   762  6700 inode.c
   95   304  2467 pioctl.c
  436  1173 10451 psdev.c
   53   136  1221 symlink.c
   71   173  1373 sysctl.c
  875  2690 23291 upcall.c
 3286  9615 82242 total

えっと

(23:35)

_ scope

i = 0
1.upto(3){|i|}
p i

みたいなののブロック内の YARV コード見て、 なんで getdynamic i, 0 なんだよ 1 だろボケ… とか思って少し悩んだ僕は ruby1.8 に毒されてると思う。

ところで getdynamic ?, 0 と getlocal ? って 何が違うのかしらという。

(23:59)

本日のツッコミ(全2件) [ツッコミを入れる]

_ ku-ma-me [getlocal はメソッドとか直下の変数アクセスな気がします。 def foo  x = 1  1.ti..]

_ shinh [がーんそうなんですね…ふーむとなると(mameさんの例の) getdynamic ?, 3 を getlocal ?..]


2024年
10月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
1.Qxsvoswy(2010-03-29 15:54) 2.やぎ(2008-07-22 19:39) 3.kosaki(2008-06-30 17:04)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h