OSCON 2008: Porting to Python 3.0

Preview:

DESCRIPTION

 

Citation preview

!"#$%&'($"(!)$*"&(+,-

.&$*"&)(/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:

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.