GC patch

Toby Kelsey toby at puckish.demon.co.uk
Mon Nov 8 13:31:56 EST 1999


Here is a patch implementing garbage collection for python v1.5.2, it
compiles under linux using egcs-1.1.2.  It doesn't use the Boehm CG, or
full mark-and-sweep.  See the file gcmodule.c for details.

Currently it only checks cycles containing lists, tuples and dicts.
It has not been tested strenuously, and I would be interested in any
benchmarks people can generate.

So no-one feels left out, I have left plenty of scope for optimisation
and improvements :-).

Firstly a short script which shows what it does: 
=== cut ===
class foo:
   def __init__(s, w):
      s.greeting = w
   def __del__(s):
      print s.greeting

# list loop
a = foo('bye list')
b=[a]
del a
b.append(b)
print 'list id', id(b)
del b
# tuple-list loop
x = foo('bye tuple')
b = []
c = (b, x)
b.append(c)
print 'tuple, list ids', id(c), id(b)
del x; del b; del c
# dict loop
y = foo('bye dict')
t = {}
t[1] = y
del y
t[2] = t
print 'dict id', id(t)
del t
import gc
print 'pending', gc.pending()
print 'collect', gc.collect()
print 'pending', gc.pending()
=== cut ===

Enable DEBUG in gcmodule.c to see what is happening.

Comments, insults, free beer etc. welcome,
Toby

The patch follows...

begin 644 gc-patch.bz2
M0EIH.3%!62936:ZFK/4`&(G?@&@P>_______W\Z____^8""<`>\/ER\[O7>\
MU[/H5!5"JH.Z^VH^^^NMOGWCO:[WO!3USO7V*[=<W:[NG9KSO7>K.;N]7Q]>
M5QK.F?;[L?7NO?;3U[OOGE;9\-)\Y7UO;ZD;OO<>O/L[ON[[?`E-("`3(3%-
MJ:>A`FGD-%/$GM4!Y30T`'J:&0--!`$)IHFI/3)E,IY1M(]0`#0`````)!)$
M13U#U-/4!M0TT:,@`T``-`:```(4BD4>H]-!J>H]0#3:HTP/41@:#1J&F$8"
M#$PB2*80TF(3*>$T)HPF$FFU#3";00:#(!D`DU(28D>B9(U'II,ILF)E,&II
MD&F:@`TR`#0:#@, at 5$+W8%'LBJ01$T?_GNQP)V%45$435A&,A!23%!04K$!0
ME,110)0$3!"00[,#()IBJ*W?MVS+`WU9H=[UK4<-&EW5!!30Q2WU89!=`:_O
MFS<)42!_J7+APWFU-DL7C&/$&C((>DLB2))H*")**&D*:&)"E(*@AJ)9D):"
M@@ABB(""AD("&"(DE92`02*D0 at SZA\YVS0R/S8_-?5KX;ZWC2Q at WIG(F499)
M85#&M0N0),L9!,EF2!&E,SA:0A;!X,URQ].+9K`V-H2I6%"@0P9&B*0D"@-,
M:&;88C%IC&FTM9`NY&Y0MHS!K%F4P&HHI$O08#%2Y&@1$*H*CD-1L(4HHBB%
M)5%(H*#&BC"T%E5$VMHHD-5VQ1HB:8S;3`X+9YFT<%`3''F!2].&!NR"F)*0
MF`JH)I/04UKZC/<X8;H(MSJU!0X'/CH%R$:;AOY>8^'H_Y^Z_CL/N_GMI;_L
MPW71.S(F at C[(;H#I+C_7'E<99-]$1B=,OI+^ZG5Y_2<!3CT5QMKG`A9UI>O,
M\3ZSP<YTS8ZUN5UZX60*_#['H,6(Z4#'?\',H[?@9:=C3?##AN;A867OF(@H
M(H]VQJ(@MX.<R)LD)B$[D4NH2 at RIM[QUFSS<`]S7KRKNZ$/4!)$-T0BO<Z__
M&CIZK"BB**BF at I(DB1#H3^Q3_9Y at X>-HW]9!8R3->UHM3-ZBC#8TM^LBB:.*
M.479YFVVRAR###MK at J#3##AY%-CDBED3Q7^+,T,0]+)9^GV4:)JR:(%G,K><
M:N1)S!6*R,9$Z]CO]>\<9?=?7REZ[]SR5*E]=3@[I,G_5!DRZ.KY8Y<"5D;W
M>VY[23B99>3T\)`I#)`XC`41&""$*C0P?3\+]7L/[[]IGW]0^$?K[$P^*3A7
M].\/V?+3`JAJ,=;4>)]7LYM1B1.E#.6?4613*GSJ?-KD<)W=IV[N><,'=TC0
MH=!$^WXV=Q/C:=P_WBA!6O"'<4(([$#>[JMI8N4<FYOPL]*);YV&PT>(VO(9
MFDQ]FP2Y1Q"#>PNZ0AJ.?T.<3!J,K1;'YICN%\-F4#3;+4;1R>V^IW&^MK%[
M+8"_$]!PY<M,;F^&U]1O<R^$]7L)&[J8>PZ`YT)>U<U]K;JPE]7EN;1A.[?M
MI1%97P]2D at _$=;;R[M24Q,P%XDS)BY,0]@=9WS(UB[TNJQ'9_XD+47,:G`A<
MVK*\Z&=5'$P['MZR3[CGOU)))G86%MF,P(RN!Q%"`/SWO(L/);J?"!8(W-[%
M`2*E%0?*[;*"EO"+;U:>Z@<>K0-M`T]T>J];S6,QA5H68\\*"FK6E^V!.MM^
M0]ZY at 5Y3O;EF8,[WEKGI:L?$*J%W>[KF&IS3(%75R9V?X?);IDYFN'A01Q%?
MF/I0:/I4::P9 at DRWAG,VO3U>0L4![=AMRZW<ZTW+<6VU0VUVZM)^DQE)K*GD
MO&.&JM>F`B[F]9*DSNPW[/--1Q2MG'`N<0&3RP1=IW2M(&F?)@,=,%9WZRN&
MUZU+:A?:SRH^&[7G3B,"O*E^K.I%Q(F,RGK(79V\H;HX%2&4+]*:XTAN!0X[
M-JSR.>E8B/`LE=)]2V[GS^/<^NCL&E>!6Z$M\'\5$_%9`I-^)B-.3)&'W8>5
M>?2O6V,/9TW<*-%QMH\K[-H:SV[!]CW:SS.XT!CB&U:!%:-QB8<%,`+W,>\/
M:K3Z`5_SJ.HGS.M1UOMUN[<?D(K5"GX99::7#CDP$(#T;<$]'HN6[5`<_&NT
M`J,&'QSN+I(2[,NQ0(&"K#P!E916:UY*/L6-8Y1/!`?G01QJ\WB.:**-GIO$
M%<)B^H;*W>858`RJAX6791SI,-7JN-JFQF,\T^.7CW\I7$]VK."0>',V&41/
M8<*2GH[$X.#?B19B.E1*J"G$CQ;S$_`I>PL!/"=8,I'OPZ:B(OP;1\GCK93N
M'\$(0(9WB\.4<#(W=<CPAA29S;&O03=G33O*7K?D4W_BNV1I?B8YX780ZRI4
M#O`67+POCS4=WJOJU5L<A-`43IDHSS8GQ6YKW[K&N:"6P;5Q(&YR#0](:,E:
MB5XT/EEJ/>76G+Y<-0;^QE-%])AJGD_F#SIQUP-!MBPDJ[+2RR,.%XG)EZOU
MU%P6R-NXK at U<(F3GPL-H&M*WC4Q<J;+- at _N#-VGTV[^L at 1BVH<CB-B_411$%
MD8,!&()G6/V5=ZC`_`[G`_(XB_<D at 4!P/)8NS4^]U'1('9Z;EOM-JP,/D30Z
M^WQO9 at Z.VBR>LW<=(C)/4 at 55&3889VNTF1%,)33#]"PIYGP>?KKN2/&S[`V"
MO@"!^E/I9(0B$4U<QY"DPY]92^C'0C:ZJX;E_K#=`/?P5(S:H'2R(?9F6'(C
MY.K'(TT+6*(6#*BYOWDSN$<"BB,(K#<MK3+/!:'0)*!F!"O43H$J46*Z"X">
ML-V.&6\M"C2%0I)7O7><N4)?&!.,VWT&)?!?"C;*&]1WB6UJN4H3D4'7<.N,
MK;9Q//9\QZ<\7#I/JZ^YC6VTH.R??ATA43)%(&<?D?,\N[Y\//5*LU/!K-[I
M)$CL69!@_*+-?C\\>WYWZ.!U]H>J(6%=YFE`)C]-A$9#6C]["LH\<5NJ?!'0
M*=-`FF913C4]RR([C?[0X!ZH(OH-1NAP4Z`9B"R!X>HJE1K8YXD3VN]7$X;5
MZCAI3%%B/`BMKM!!-4V.4C>.ZA7T"\4'0:VOUEA"N67Q]%`U=FOJ':8-:+SL
M5JZA>Y6`O(,,V4QS60KCZ-*UW\;]?BU-=L<R^D+',Z8B!]9/,18,A&4I8E*5
MH.G$0/XU,0E#10>(DBA\ZJ"F at C<`X2P<A@='<+V$#`8JA1$1./I,>W,-_#]8
M5RA8#XSG)\VRT2(&.^S"ZXTX)7-:W.'HI?$WIFL"\O]0<7MJIV0]]C'*FZ?7
M2,-/%4NFX*P<2VIQ%:2(!"O95]E9-"E#NRC*LL[UM.MO'^_]W;$_6WQ/1Z>T
M/*>;[O>#C)F$]3ZI@*M"U3K`$.L^!)&S1#V'B/:+_367F?V/X#P>;SGZTBD3
MH*S(=%0^8((G6N$8^KVB3%+-RB1$U9`=8)'K3A"["XREH',=E^#HMZ@)!K&Z
M[P#IJQD3:8%FS$-[]%F'?5F,SOS6]65W/MA=.%O)INO;U_@`>,`P#,\[))I[
M.L=H8>D03UKUWHD5)$%,!898E&24.8&&600[M1$555Y!N!!#+D?P/SGS?$8D
MGO"P$UWINH^8."YEZB%3%QBJ`_DJHKU%_Z&8,)+`<D(V'.*P`ADVIV8R!!17
MD,K.OBU:8&!(^[Q`$L+G4K&#GC`_8A#VEKVZLTN;*1G4I2F(9TU`&PB:2T<+
M"Y5(1P)/(:LE$@S)FES<.&UGM/&0 at CZ(+RPP>_W&'%YJ+^?%O&U_UD.M009H
M"4/#:!DPE_2S=8%B)LK8HJ.84F7FWW+H55HFK.Z`6G9R"Z/G#`N,?C&R9`$Q
MV<W80:3+%/7%2W:B=@A+.IG!P5&095'S++R0ZBI80`*F^S<YY'U<UN/A0:C+
MZZ00U[`I6DMC`Y2357VNJ6>%X]^.85[R%N5;4G9W?U0+:OI8^&<H-OT<JLST
MFT_GT\?RG'SS\OJ_P`[_?\W7AA@^@(/"%7Q6U)E at F!TS$08"&$*TCN0P(0$$
M'UUB>:H'R),2H0`[3EPP?8$2?01.,]C/]>U#\0H+/YPX4?'[10YQHL?\8?/M
M^G0O^2=L/!J'^P0TF6H!L_FLH;VD4.";>4G^$#R'A"(&QEIP8V#0_ at VI?'>X
M<60D1.I-JDYX1YC,I+<XM`^1$CSI^(:A:AD<*YE.1""FL(VW:5NZ!K%_L`Z!
M9L^I*Z`'ZPHU`/4A@%"AY1;AM^X#57AW%3CZSU?']O9AF..,F7.4.E^V=4`'
M[XX at +Y((\1(7=8I;J)_.,]UM^^)?M0YOAY@=N`8?J+\IR^X!@8:Q$A'[9$UU
MAZG+MLQ,O-*(.#YA5DA at _:OJ]6][9;*V;:B-PAVNO.="Y_);;<!C0%#:?62!
M[6R6T!.""G%[`38,F%1!-X'6HK12`PCB1E533`X#-M0,&%V(&.GC#L0\ZF#+
M!AW*GY"AVH6,&<G(;;5-2GP^9-J>=,TWXE=P53T=5 at VL,"B2%0*(%'9=8/;^
MA*1<&)Z@][A\9(&P<]KX5JB:H(BJ)9*[POB*]ACP/+Z$P7 at 4AS)W#H@/>0Z4
MST#X&O0<H4<1;%'QB>S&+*8$H3)=_%?B"#8O7Y?A^SUO3WT$.XYWX>'W>/<Y
M=SM`9R+Z2BA:%*FN;L];J^G)VMIF#I at HK241IN6+,63&G&>CB@]E4B,U+KBA
M'T,2YL*#B'B.WX3OZDS3(*]\.LLCJ:P^,X?4J*CY_(/)3!F?J`L%U2\"Y^LP
M!88?:5$@I<F62G9T^VH at 8&GPQL2<J[SO%FWWPFCEBJ"INPN0SUGC`<W;3`LK
M:"%+[]5#C7W[<-,K3A3G)(0C6;9CRFV?NAG"R5`K?:Q=,'51MC@%/Q*16_?F
M\U$&YH;A'"U81,_SQJST_>R^X0N"](BG=T9ZB[,KSS:'9@@?`SI(OB#K#89Y
M>WF?6&_8CCD7G`<)&.-T_9,<S`+R3.J+)]#?'%@8I%T[S?'V!*VEU\WC0:X8
MY];<FECT_F88 at 2=G&"J/`*FA!XEZB:*8JB2(''#8%[)#?7[A33K%^*Y\2(TC
M#IB(P#F5J'U%S$>@^$[1I7@'`..;D(DY\S,-&N85,/$E7ID"IAXJ6MV!2`8_
M)Q^EUG)I?"KAQ@:3W=WU;E4-PY^*C.1#;A4ULB<8<<KWDA\!DD]!D#JV)YP-
M-0?XG3S:TL9A=D+#938-+]O`/?ZSG)@Z;I5#5,SMK1Y@`L36$:(4<4$H1\\G
MR2#GBDR7;1*RFG$B0<@#3TF`\8$;`+Q9XGNQJ7(PW"QK(1H9&'AEU3"FAZ=P
MG8=6H4R,VFG3)"M22(BPT*VTL5J+0R(C0Y**,J,$;[9G!)U4+6F)[&=)J0BR
MD at 4!!U'/D$YI4Z+Y[L^8K<4T']U<L^@S1S<MK9:.A+2?X#,.?LXNCQ7MO]76
MK+OF6$.4"CE$/?AIRMD`Y>0R(H`3$C?P7:O1YTGKY"TE$34]BME$011F=S3D
M1-4RP)"$+J>5!JCO";@8]K2+KB'MO)D[2D_/^%,(9$R9!]CQJ,P:%"UU30C!
MO(E`K*\X(78899S^6B2,JB4V%&%"2!$F#$YG$K:X at 8>R`8M@*)8#76TPCD2I
M*D*>5Z0-+2IB*@`4*U0X"34*()4(,&6J#'60I>VGPT:=":9160 at 3T4&;N2T0
MYB!)DNK>;H)@![3`(%'J,!)H+)F%&R-. at 0>?8N]!O%I-4?E,K!89;7;BX*F8
MXHXG_14C%A()`BN_&K"@5`/Q`B0Z#'<:.H;6K;77E"D0MNFRUM*:M/H6]ZN$
MV&SBFL42;.0-EW`Y8M1BAP8"&%E;PV[S;*K`389(*9`7>0Z3>P'W[@P#6)AC
M!D%H0%[S>SC:,R:R83IL0;=I(H&:&*P63%6;9`?3+ED)-4_)X85Z&RF,)EQ+
M<3/C!8P&RIF059-L4\`B3#24A`F`,B-*`#C1,A<%C<:72-X(572"T at 65J^2J
MP8ZI@#Q<0,$^=%39D`40F:..H*S-6]Z6Z<V689BC:%YUZ5V'L%Z[G;W_79=1
MYRE.&[NZE$.P)WQ.P["B at M"213/HM:6-LRDQF-VP+1C1U`8#!B=9%;I[V/SW
M%JX8GDKP&13A at 6`I6+18I#E[U=ZJ;1YXKST[#2YDADEJRL":XHY&0X)B0\@3
M%-G9I]H/W`1Q2M*,0 at D.74!\"X1A>/U>HM<M]SB2L/69:;#7)BYS=`DK4-HR
M8Y)U2'%#YPX'EHJ"(>=)V>%*N6)6$)91R<`P*(OT$4DD`@P^X7.`[(&+]`!!
MP'J83CC"E&#*(H.S#OE$Q`3*U`&$V=0#4'$,.8WDF/8'M$-VA,PN9DZ-P at 2_
M at +@IZ*N<)[ZEG"VI?2I,%"T1DUYEM9C@'`7PQ497(!9]:63`[+'(AZW/9GX7
M at KP)/#U)F8%F`R=O at I9'#,].C>YY6'P*(A2MH]_+8/?UQP>RP/GT/Q,QDC5E
M.1J[SQSG`A&:)Y=R=:@'[2+?Q7/JG:I)=K&!YR&9N2 at J@AO`YLA.Y[U:<^_)
MI.Y$!!B"R+MCMZ-;(-KS$#;0;#O:%A`),"1/0!P?<VM5"L<\U/HT+/H/<E0/
M6`$WYZAPWU0*H`]!1K#R#1CRTP50%#2E"D1HWU=CA@\I5HK1"#TA^(S=MX03
MD3D at G`06D:+^@N%TEVZ6M@`^G773U:%R">`OV,;%ZW&[+"[P,EKFD,C1)Q+$
M,!O>Q>%X4AIF94=`0-V1D.%6;@.@)-N.FXY;L2YL,1'X2>=GQ*R*",BA"[U!
M@%+22D#<D0T(PTKB@$D!D8=DZ at -0S"F>Z`^@$X%YM<4N&8:D at DP9,9G4(OAS
MVE!"6QX<-DK8NQ2M`S8=,RJM$+O`#<&L`S&,&3QX)/`P[XC!AAS=TK>B<_.$
MD!6EW&4!H at 07"(\!@/61`1UU#?P.*-:A39>#..(#0T<:7BIPI!T'6.Z%F!1Y
MB4J;&[[&:S5FB7_`1R:8<1H<G$`OJ8JK!A-P&$1F(:,*)%#3*64:8"[[3`#K
M"]]-=TNS*,A6H5%FI<WZ![(HTMOBH at A\;(S>/4 at RIH!C`8,!5%$$CG74PVVH
M at 0W>`S7,9`Z:>C5D=B`@[T3S"U.U;ES@(R@*J<`/`"LQ,*@Q]]EM;IHQZTVV
M\4!-941Q$94;AL$U9%A18PF?4G9W)[OS]LJP5'O)17R<+R8\U2GQ"&9PA#Q3
MB!\P)(&^/S7,V26+F?B#-#<0`A)%9!CQL>`^2)`-89J/.P,]?MR]*`6)RKQ+
MB=2>6*.'NXT!G$9B:E,'7R;B*5(1U@&]HK`;G`.*!6S`SPD.$$V^5?$^0]T-
M;\U!XTBV"+(CY2#*JJ>H5T;(4QA'E&YZ`%[UKE$<PBF^#\*I(D)I5<O5<H2>
M3NU!MP3FTZ*,T,B`=KB;$L)S;JV[^EW%*ZA"6Q>\=)O%M#/Z^0QF8=]#8Z4^
MQ"`T1%8R$CB#71`A"`D5L8)NW68#PQ-NN-SIQ*:9)!L0URHX<3 at 0;SNSH$F3
M-YA`.O+\KF3"X4E.K_8O7-VK8X9R<[S`>\8U,&28$(<X&!C0H-FB\3,9G06O
M2:[S(W%PAB9F=AU/*,9O$H;PN#D-UJ at 2BI0"P;ION6BI,C0HF42(Q81)Q(L-
MM'-@=-W'D='BBUJ08"&2&NR'NQZ49X6=W<:!\O$F-?E[A[PI?I,5SD"?.D\A
M)$4\Y at 8Y'$\GHU!CQI!8.@,$:8',D33EXN1)?R%MI"68+(HB(@E0H;?2"8!]
M3F(NFX?)YRL'CC,'<8Q<(L49A)%("2&"=5&7!$QU=9PZQ#`/F, at T#8$TDJTE
MJ.AR)SYS*^(5A3QT5,^Z^F%,*I="@5E7[=T'DGB'`K68%OC at +D/U=7*D+=@9
M+A\95*SY46%8<\ZLLS31EK!2C=MO<[8M/3XU9#F&0D!6`:DUO8<@&[U`^.VT
M:Q=BG-.A/DI507H0!.X<#Y#<6`MC6+CJJ-A1CJ-WV8.R=W628@%RD><)F330
M4U#@&_6XR=ZOWN9XSSUMMH9"$O.@@&I4OCMN;37)#:5JFX348>3E,BQO,=2(
MR!R8!5LU=Z,J8O8M(&1T#-8)K@?)%?OVF')BIGMO9US0-E)837:SOW&EFZK9
M5RSO"9)`P\KW:"0PW)',)D9D8%E at 6/R269J-OF1)*X(Y:;O"LFM[<V>Z,NQO
M&&SNA#F:E9AE+2>;L#Z8D]8GE9"B34&%"*(2>8E$-#5YIN-#,PLN`L4.*D2,
MX#04\IRW-,L at Q;CDV$IOKIXACH/)C4"!&1I&$`W@&XN9KD\&PJ6,S`LP,9`I
MJ]^5KJ2^H?*$-U`>4QH7D/#?V\!WS005(0 at 0UI:C,-$0MK-(T6%O0]*!5N`+
M6F<3$`K5/8P,:.]K!/.=TE6$TQ6<S2$"!2CCQ2=!/-U9?S.,#FQXK7>](M*@
MD1#B'O at 94`%$P)%PRY(3CP at QP,'(J%32#:%HKIR1."7"[94<>'"NE)U.TR=H
M]Y'S=U/(G_JP-Y\#<I,`#``-7Q;=1""'9518#04FH,8&XL<CVPK`9C,1)!N,
MP98%FHLV0&41T>9ODEGAO$Q$>L#74Y at X/`I)VTIT#7,SQ=<>*K)(,B<28:)#
M06F[&ZGN19L1RN8=>&3;"Q8'VJ9T6=1S]#:T0/<!$!)2%T,S2*DPR-C=>]@]
MA>02N,+R3=,,CRD(2(0*R89Q)24'H$MY3$)V0."6`UA>.NKGJ4`NA$,&`O4!
MDM\<LN.*!S/5T`QZ9:4/7CH"$IB*6:J"(\H:59#$_4<RH\&SALH!,%W"Y+#,
0 at 8=X-?N+N2*<*$A74U9Z@```
`
end

-- 
Toby Kelsey




More information about the Python-list mailing list