OSCON 2008: Porting to Python 3.0
-
Upload
guest4d09 -
Category
Technology
-
view
3.566 -
download
3
description
Transcript of OSCON 2008: Porting to Python 3.0
!"#$%&'($"(!)$*"&(+,-
.&$*"&)(/01$2#
!"#$%"&'(&#$%")%*+
!*,'+%%+-.)/%0
$*232(34%5236
www.interlink.com.au/anthony/tech/talks/OSCON2008
%&$#"578$%"&
www.interlink.com.au/anthony/tech/talks/OSCON2008
www.interlink.com.au/anthony/tech/talks/OSCON2008
903$(#242032(:'#
www.interlink.com.au/anthony/tech/talks/OSCON2008
&"$(;"#(<,=>+,-
www.interlink.com.au/anthony/tech/talks/OSCON2008
80?20$
www.interlink.com.au/anthony/tech/talks/OSCON2008
www.interlink.com.au/anthony/tech/talks/OSCON2008
39"@23:0&
www.interlink.com.au/anthony/tech/talks/OSCON2008
39"@23:0&
www.interlink.com.au/anthony/tech/talks/OSCON2008
57*www.interlink.com.au/anthony/tech/talks/OSCON2008
"#(&"$,,,
www.interlink.com.au/anthony/tech/talks/OSCON2008
A.BC
9)$*"&(+,-!)$*"&(+---0@0(!)+@0@0(9+)@
+,-
D*2#2(D2(E#20@044()"7#(8"52
%$F3(&"$($*0$(E05
G%&(0('""5(80732
9#":%32H
E08@D0#53(%&8":90$%E42
I7%$2(0(4"$
%:9#28%32:"#2(9#28%324)6
04:"3$(2?2#)(9#"'#0:D%44(&225(8*0&'23
04:"3$(2?2#)(9#"'#0:D%44(&225(8*0&'23
!.
E7$(J3$
3":2(K73$%L80$%"&
3":2(#0$%"&04%M0$%"&3
!)$*"&6(J=()20#3("45
L#3$(#242032(JNNJ
E>D(8":90$(%:9"#$0&$
9#2OJ,-4"$3(";(8*0&'23
J,-(!(<,-
-12#)!((."345
2%/6.#),1"345
:052($*2:(0'#22(D%$*(5"83
<,-(!(<,=
&"(E>D(%&8":90$%E42(8*0&'23
D244P(&"&2(%:9"#$0&$
$"(97E4%3*25(.!B3P(0&)D0)
940)(D%$*(%&$2#&043'2$(*7#$
4%@2(044(J=()20#("453
0&&")%&';20$7#23
+,-
$*2(8*0&82($"(L1($*%&'3
:%3$0%@23
5794%80$%"&5794%80$%"&
K73$O940%&O7'4)
:%3$0@23
/%.*/.45&"(732($"(0&)"&2
E08@$%8@3
5794%80$%"&
QRRSQTB
!*2#2F3"&4)"&2#0)!"$"(%$
&"$($#72
0!(45
4%3$(8":9#2*2&3%"&3
3$#%&'(:2$*"53
3$#%&'(;7&8$%"&3
!((-&47%%89!*+2896:!*+25
7%%4;!*+289;;6:!*+25
2:0%4(908@0'2
#;8U<<(:"5742
*"D(5%5($*%3(*0992&V
D2(420#&25
W8
$*2(7'4)
<,!/6#1/62<#29#XY
2D*0#5($"(#205
;"#:0$$25(D#"&'
*.3=/.452=045(#2940823(NZ[(";(7323
(*1"#9>>92&2)2#3.**89?%$9"%.2@
8*0&'23(055(E4"0$
3:0442#(40&'70'2\\
E2$$2#(40&'70'2
]9)$*"&(L$3(%&()"7#(E#0%&^
203%2#($"(732203%2#($"(420#&
D*"(D%&3V
_`aa(<--U
9#";233%"&04(9#"'#0::2#3
E7%4$%&3E)(?2#3%"&
J,-,J(XJNNbY6(b-
J,Z,<(XJNNNY6(Zb
<,J(X<--JY6(=N
<,Z(X<--=Y6(U<
40&'70'2(8":9421%$)
$
$*%&'3(D2F?2(420#&25
3$5%"(&"$($*2(E23$
"9$%"&04(7&%8"52\\(E05&233
3",,,
9"#$%&'($"(+,-
<,1
!
<,=
!
+,-
<,=
%&$2#%:(#242032
30:2(50)(03(+,-
9)$*"&(<,=(O+$7#&3("&(D0#&%&'3
>>>9AB)$!2C6.&4D5
CC0!1"CCEDE9F.(*./!#1%"G!*"1"+E931/#)$!2C6.&459"%#92=((%*#.39
1"9H)IJ9=2.9#$.91"9%(.*!#%*
9)$*"&<,=7*%09CC7=#=*.CC
9)$*"&<,=
7*%097=#=*.C,=1-#1"2910(%*#
2&0E423(3":2(E08@9"#$3
<$"+3*%93(D%$*(<,=P(+,-
:28*0&%804(#2D#%$23
*0&5423(0(4"$
&2?2#('"%&'($"(E2(92#;28$
7&%$($23$3
"&$"($*2(8*0&'23
40&'70'2(8*0&'23
#2:"?256
K>!
LM
2to3
$*2(:"3$(E03%8(8*0&'2<$"+(*0&5423(%$
2to3
_"$2($*%3(
2to3
<,!/6#1/62<!
*.(*45
2to3
#2:"?2569#%&$(3$0$2:2&$
RcdSQA//eV
(*1"#45(&"D(0(;7&8$%"&
(*1"#9!89,89/
!
(*1"#4!89,89/5
(*1"#9>>97(892%0.%=#(=#
!
(*1"#42%0.%=#(=#8971-.M7(5
(*1"#9>>
0E":%&0$%"&
]`GG(5"23(%$^
$*0$(:0@23(%$(!"#$%
9#%&$(3":2?0472P
!
(*1"#42%0.N!-=.89."3MO9O5
&2D(9#%&$(;20$7#26873$":%M2(3290#0$"#3
#!+MO,-1"6O
(*1"#4OKO89#!+89O>O892.(MOO5
(((((((!OK,-1"6>O
(*1"#9O8O)P%1"44!8,8/8355
!
(*1"#4!8,8/83892.(MO8O5
<,=
7*%09CC7=#=*.CC910(%*#9(*1"#C7="/#1%"
&2D(3$#%&'(;"#:0$$%&'
2#*)7%*0!#45(:2$*"5
?"!0.E9AQB9ADB@)7%*0!#471*2#8-!2#5
70#9M9?A"=0B9A1#.0B@
70#)7%*0!#4"=0MH891#.0M@2$..(@5
;"#:0$XY(E7%4$%&
>>>97%*0!#4H)Q89RQS)D7R5
TQQQH)QT
&2D(@2)D"#56("%"-%/!-
)"7(0%&F$(;#":(#"7&5(*2#2
!)$*"&(<,16(80&(#205(;#":(2&84"3%&'(38"923
80&F$(D#%$2($"($*2:
$*0$F3(D*2#2("%"-%/!-(8":23(%&
3.79."/-%21"+45E
9999!MU
99993.791"".*45E
99999999"%"-%/!-9!
99999999!9M9V
99991"".*45
9999(*1"#4!5
⇒9V
&2D(@2)D"#536!2
W*=.
X!-2.
Y%".
>>>9X!-2.MD
99X1-.9RK2#31">R89-1".9D
Z&"#!I[**%*E9!221+"0."#9#%96.&:%*3
f03F(D03(04#205)(0(@%&50O@2)D"#5
E03%8($)923
3$#%&'3
30)(R4g($"hijklmn
7&%k"52(3$#%&'3(52;074$
<,1(:%125(3$#o&'($)9235%303$#"73
3D%$8*%&'(9#"57825(p7E$42(:%3$0@23
E0323$#%&'('"&23924$(f2#*F(&"D
2to3
<,=
>>>97*%09CC7=#=*.CC910(%*#9="1/%3.C-1#.*!-2
>>>9#&(.4TT5
K#&(.9T="1/%3.T>
E7$
3":2$%:23()"7(D0&$(E)$23
&2$D"#@(9#"$"8"43E%&0#)(L42(;"#:0$3
,&#.245($"($*2(#23872
E)$2(4%$2#043
,O\[]^90!1-)(&#$%")%*+O
7323(52;074$(2&8"5%&'(6OX
,&#.24_QIQ`89QIQa89QIbQc5
0&)(%$2#0E42(9#"578%&'(-O<Z=
,&#.242%0.2#*1"+89."/%31"+5
2194%8%$(%3(E2$$2#($*0&(%:94%8%$
90#$%8740#4)(%&($*%3(8032
2&8"5%&'('7233%&';#07'*$(D%$*(92#%4
#29#XY(9#"57823(7&%8"52
&2D(!2/1145(E7%4$%&0&5(]d!^(3$#%&'(;"#:0$
"&2(403$(9"%&$"&(7&%8"526
&"&O.a`BB(%52&$%L2#3
99>>>9,e*6,e*6,e*6MW*=.
99>>>9(*1"#4,f*6,f*6,e*65
99W*=.
X3"7#82(L4236(qQAOU(E)(52;074$Y
&7:E2#3
&"(:"#2(-%"+45
2to3
%&$3(0#2(4"&'3(E)(52;074$
>>>92&2)0!I1"#
W*!/.,!/6940%2#9*./."#9/!--9-!2#5E
99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>
`##*1,=#.[**%*E9T0%3=-.T9%,P./#9$!29"%9
!##*1,=#.9T0!I1"#T
&"(:"#2(J<+CP(2%$*2#
2to3
%&$2'2#(5%?%3%"&
>>>9Dgb
Q)V
"45O3$)426
999>>>9Dggb
999Q
$#72(5%?%3%"&(*03(E22&(]8":%&'(3""&^
3%&82(<,<
,,,(%&(<--J
$7#&("&(&2D(5%?%3%"&
(&#$%"b)I9hi".:
5%8$3
"E?%"73(8*0&'26520$*($"($!2C6.&45
!
6.&91"931/#%,P
2to3
043"(31/#)1#.*;
043"(31/#)1#.*;
2to3
%&3$20565%8$%"&0#)(?%2D3
3$"42&(;#":(K0?0X2?2#)"&2(3$2043(;#":(2?2#)"&2Y
$*2("92&(3"7#82(D0)
32$O4%@2?%2D(";(7&52#4)%&'(50$0
&"$(0(8"9)
E2*0?23(03()"7F5(21928$
7%*9691"931/#E
7%*968N91"931/#)1#.0245E,,,,
7&4233()"7F#2(E2%&'(2?%4,,,
%;()"7(&225(0(4%3$(";(@2)36-12#43)6.&2455
:"5%;)%&'(0(5%8$(D*%42(%$2#0$%&'
3$%44(7&52L&25(E2*0?%"7#
32$3
32$(4%$2#043
AD89b89H89UB
5%8$3P(D%$*"7$($*2(8"4"&3
E7$
0:E%'7%$)6
ABV2:9$)(5%8$V2:9$)(32$V
AB(\\(31/#45
2:9$)(32$62.#45
32$(8":9#2*2&3%"&3
%$2#0E423
".I#459⇒9CC".I#CC45
2to3
&2D(;20$7#27&908@%&'6
71*2#89;*.2#89-!2#9M9*.2=-#-12#
$.!389;*.2#9M92%0.-12#
;P="689#!1-9M92%0.-12#
0!(45P971-#.*45P(j1(45
!
%$2#0$"#3
2to3
21829$%"&3
&"(:"#2(3$#%&'(21829$%"&3
21829$%"&3(:73$(52#%?2(;#":(a!2.[I/.(#1%"
<O0#'(*!12.
*!12.9k&[I/89N!-
!
*!12.9k&[I/4N!-5
2to3
+O0#'(#0%326
*!12.9.I/89N!-89#,!/6
(((((((((!*!12.9.I/4N!-=.5):1#$C#*!/.,!/64#,!/65
2to3
2&2).I/CN!-=.(W8'"&2
&"$($*#205(30;2
2&2).I/C1"7%45
.I/.(#9.I/89N!-=.
!
.I/.(#9.I/9!29N!-=.
2to3
8403323
&2D(8403323("&4)"45O3$)42(8403323
&2D(3$)42("&4)"45O3$)42(8403323
84033(528"#0$"#3
99'l.+12#.*.3k=((.#
99/-!229m.*01#45E9
9999999)))))
'3./%*!#%*
/-!229k&n-!22E
9999(!22
((((((((((((!
/-!229k&n-!22E
9999(!22c)`4033(\(528"#0$"#Xc)`4033Y
:2$08403323(@%&50(;7&@)
:2$08403323(%&*2#%$25
"&($*2(37EK28$
/-!229`4a89n890.#!/-!22Mk5E
9999))))
:2$08403323(%&(+,-:"#2(9"D2#;74
:D0*0*0*0*0*0*0
&"$('"%&'(%&$"(52$0%4
!r!(+JJZ
./`3
.E3$#08$(/032(`403323
$*2(9#"E42:
578@($)9%&'g
3":2$%:23()"7(80#2
0332#$(%3O0O32I72&82
$!2!##*4%,P)CC/%"#!1"2CC59o
$!2!##*4%,P)CC1#.*CC59o
$!2!##*4%,P)CC+.#1#.0CC59o
7*%09/%--./#1%"2910(%*#9k=#!,-.Z.p=."/.k=#!,-.Z.p=."/.)*.+12#.*4k&k!+1/Z.p=."/.509M9k&k!+1/Z.p=."/.45
q9#$.2.9!*.9,%#$9W*=.E121"2#!"/.4089k=#!,-.Z.p=."/.5122=,/-!224k&k!+1/Z.p=."/.89k=#!,-.Z.p=."/.5
c7$0E42a2I72&82(.E3$#08$(/032(`4033
8"4428$%"&3P(&7:E2#3&7:E2#3(O(!r!(+JbJ
52L&2()"7#("D&6/-!229Wrn$!*!/#.*40.#!/-!22M!,/)`ank.#!5E
9999(!22
/-!229k=((.#E
9999(!22
Wrn$!*!/#.*)*.+12#.*4k=((.#5
0E3$#08$(:2$*"53
/-!229Wrn$!*!/#.*40.#!/-!22M!,/)`ank.#!5E
9999'!,/)!,2#*!/#0.#$%3
99993.79+.#s.*7%*0.*42.-75E
99999999(!22
/-!229k=((.#4Wrn$!*!/#.*5E
9999(!22
>>>909M9k=((.#45
W*!/.,!/6940%2#9*./."#9/!--9-!2#5E
99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>
W&(.[**%*E9n!"T#91"2#!"#1!#.9!,2#*!/#9/-!229
k=((.#9:1#$9!,2#*!/#90.#$%329+.#s.*7%*0.*
>>>9/-!229k&l!#1%"!-4"=0,.*2)l!#1%"!-5E9
)))999(!22
)))9
>>>909M9k&l!#1%"!-45
W*!/.,!/6940%2#9*./."#9/!--9-!2#5E
99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>
W&(.[**%*E9n!"T#91"2#!"#1!#.9!,2#*!/#9/-!229k&l!#1%"!-9:1#$9
!,2#*!/#90.#$%329CC!,2CC89CC!33CC89CC/.1-CC89CC.pCC89
CC7-%%*CC89CC7-%%*31NCC89CC-.CC89CC-#CC89CC0%3CC89CC0=-CC89
CC".+CC89CC(%2CC89CC(%:CC89CC*!33CC89CC*7-%%*31NCC89CC*0%3CC89
CC*0=-CC89CC*%="3CC89CC*(%:CC89CC*#*=.31NCC89CC#*=.31NCC89
CC#*="/CC893."%01"!#%*89"=0.*!#%*
s0E3$#08$9#"92#$)E2*0?23(03()"7F5(21928$
;7&8$%"&3
@2)D"#5("&4)(0#'380&F$(E2(9"3%$%"&04
E7'')(210:9426
3.793%k!+1/4!*+D89!*+b897-!+MX!-2.5E
999))))
3%k!+1/4D8b8H59q97-!+9M9H9ooLo
$*2(8*0&'26@2)D"#5(0#'3(0;$2#(;!*+2
3.793%k!+1/4!*+D89!*+b89;.I#*!2897-!+MX!-2.5E9999179.I#*!2E99999999*!12.9W&(.[**%*4?%%(2@59999))))
3.793%k!+1/4!*+D89!*+b89;897-!+MX!-2.5E9999))))
>>>93%k!+1/4D8b8H5W*!/.,!/6940%2#9*./."#9/!--9-!2#5E99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>W&(.[**%*E93%k!+1/459#!6.29.I!/#-&9b9(%21#1%"!-9!*+=0."#294H9+1N."5
0&&"$0$%"&3
0$$08*%&'(:2$050$0($"(0#'7:2&$3
3)&$0163.797="/4!*+E9.I(*.221%"59h>9*.#=*"r!-=.E
9999(!22
219#233%"&(80&(E2(0&)$*%&'
5"87:2&$0$%"&6
3.793%[N1-4(-!"E9?!9(-!"@59h>9?.N1-9*.2=-#2@E9999))))
$)923
3.79s=0(t!24+!--%"2E97-%!#89
999999999999(*1/.E97-%!#59h>97-%!#E
:"#2(8":9421(3$%446
993.79(*%/.22X1-.24;71-.2E9?%".9%*90%*.971-."!0.2@8
999993.-.#.E9?3.-.#.9:$."93%".@9M9X!-2.59h>9?!9,%%-.!"@E
!)$*"&(%'&"#23(0&&"$0$%"&3
3$"#25(%&(CC!""%#!#1%"2CC
+#5(90#$)($""43
2,',"9$%:%M2#3P(5"83P(BTr3P(
40&'70'2(E#%5'23P($)928*28@%&'P(,,,
7="/%,P)7="/C;
!
2g7="/C4);5gCCuDCCg
2to3
L423
$21$(?3(E%&0#)
$21$(L423(:73$(*0?2(2&8"5%&'9#"57823(7&%8"52
E%&0#)(L423(9#"5782(E)$23$#%&'3
&2D(B>R(40)2#
3$5%"(%3(3$5
E7$(@%&50(,,,&"$('""5
#0D(B>RE7t2#25(B>R
$21$(B>R
./`3
W.I#v^a!2.
a=77.*.3v^a!2.
l!:v^a!2.
2,',(X1-.v^
Z%/6.#v^
a&#.2v^044(%:942:2&$l!:v^a!2.
)"7(9#"E0E4)(5"&F$(&225($"(80#2
21829$(;"#6
>>>9%(."4Tg#0(g7%jj1.T89T:T5
K1%)W.I#v^G*!((.*9%,P./#9!#9QIH/bwxQ>
>>>9%(."4Tg#0(g7%jj1.T89T:,T5
K1%)a=77.*.3G*1#.*9%,P./#9!#9QIH,x/wQ>
>>>9%(."4Tg#0(g7%jj1.T89T*,T5
K1%)a=77.*.3l.!3.*9%,P./#9!#9QIH/bwxQ>
:"57423
0E3"47$2(%:9"#$3
10(%*#97%%04D0)3(%:9"#$3(;#":($*2($"9(
42?24
%:9"#$(;#":(30:2(908@0'26
7*%09)910(%*#97%%
%:9"#$(;#":(90#2&$6
7*%09))910(%*#97%%
<,=
7*%09CC7=#=*.CC9
10(%*#9!,2%-=#.C10(%*#
E7%4$%&3
04#205)(8"?2#256:09P(L4$2#P(M%9P(9#%&$
2to3
&2D(E7%4$%&6(.I./45#29408239.I./93$:$
2to3
/!--!,-.45
K73$(8044(%$
"#(8*28@(;"#(uu8044uu
2to3
,=77.*45
!
0.0%*&N1.:45
2to3
E7t2#XY($2#:%&044)(E#"@2&
3$54%E
'"0436!r!(U(8":94%0&823":2(3$#78$7#2
8420&%&'("7$(8#7;$
!r!(---U
]c"57423(3*"745(*0?2(3*"#$P(044O4"D2#8032(&0:23,^
,,,""93
/032vQQ!a2#?2#8!%8@42
8a$#%&'BRvQcC!0#32#
,,,,
2%$*2#(#2&0:25P("#(
3$#78$7#2
87##2&$(3$#78$7#26
5794%80$%"&3
0&5(&20#(5794%80$%"&
,233,9+3,093,093=0,3,0
7#44%E?3
7#44%E<
8420&%&'($*%3(3$7t(79
&2D(908@0'236
$##(
$#0-
I0-*(/
P2%"
3,0
=*--1,
4"$3(";(#2&0:23
/Z#*1"+v^9⇒91%)Z#*1"+v^
4"$3(";(#2&0:23
Z%/6.#Z.*N.*9⇒92%/6.#2.*N.*
*$$94%E("(*$$9,84%2&$
7#44%E(0&5(7#44%E<(:2#'25&2D(908@0'2
&2D(908@0'26
$##(
$##((8"&$2&$3/-1."#
2.*N.*
/%%61.2
/%%61.P!*
8#7;$
]E0$$2#%23(%&847525^
3":2(";($*2(E0$$2#%23"45(0&5(E73$25
4"$3(";(97#'232,',
"45(2:0%4(:"57423"45(*03*(:"57423
"45(940$;"#:(:"57423
#$*.!3('"&2732(#$*.!31"+
q32#T%8$(0&5(;#%2&53
!
37E84033(;#":(5%8$
<$"+("&4)(80$8*23(3":2(";($*232
D0#&("&(%:9"#$(%&(<,=
9"#$%&'(099#"08*
$0@2(<,Z(8"52'2$(D"#@%&'("&(<,=$7#&("&(O+(w0'D*%42(Q#726(((((#7&($*#"7'*(<$"+(((((#7&(7&%$($23$3(7&52#(+,-(((((L1(<,1(8"52
2?2&$7044),,,5#"9(<,1(?2#3%"&
3D%$8*($"(+,1(?2#3%"&
$*%&'3($*0$(0#2(&"$('""5
;D5(8":90$(";(:"57423
7'4)(L16
1792&2)N.*21%"C1"7%9K94H8Q8Q5E
((((((7*%09$##(-1,910(%*#9\WWsn%""./#1%".-2.E
997*%09$##()/-1."#910(%*#9\WWsn%""./#1%"
9%8@42O8":90$%E%4%$)
+#5(90#$)(9@'3
043"(&225(7950$23
`(.!B(8*0&'25P($""
%;()"7(0#2(0(9@'(07$*"#
942032(5"&F$(E#20@()"7#(.!B(%&(+,-(8":90$(?2#3%"&
$2:9$0$%"&6]3%&82(+,1(%3(E#20@%&'(2?2#)$*%&'(0&)D0)^
)"7#(732#3(D%44(*0$2()"7
5"7E42O79'#052P()7@
$*%&'3(&"$(%&(9)+@
8032(%&32&3%$%?%$)520$*($"(40:E50
%:94%8%$(324;:08#"3
&"$(0(8":942$2(#2D#%$2
&"$(#2D#%$%&'($*2(&2D(xc
"$*2#(%:942:2&$0$%"&3(0#2(5"%&'($*0$
`!)$*"&(%3(#2;2#2&82(%:942:2&$0$%"&
$*2(;7$7#2
+,-(%3($*2("&2(8*0&82'2$($*%&'3(#%'*$
5"&F$(21928$(0(b,-
<,1(&"$('"%&'(0D0)
<,y:"#2(+,1(8":90$
*
<,1,)E7'L1(#2420323
;"#(03(4"&'(03(&22525
)"7#(;7$7#2(940&3
942032($#)(+,-(E2$03
X%$F3(203%2#($"('2$(E7'L123(%&Y
$*%&@(0E"7$(+,-
<,1(%3(&"$('"%&'(0D0)
<,1(%3(&"$('"%&'(0D0)
D%44(8"&$%&72($"(E2(3799"#$25
<,y(%&(<-J-
:0%&$2&0&82(#2420323
E"$*(<,1(0&5(+,1
$*0$F3(%$(;"#(&"D
eW.