Hlavní navigace

Co přinese chystaný Python 3.0?

Jakub Šťastný

Popularita Pythonu stále roste, projektů v něm přibývá, komunita se rozrůstá. Chystá se Python 3.0, který má přinést rozsáhlé změny a který si, co se zpětné kompatibility týče, servítky brát rozhodně nebude. Jaký bude nový Python? Co všechno přinese? Máme se těšit nebo se obávat?

Článek vychází ze zápisku v blogu tvůrce Pythonu o připravovaném Pythonu 3.0

Jak se celá situace vyvíjela?

Myšlenka tvorby nové, pokrokové, ale nekompatibilní verze začala na tvůrce Pythonu doléhat kolem roku 2000 na konferenci o Pythonu. Guido van Rossum si uvědomoval, že je třeba udělat jisté změny, které bohužel však nutně povedou k nekompatibilitě se současnou verzí. Zajímavostí je jméno projektu – ten byl pojmenován Python 3000, inspirován názvem Windows 2000, jak uvádí Guido. Dále se též můžete setkat se synonymním přízviskem Py3k, přičemž chystaná verze se bude jmenovat Python 3.0.

Zpočátku byl celý Python 3000 jen seznamem stížností a věcí, které by se měly udělat lépe, vlastní práce na něm započaly teprve zhruba před rokem a půl, když se stal Guido zaměstnancem společnosti Google a získal více času na vývoj Pythonu.

Sbohem, kompatibilito!

„Python 3.0 ukončí veškerou zpětnou kompatibilitu. Naprosto. Nehodláme zachovat ani základy. Samozřejmě že tu bude určitá kompatibilní část, která bude docela velká, ale nechceme se zaměřovat na snadnou, či vůbec možnou tvorbu programů v ní. Bude to jen sada vlastností, která se náhodou nezměnila mezi verzemi 2.6 a 3.0,” uvádí na svém blogu Guido van Rossum.

Je jasné, že zrušit zpětnou kompatibilitu a nechat to „jen tak” nelze. Guido slibuje dostupnost konverzního nástroje z Pythonu 2.6 a zřejmě i Pythonu 2.5 do nového Pythonu 3.0.

Dva hroznýši vedle sebe

Python 3.0 není jediná verze, která je v součastnosti vyvíjena. Paralelně vzniká Python 2.6, který má být oním hraničním kamenem mezi dvojkovou a trojkovou řadou. Bude zpětně kompatibilní s předchozími verzemi, zároveň již se bude snažit připravit půdu pro nadcházející Python 3.0 a bude s ním v některých oblastech dopředu kompatibilní.

První alfaverze Pythonu 3.0 je plánována na konec srpna, přičemž finální verzi lze očekávat v srpnu příštího roku. Finální verze Pythonu 2.6 vyjde o něco dříve, na jeho stabilní vydání se můžeme těšit několik měsíců před verzí 3.0, alfaverze má být k dispozici asi čtyři měsíce před ní. Pokud se vám zdá, že v tom případě vyjde alfa Pythonu 2.6 později než alfa Pythonu 3.0, máte pravdu.

Jaký bude přechod a co bude pak?

Python 2.6 bude, jak již jsem zmínil, jak zpětně kompatibilní s Pythonem 2.5, tak v některých ohledech též dopředu kompatibilní s Pythonem 3.0. V čem konkrétně bude tato předběžná kompatibilita spočívat?

Python 2.6 bude obsahovat Py3k mód varování, jehož cílem bude dynamicky upozorňovat na funkce, které již v Pythonu 3.0 nebudou. V Pythonu 2.6 bude obsaženo mnoho backportovaných Py3k vlastností dostupných z modulu __future__ či jednoduše povolením staré a nové syntaxe, aby se daly používat současně, tedy nebude-li zápis vyhovovat syntaxi Pythonu 2.6, zkusí jej interpret vyhodnotit podle syntaxe Pythonu příští generace.

Aby byl umožněn co nejsnazší přechod na novou generaci jazyka Python, bude k dispozici utilitka umožňující konverzi kódu v Pythonu 2.6 na kód v Pythonu 3.0. Tento prográmek bude zvládat bezkontextovou konverzi kódu. Složitější věci, jako je například analýza toku dat, typová analýza nebo rozlišení datového typu, však obsahovat nebude.

Co se týče přesného scénáře přechodu, Guido navrhuje toto:

  • Řádné otestování aplikace jednotkovými testy.
  • Portování projektu do Pythonu 2.6.
  • Zapnutí Py3k módu varování.
  • Testovat a upravovat, dokud nebudou veškerá varování eliminována.
  • Konverze projektu pomocí konverzní utility.
  • Testování pod Pythonem 3.0.

Co Guido plánuje?

Seznam změn v chystaném Pythonu 3.0 rozhodně malý není. Jaké jsou tedy nejdůležitější změny?

Velké změny čekají Python v oblasti implementace řetězců, binárních dat a v implementaci unicode. Python bude nyní používat systém známý z Javy, tedy neměnné textové řetězce budou interně reprezentovány v unicode a binární data zase jako oddělené a proměnlivé byty (tedy datový typ „bytes”). Krom toho parser bude přátelštější k unicode, za defaultní kódování bude bráno UTF-8 a dokonce v identifikátorech budou povoleny i jiné znaky než pouze ty v základní ASCII sadě. Ve standardní knihovně se však s unicode názvy nepotkáte.

Přepisu se nevyhne ani I/O knihovna, která se tak má jednak zbavit závislosti na céčkovské stdio.h, ale především je třeba, aby byla kompatibilní s plánovanými změnami. Textové streamy budou mít nový atribut „encoding” (kódování) a nová knihovna bude též jasně rozlišovat mezi textovými a binárními streamy.

Další změny postihnou tisknutí a formátování – print se nyní stane stane funkcí a formátování pomocí % bude nyní nahrazeno metodou format() řetězců.

Další dosti rozsáhlé změny se mají týkat například systému tříd, vypustění funkce reduce() či naopak příslib prozatimního zachování lambdy. Pro technické podrobnosti doporučuji přečíst si, jak to vidí autor Pythonu.

Odkazy

Anketa

Považujete předpokládané změny za změny k lepšímu?

Našli jste v článku chybu?