び:log-2005

:log-2005

一応解決

(2005/11/24 15:19:21 PST): Gauche:Bugsにも書いたけど、Mac OS X や NetBSD 2.1.0_STABLEでSEGVが起きる問題は個人的にはほぼ解決した。問題の焦点は2つ。

スジ的に考えると後者はちょっと怪しい(だって不完全文字列って文字列中に\0含む可能性あるし)。が、効率を考えると前者に手を入れた方がいい。そもそも、Shiroさんも言っているように、完全文字列と不完全文字列との扱いはいまひとつ未整理という感じがあるし、そこを明確にしないと、後者だけうだうだ言っても始まらない。

今度はNetBSD 2.1.0_STABLE

(2005/11/10 05:21:25 PST): Mac OS Xではすっかり問題なくなったように見えていたのだが、何とNetBSD 2.1.0_STABLE上でCVS HEADをビルドし、sudo make install && make install-checkしたらSEGVで落ちやがった。coreを覗くと、何とまぁMac OS Xの時と全く同じ場所で落ちてる。ううむむむ... こりゃやっぱり何かあるな。

Mac OS X 10.4.3(8F46)続々々(Final)

CVS HEADが0.8.6になったのを見てビルドしてみたら、何とすんなりmake install-checkが通ってしまった。どういうこっちゃ。昨日までは確かに通らなかったのに... ということで、原因究明できぬまま自然解決してしまった。いいのかそれで...

Mac OS X 10.4.3(8F46)続々

腰を据えてコードを追う暇はないんだけど、気になるから合間についつい実験してしまう。 試したのは'CFLAGS=-g -O2'でビルドした本体に'CFLAGS=-g -O'でビルドしたlibcharconv.so、あるいはその逆という組み合わせ実験。結果は

- Gauche(-O2) Gauche(-O)
libcharconv.so(-O2) ×
libcharconv.so(-O) ×

ということで、たぶんldの再配置問題は関係なさそうな気配。何となく最適化レベルとの関係と落ちているのが文字列の操作の中であることから、アライメント問題か? という気がする。続きは夜にでも。

Mac OS X 10.4.3(8F46)続

(2005/11/01 14:47:29 PST): そういえばと思い出してCrashReporterのログを眺めてみた。

Host Name:      albatross
Date/Time:      2005-11-02 07:39:38.633 +0900
OS Version:     10.4.3 (Build 8F46)
Report Version: 3

Command: gosh
Path:    /usr/local/bin/gosh
Parent:  zsh [744]

Version: ??? (???)

PID:    928
Thread: 0

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0x00793000

Thread 0 Crashed:
0   libgauche.dylib     0x00220f0c get_string_from_body + 28 (string.c:244)
1   libgauche.dylib     0x00228cb8 Scm_PutsUnsafe + 120 (portapi.c:203)
2   libgauche.dylib     0x00228dfc Scm_Puts + 84 (portapi.c:195)
3   libgauche.dylib     0x00224788 string_print + 56 (string.c:1195)
4   libgauche.dylib     0x002310ac write_ss_rec + 1592 (write.c:538)
5   libgauche.dylib     0x00231510 Scm_Write + 872 (write.c:164)
6   libgauche.dylib     0x00258bf0 stdlib_display + 216 (stdlib.c:3943)
7   libgauche.dylib     0x00208f38 run_loop + 1196 (vm.c:885)
8   libgauche.dylib     0x002111a0 user_eval_inner + 564 (vm.c:2870)
9   libgauche.dylib     0x0024b27c Scm_Load + 164 (load.c:430)
10  gosh                0x000038a0 main + 1700 (main.c:408)
11  gosh                0x00002364 _start + 344 (crt.c:272)
12  gosh                0x00002208 start + 60

Thread 0 crashed with PPC Thread State 64:
  srr0: 0x0000000000220f0c srr1: 0x000000000200f930                        vrsave: 0x0000000000000000
    cr: 0x22002242          xer: 0x0000000000000004   lr: 0x0000000000228cb8  ctr: 0x0000000000220f6c
    r0: 0x0000000000228cb8   r1: 0x00000000bfffe8a0   r2: 0x000000000062d558   r3: 0x0000000000792f00
    r4: 0x00000000bfffe928   r5: 0x0000000000000000   r6: 0x0000000000000000   r7: 0x00000000000000ff
    r8: 0x00000000bfffeeb4   r9: 0x00000000002b013b  r10: 0x0000000000206a20  r11: 0x00000000002e362c
   r12: 0x0000000000220f6c  r13: 0x0000000000000000  r14: 0x0000000000000000  r15: 0x0000000000000000
   r16: 0x0000000000000000  r17: 0x0000000000000000  r18: 0x0000000000000000  r19: 0x0000000000000000
   r20: 0x0000000000298a94  r21: 0x00000000002e8a94  r22: 0x0000000000298a94  r23: 0x0000000000298a94
   r24: 0x00000000002b087f  r25: 0x00000000a0001b98  r26: 0x0000000000757a10  r27: 0x0000000000000000
   r28: 0x000000000062d560  r29: 0x000000000062d558  r30: 0x0000000000000100  r31: 0x0000000000228c4c

Binary Images Description:
    0x1000 -     0x4fff gosh    /usr/local/bin/gosh
   0xd4000 -    0xd7fff srfi-1-lib.so   /usr/local/lib/gauche/0.8.6_pre3/powerpc-apple-darwin8/srfi-1-lib.so
  0x205000 -   0x2abfff libgauche.dylib         /usr/local/lib/libgauche.dylib
  0x4c6000 -   0x4cafff srfi-13-lib.so  /usr/local/lib/gauche/0.8.6_pre3/powerpc-apple-darwin8/srfi-13-lib.so
  0x706000 -   0x70bfff libcharconv.so  /usr/local/lib/gauche/0.8.6_pre3/powerpc-apple-darwin8/libcharconv.so
0x8fe00000 - 0x8fe54fff dyld 44.2       /usr/lib/dyld
0x90000000 - 0x901b3fff libSystem.B.dylib       /usr/lib/libSystem.B.dylib
0x9020b000 - 0x90210fff libmathCommon.A.dylib   /usr/lib/system/libmathCommon.A.dylib
0x913ad000 - 0x913b5fff libgcc_s.1.dylib        /usr/lib/libgcc_s.1.dylib
0x913ba000 - 0x913dbfff libmx.A.dylib   /usr/lib/libmx.A.dylib
0x92cea000 - 0x92dd8fff libiconv.2.dylib        /usr/lib/libiconv.2.dylib

Gauche:MTと文字列で加えられた変更と何か関係があるのかな...

Mac OS X 10.4.3(8F46)

今朝10.4.3がリリースされたので、新しいPB17でアップデートをかけて再びデフォルトのCFLAGS(-g -O2)でビルドしてみた。全く同じ症状でSEGVを喰らう。'CFLAGS=-g -O'を./configureに渡して再ビルドするとOK。帰ったら古いPowerBookでも試してみよう。

(2005/11/01 13:28:44 PST追記): 古いPowerBook G4を10.4.3にアップデートしてGaucheをビルドし直してみたが、SEGVは喰らわないで普通にmake install-checkが通ってしまう。今度はMac OS Xのビルドナンバーは新しいPowerBook G4のものと同じ。どうなってるんだ??

New PowerBook G4 17"

ふと思い立って、configureにCFLAGS="-g -O"を渡して再ビルドしてみると、SEGV喰らわずにmake install-checkをクリアする。ますます微妙なところを踏んでいる気配。

New PowerBook G4 17"

2005/10/28 19:38:00 PDT: 新しいPowerBook 17インチが届いたので、「うひょひょ、画面が広いー」といい気になっていたのだが、CVS HEADのGaucheをビルド/インストールしてみたら、make install-check中charconvのテストでSegmentation Faultを起こす。make check中は起こさない。古いPowerBook 17インチではこの問題は発生せず、make check/make install-checkともに正常終了する。どちらもソフトウェアアップデートで最新にしてある。何が違うんじゃーとあれこれみて回ったら、

[新しいPowerBook]
% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.4.2
BuildVersion:   8E45

[古いPowerBook]
% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.4.2
BuildVersion:   8C46

ビルドナンバーが違うでやんの。とりあえずcoreを採取してgdbで覗いてみると...

% gdb /usr/local/bin/gosh /cores/core.4744 
GNU gdb 6.1-20040303 (Apple version gdb-413) (Wed May 18 10:17:02 GMT 2005)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "powerpc-apple-darwin"...Reading symbols for shared libraries .... done

#0  0x0022102c in GC_explicit_kind ()
(gdb) where
#0  0x0022102c in GC_explicit_kind ()
#1  0x00228dd8 in GC_explicit_kind ()
warning: Previous frame identical to this frame (corrupt stack?)
#2  0x00228dd8 in GC_explicit_kind ()
#3  0x00228f1c in GC_explicit_kind ()
#4  0x002248a8 in GC_explicit_kind ()
#5  0x002311cc in GC_explicit_kind ()
#6  0x00231630 in GC_explicit_kind ()
#7  0x00258d10 in GC_explicit_kind ()
#8  0x00209058 in GC_explicit_kind ()
#9  0x002112c0 in GC_explicit_kind ()
#10 0x0024b39c in GC_explicit_kind ()
#11 0x000038a0 in Scm_VMApply2 (proc=0x0, arg1=0x62d570, arg2=0x62d578) at vm.c:2748
(gdb) 

GCまわりの問題らしい。ううむ... しかもさらに奇妙なことに、

% cd ext/charconv
% make install-check
           : [中略]
passed.
% make install-check >/dev/null
Testing charconv ...                                             make: *** [install-check] Segmentation fault (core dumped)

... 何のこっちゃ。わけがわからない。

Reasoned Schemer届いた

夜帰宅したら届いていた。前2冊よりも薄いから持ち運びに便利(そんなに差があるわけじゃないが)。ここんとこ忙しいから、出張のお供にでもするか。

Reasoned Schemerその後

まだ来ねぇ。Amazonの出荷予定は10/14-16のまま。せめて過ぎちまったら「未定」に変えるとかすりゃいいのに。出版が遅れてるのかねぇ...

util.match 初体験

何だかよくわかっていなかったので今まで手を出さずにいたutil.matchを使ってみた。これめちゃめちゃ強力。入り組んだS式を解析したりいじったりがとても簡単になる。その昔はじめてsedやawk、perlの正規表現に触れたときの「何でも正規表現でできちゃいそうな気分」を思い出した。何でもS式でやれちゃう病発症かしら(笑)。

Boehm-gc on NetBSDその後

Hansから予想通りGC_restart_world()を同期的にしたことについてツッコミ。

どれもこれも至極もっともな話。でそれに対する返答。

俺の壊れた英語じゃあどこまで伝わったか不明。つーか、俺がNetBSDで発生するSIG_SUSPENDのロストを現象面でしか理解してないのが一番の問題だな。でも、正直なんでロストするのかわからなかったんだもの。

SLIME de Scheme48

Emacs上のCommon Lisp統合環境として最近よく話題に上るSLIMEをScheme48に対しても使えるようにしたSLIME48ってのがあるらしい。実は「SLIMEはすごいらしい」という噂話を聞いて、「それってGaucheでも使えるようにならんかな」と思いソースを覗き始めたところだったので、先を越された気分。まぁ俺の場合「思いつくだけ」でなかなか行動に移らないのだけれど。

化けるかな

ということで?が?になっちゃう問題検証のためにOpera 8.50 on Mac OS Xで書き込み。大丈夫っぽいね。

The Reasoned Scheme

もうすぐ出ると言う話を聞いてAmazonで予約。SICPが重かった頃(いや、今でも重いのだけれど)、The Little SchemerとThe Seasoned Schemerはよく読んだ。著者が一部替わってるみたいだけど、前2作のように「軽く読めて、時々はっとさせられる」好著だといいな。

R5RS Pitfalls Test

というものがあるのを知った。R5RS Pitfalls Test Resultsを見ると、Gaucheのバージョンが結構古い。今のCVS HEADだとどうなんだろ、と思い試してみた。

% gosh ~/Desktop/r5rs_pitfall.scm   
Failure: 1.1, expected '0', got '1'.
Failure: 1.2, expected '#t', got '#f'.
Passed: 1.3
Passed: 2.1
Passed: 3.1
Passed: 3.2
Failure: 3.3, expected '1', got '2'.
*** ERROR: Compile Error: malformed macro x: (syntax-rules ())
"/Users/bizenn/Desktop/r5rs_pitfall.scm":114:(should-be 3.4 1 (let-syntax ((x (sy ...

Stack Trace:
_______________________________________
%

ありゃりゃ。r5rs_pitfall.scmの覗いてみると、3.4でひっかかってるようだ。仕方ないのでこのテストだけ コメントアウトして再実行

% gosh ~/Desktop/r5rs_pitfall.scm
Failure: 1.1, expected '0', got '1'.
Failure: 1.2, expected '#t', got '#f'.
Passed: 1.3
Passed: 2.1
Passed: 3.1
Passed: 3.2
Failure: 3.3, expected '1', got '2'.
Passed: 4.1
Passed: 4.2
Passed: 4.3
Passed: 5.1
Passed: 5.2
Passed: 5.3
Passed: 6.1
Passed: 7.1
Passed: 7.2
Passed: 7.3
Passed: 7.4
Passed: 8.1
Passed: 8.2
Passed: 8.3
Map is not call/cc safe, but probably tail recursive and efficient.
%

ふむ。7.4は通るようになったんだね。通らないのは1.1、1.2、3.3、3.4かぁ。1.1と1.2は何となくScheme:call/ccパズルの話に似ているような。3.3と3.4はマクロコンパイラの話だね。そしてmapはcall/cc safeじゃないぞ、と。ちなみにsiscの最新版1.11.3はどうかというと、

% sisc -x ~/Desktop/r5rs_pitfall.scm
Passed: 1.1
Passed: 1.2
Passed: 1.3
{warning: compiler detected application of non-procedure '0'.)
Passed: 2.1
Passed: 3.1
Passed: 3.2
Passed: 3.3
Passed: 3.4
Passed: 4.1
Passed: 4.2
Passed: 4.3
Passed: 5.1
Passed: 5.2
Passed: 5.3
Passed: 6.1
Passed: 7.1
Passed: 7.2
Passed: 7.3
Passed: 7.4
Passed: 8.1
Passed: 8.2
Failure: 8.3, expected '1', got '2'.
Map is call/cc safe, but probably not tail recursive or inefficient.
%

なかなかパーフェクトとはいかないようで。何にせよ、自分が使う実装の弱点を知っとくのも大事。


あーりゃりゃ、boehm-gc 6.6出ちゃったよ... lwpを使う方法はうまくいってないし、そろそろ諦めて現状のパッチを投げた方がいいかなぁ...

メーリングリストにパッチ投げちゃいました。さて、マージしてもらえるかな...


cut-seaさんのところのプリティプリンタの話に刺激されて、ちょうどデータとしてのS式を整形したいと思ってたこともあって、10分クッキングででっち上げてみた。イマイチ。もっとスマートにできないものか?


RtS:Shiroを読んで、Lisp体験のスタートがまんま同じだということを知ってびっくり。その後も経緯もけっこう似ている。にもかかわらずこの彼我の差は何。


Kahuaでファイルアップロード(2005/08/16 01:47:41 PDT)

Shiro: 一般的な話題なのでGauche:www.cgiとファイルアップロードに 移動しました。


Last modified : 2006/07/31 04:13:03 UTC