Re: zsh segfault, Was Re: [SSFR] quel langage ? |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
On Fri, Dec 02, 2005 at 12:15:21PM +0000, Vincent Lefevre wrote:
> f () { echo $[++i]; sleep 1; f; }; f;
fonctionne et plantera de façon normale/attendue a terme, rien a dire.
> Non, elle est infinie. Avec
>
> f () {
> echo $[++i]
> cat file
> sleep 1
> . ./file || echo exit >| ./file
> f
> }
alors qu'elle ne devrait pas :)
> j'obtiens:
>
> 1
> false
> 2
> exit
> 3
> exit
> Ça me semble être un bug, ceci dit.
ah! :)
cela semble lié a source/. qui refuserait d'executer un exit,
j'ai essayer avec bye pareil, par contre une redefinition de f
sourcée arrete covenablement le code, de meme qu'un exit placé
dans la fonction via une variable.
Mais je n'ai pas encore trouver dans la doc de point pouvant
expliquer ce comportement sur un exit sourcé. ce n'est apparement
pas un probleme de synchro d'I/O j'ai tenter de forcer un peu tout
ca et le resultat est le meme, faudra que je test sans recursion
quelle qu'en soit la forme, ou avec plus de profondeur si le
comportement de source y est lié :-)
> zsh n'optimise apparemment pas (pour une bonne raison, peut-être).
> Il y a bien des appels récursifs.
ou tente d'optimiser trop (sans aller jusqu'a l'espace constant) et en
oublie des morceaux au passage :-)
> Tu oublies qu'il peut y avoir des traps, et des choses compliquées
> avec les redirections, des processus qui seraient mis en background,
> etc. Ce n'est pas si simple. Pas sûr qu'il n'y ait pas de nettoyage
> à faire à la fin de chaque appel.
ce ne serait pas un probleme en soi car il est peu probable que ces
nettoyages s'appliques aux stack frames, ils pourraient donc etre
effectués entre les appels raison pour laquel je prend le trampolining
comme exemple meme si c'est une methode depassé lorsqu'il sagit
d'implementer un langage, on peut toujours l'utiliser ponctuellement.
enfin je continuerais a fouiner la doc plus avant ce soir, j'ai
pas l'courage d'aller maltraiter les sources, je m'enmerde deja
suffisement avec le taff comme ca (feignasse powa \o/) :)
xavier.
--
pwet
--
klapwet...
--