Rozhovor s Guido van Rossumem, část 2.

Autor jazyka Python Guido van Rossum odpovídá na otázky Billa Vennera o historii Pythonu, o vlivu jazyka ABC na vývoj Pythonu a o hlavních cílech při vývoji Pythonu.

Originál rozhovoru je dostupný na http://www.artima.com/intv/guido.html .

Author:Jan Švec
Date:2005-10-05
Copyright:Copyright (C) 2004-2005 Jan Švec

Hlavní cíle návrhu Pythonu

Bill Venners: Jaké byly vaše původní cíle při návrhu Pythonu? Vždy jsem si představoval, že jste chtěl vytvořit jazyk, jenž se dá velice snadno naučit. Maximalizoval jste produktivitu vývojáře vytvořením snadno čitelného a ještě snadněji zapisovatelného jazyka, ale podle vašeho popisu historie Pythonu to vypadá, že jste se snažil opravit věci, které vás trápily na ABC.

Guido van Rossum: Můj původní záměr bylo vytvořit druhý jazyk pro C nebo C++ programátory, kteří chtěli psát aplikace, pro něž by C nebylo příliš efektivní.

Bill Venners: Proč by bylo neefektivní?

Guido van Rossum: Protože se mohlo jednat o věci, které by se dělaly pouze jednou. Na mnoho věcí možná upřednostňujete shellové skripty, ale pokud se dostanete k implementaci detailů, zjistíte, že shell není příliš ideální jazyk -- potřebujete více datových struktur, více jmenných prostorů a možná větší rychlost. Proto možná jedna z přezdívek, které jsem slyšel na Python: Most přes propast mezi shellem a C.

Proto jsem Python nikdy nesměřoval jako primární jazyk pro programátory, přestože se pro mnoho lidí primárním jazykem stal. Byl určen jako druhý jazyk pro lidi, kteří již měli zkušenosti s programováním. Přesně tak to odrážel raný návrh jazyka. Jinými slovy jsem se podvědomě držel mnoha dobrých vlastností ABC, které z Pythonu udělaly výborný jazyk i pro lidi, kteří nejsou zkušenými programátory. Máme velkou komunitu lidí, kteří Python používají pro výukové účely. Jejich studenti nejsou a možná nikdy nebudou profesionální programátoři, ale přesto ve svém oboru programování k řešení nekterých úloh potřebují.

Překvapila vás rozšiřitelnost?

Bill Venners: Já Python používám pouze jako skriptovací jazyk, ale slyšel jsem o lidech, kteří ho používají více. Například Bruce Eckel ho používá jako svůj hlavní jazyk.

Guido van Rossum: Zope Corporation, kde pracuji, ho používá jako primární jazyk. Veškerý software Zope je napsán v Pythonu.

Bill Venners: A pro správu mailových konferencí na mém serveru používám program Mailman, který je také celý napsán v Pythonu.

Guido van Rossum: Ano, Mailman je ryzí Python.

Bill Venners: Přesto Mailman není skript. Spíše bych jej nazval aplikací nebo systémem.

Guido van Rossum: Určitě.

Bill Venners: Ze začátku jste řekl, že Python považujete za most mezi shellem a C. Překvapili vás lidé, jež ho používají také k vytváření aplikací nebo celých systémů? Změnilo se postupem času něco?

Guido van Rossum: Nemohu říci, že by mě to překvapilo, poněvadž se to událo postupně. Myslel jsem, že budeme psát malé programy, možná 10 řádek, možná 50, možná 500 řádek, což mělo být již opravdu hodně kódu. Naší prvotní představou byla univerzální knihovna modulů nabízející funkce pro řešení problémů, které se vyskytují zas a znova. Příkladem budiž nízkoúrovňový modul implementovaný v C poskytující přístup k soketům. Byli jsme šťastni, protože obdobné soketové API bylo dostupné i na Windows jako WinSock?. Najednou jsme měli platformně nezávislá soketová primitiva. Tato primitiva byla velmi nízkoúrovňová, ale nebyla na tak nízké úrovni jako v C, zbavili jsme se čísel jako souborových deskriptorů a namísto toho se soket stal objektem s množstvím metod. Všechny tyto metody odpovídají jednomu systémovému volání nad sokety a argumenty jsou většinou pouhé řetězce reprezentující nějaká data nebo třeba dvojice odpovídající jménu počítače a číslu portu.

Mimo jiné, v té době se Internet velmi rychle vyvíjel a rostl -- byla to raná 90. léta. Objevily se nové protokoly a vzniklo HTTP. Bylo jednoduché napsat implementace všech těchto protokolů jako čisté moduly Pythonu používající výše zmíněny soketový modul implementovaný v C. Podobně to dopadlo i v jiných oblastech, například s Numeric Pythonem. Numeric Python má také jádro napsané v C a poskytující efektivní numerické operace, přičemž pracuje stejně dobře jako vazby na již existující numerické knihovny. A na vrcholu Numericu opět můžete velmi jednoduchým způsobem implementovat seriozní matematické výpočty.

Python a velké aplikace

Bill Venners: Narazili jste na problémy se škálovatelností Pythonu v aplikacích velikosti Zope? Existuje nějaký limit? Řekl jste, že 500 řádek měl být velký program.

Guido van Rossum: To byla pouze ztráta mojí představivosti. Jedinou věc, kterou jsme do jazyka přidali, byl nový strukturovací mechanismus nad moduly. Počet modulů začal růst a každý uživatel začal vytvářet množství vlastních modulů, existovala možnost vzniku konfliktu jmen. Rozhodli jsme se tedy sloučit moduly v balíčky. A opět jsme použili obdobnou syntaxi jako Java, přestože způsob, jakým import pracuje se v detailech mírně liší. Tento přístup vám umožňuje použít stejnou hiearchickou strukturu modulů uvnitř podbalíčků hlavního balíčku; balíčky můžete zanořovat tak hluboko, jak je vám libo. Toto rozšíření příkazu import je jediná věc, kterou jsme museli udělat pro vývoj větších programů.

Před tím, než jsem začal pracovat pro Zope, tam lidé implementovali pár datových struktur za pomoci C. Na vrcholu tohoto C kódu pak napsali mechanismus perzistence a transakční objektovou databázi. Všechny implementační detaily byly vytvořeny již v čistém Pythonu. Také vytvořili -- což je myslím si velmi významné pro psaní větších programů -- koncept rozhraní, která se podobají implementaci rozhraní v Javě. Přestože byly napsány jako uživatelský add-on a jejich syntaxe není nejideálnější, fungují stoprocentně. Můžete říct, že určitá třída implementuje to a to rozhraní. Poté můžete testovat instance této třídy a zjišťovat, zda opravdu odpovídají protokolu, který toto rozhraní definuje. Můžete si nadefinovat i nová rozhraní, vaše rozhraní mohou dědit od ostatních ve vaší hiearchii atd.

Užitečnost soukromých struktur

Bill Venners: Můžete popsat diskusi týkající se bezvýznamnosti soukromých dat v Pythonu?

Guido van Rossum: Přidání soukromých struktur znamenalo jen malou změnu jazyka, která zároveň umožnila psaní rozsáhlejších programů. Jsou situace, kdy jsou soukromé struktury velmi užitečné, protože se můžete spolehnout na to, že máte svůj vlastní jmenný prostor, ale v mnoha případech jsou, myslím si, nadužívány.

Lidé, kteří se bojí, že někdo zavolá jejich kód se špatnými argumenty a kteří používají staticky-typové jazyky, jež těmto pokusům zabraňují na úrovni překladače, začnou myslet staticky. Začnou kontrolovat typ dat a myslí si, "Ó, to pracuje pouze pro řetězce, proto od teď budu vyžadovat, aby vstupem byl řetězec."

To je ale příklad špatného přístup, protože někdo může jednoduše implementovat cosi, co by dobře pracovalo s vaším kódem a chovalo by se podobně jako řetězce. Může to být proxy pro řetězce, která se v mnohém chová jako řetězce s výjimkou toho, že její typ je proxy. Něco podobného je použito v Zope. Mechanismus perzistence používá proxy stejně jako třeba bezpečnostní mechanismy, které spouští nedůvěryhodný kód odeslaný přes Web apod. Nedůvěryhodný kód je pak spouštěn v "pískovišti" za použití proxy pro objekty, jejichž kód nemůže být zpřístupněn přímo. To umožňují pouze benevolentní jazyky, které netrvají na typech tak, jako staticky typové jazyky.

Obsah