[Mew-dist 15304] Re: thread

Shun-ichi GOTO gotoh at example.com
2000年 12月 6日 (水) 15:47:09 JST


>>>>> at Wed, 6 Dec 2000 14:04:52 +0900
>>>>> jado == Shun-ichi TAHARA (田原 俊一) <jado at example.com> said,
> 
> # 深さ 53段の thread で fancy はエラーが発生しました。

jado> なんとまあ…
jado> ええと、これって、let でスタックフレームに積みすぎると発生するのですか?

そういう事だと思って結構です。
私も以前、 semi-gnus ML 辺りでそういう
目にあったので、再帰呼び出しは使わないようにして回避しています。

## 今数えてみたら42レベルの深さだった

## Subject: gnus-6_9 branch & feedback latest version to main trunk.
## From: Keiichi Suzuki <keiichi at example.com>
## To: semi-gnus-ja at example.com
## Date: 23 Jul 1998 18:01:41 +0900
## Message-ID: <uvhop6ive.fsf at example.com>
## から始まるスレッド(^^;

jado> んー、さて、どうしましょうかね…
jado> cdr って、そんなに遅くもないだろうから、(cdr top) を next に保持しとく
jado> のはやめたほうがいいかもしれないですね。

描画すべきものをlist に保持する(スタックする)ことで回避可能です。
ループのおしりで以下のような操作を入れて、
1スレッドの全ての行の描画を同一関数内で行なうようにしています。

      ;; end of loop (without recursive call)
      (setq msgl (cdr msgl))
      ;; print childs
      (if (and recursivep childs)
	  (progn
	    (setq msgl-stack (cons msgl msgl-stack)
		  level (1+ level)
		  msgl childs))
	(while (and (null msgl) msgl-stack)
	  (setq msgl (car msgl-stack)
		msgl-stack (cdr msgl-stack)
		level (1- level))))

## max-specpdl-size を一時的に『十分な値』まで増やすという
## 解もありはしますが...

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN



Mew-dist メーリングリストの案内