56Fermer58
PpHdLe 18/05/2008 à 09:50
Pollux (./54) :
?

Si x est non évaluée et que tu le pases en argument à f puis à g.
Rien n'indique que si f à évaluer x, il n'a pas du le déplacer ailleurs car il ne rentrait pas dans l'espace mémoire initial.
D'où g doit à nouveau évaluer x lorsqu'il calcule.
Sauf si la place originelle de x est marqué comme un lien vers la nouvelle place.
Pollux (./56) :
Je vois pas... (


<------------------------------[1111111111111111111[2222222222222222[333333333------->

Mettons que [ indique les moments où j'ai appelé may_mark
Mettons que x appartienne à 2
Tous les fils de x ne peuvent être que dans 1 ou 2, et pas dans 3.
Parce que sinon, lorsque le GC voudra compacter x, il verra que x appartient à 2, et rendra la main directement en vidant la mémoire :

<------------------------------[1111111111111111111[2222222222222222[------->

Dans ce cas, on aurait des fils de x qui pointent vers une zone mémoire détruite, et qui n'ont pas été compactés.
Pollux (./56) :
- empêcher que le type top-down de pphdmod() descende à *toutes* les feuilles : on pourrait écrire pphdmod(integer((x+1)/2),2) pour protéger (x+1)/2 de l'évaluation mod 2

Perso, c'est la réponse que j'attend:
mod((x+1)/2,2) ->NAN+NAN*x
Pollux (./56) :
et suppose que toutes les feuilles sont modulo p.

Ca ne se propage qu'on sein de K[X,..]
mod(x^2,2) reste mod(x^2,2) et mod(f(2),2) reste mod(f(2),2) évidemment.
Donc je ne vois pas trop ton problème.
Pollux (./56) :
Autre question : est-ce que tu autorises des trucs genre mod(x,2*pi) ? (ou mod(pi,2))

Oui, mais je ne suis pas sûr que ca fasse ce que tu veux gni