Edit detail for RozhovorCast1 revision 1 of 1

1
Editor: pycz
Time: 2005/10/05 08:32:34 GMT+0
Note:

changed:
-
Rozhovor s Guido van Rossumem, část 1.
======================================

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 <mailto:honza(at)py(dot)cz>`_
:Date: 2005-10-05
:Copyright: Copyright (C) 2004-2005 `Jan Švec <mailto:honza(at)py(dot)cz>`_

Úvod
----

Guido van Rossum je autorem Pythonu, interpretovaného, interaktivního
objektově orientovaného programovacího jazyka. Guido na něm začal pracovat
koncem 80. let minulého na půdě Národního výzkumného institutu
pro matematiku a počítačové vědy v Nizozemí, v holandštině známém jako
:emphasis:`Centrum voor Wiskunde en Informatica` (CWI). Od svých prvních verzí
je Python velice populární mezi vývojáři, které přitahuje především čistá
syntaxe a pověst jazyka s vysokou produktivitou.

V tomto rozhovoru Guido přibližuje hlavní cíle návrhu Pythonu, kořeny vysoké
produktivity programátorů a důsledky volně typového návrhu. A nejen to.

**Bill Venners**:
Jak byste Python popsal těm vývojářům, kteří ho nikdy nepoužívali?

**Guido van Rossum**:
Z jednoho úhlu pohledu je Python vysokoúrovňový skriptovací jazyk. Z jiného
úhlu pak můžeme mluvit o programovacím jazyce napsaném tak, aby podporoval
vývojáře v jejich činnosti. Python sdílí některé charakteristické znaky se
skriptovacími jazyky stejně jako s mnoha tradičními jazyky.

Vliv jazyka ABC na Python
-------------------------

**Bill Venners**:
Můžete nám krátce přiblížit historii Pythonu?

**Guido van Rossum**:
Počátkem 80. let jsem pracoval na půdě CWI jako implementátor v týmu
vytvářejícím jazyk nazývaný ABC. Nevím, jak moc lidé vnímají vliv jazyku ABC na
Python. Pokusím se proto nastínit vznik ABC, protože jemu a lidem, kteří na něm
pracovali, jsem vděčný za mnoho zkušeností.

Jazyka ABC měl velmi jasné a chytré určení. ABC byl jazykem pro výuku
inteligentních lidí, kteří ale nebyli programátory nebo vývojáři software.
Koncem 70. let vyučovali autoři ABC tradiční programovací jazyky. Mezi jejich
studenty patřili různí vědci -- od fyziků přes humanisty až po jazykovědce --
kteří ke svému studiu potřebovali tehdejší sálové počítače.  Přestože se
jednalo o ve svém oboru kapacity, tito studenti byli překvapeni různými
omezeními a svévolnými pravidly, která obsahuje mnoho tradičních jazyků. Na
základě těchto poznatků se pro ně rozhodli vytvořit nový jazyk.

Dalším zdrojem jejich zklamání byl jazyk Basic. V těchto dobách byl Basic
velice omezený. Ačkoli byl Basic určený stejné cílové skupině, neprogramátorům
používajícím počítače, vycházel z jiného návrhu. Ty verze Basicu, jež byly
tehdy dostupné, vypadaly opravdu strašně. Téměř každý zajímavý program v Basicu
byl plný nízkoúrovňových hacků. Například, pokud jste potřebovali změnit barvu
pozadí obrazovky na žlutou, museli jste změnit byte 714 v hlavní paměti.

**Bill Venners**:
Pamatuji si ty časy. Kdy jste na ABC začal pracovat vy?

**Guido van Rossum**:
Návrch ABC vznikl na přelomu 70. a 80. let. V roce 1983 jsem se stal členem
vývojového týmu. Myslím si, že jsme jazyk vyvíjeli do roku 1986 nebo 1987.  Z
mnoha různých důvodů však neměl projekt ABC velký úspěch. Možná přišel příliš
brzy před Internetem, jenž by mu zajistil efektivní distribuci.

Zrodil se Python
----------------

**Guido van Rossum**:
V roce 1986 jsem začal pracovat na dalším projektu CWI, na projektu Amoeba.
Amoeba byl distribuovaný operační systém. Na konci 80. let jsme potřebovali
skriptovací jazyk. V rámci projektu jsem měl velkou volnost a během práce na
hlavním projektu jsem začal vyvíjet vlastní mini projekt. Vzpomněl jsem si na
všechny zkušenosti a na některá zklamání s ABC.  Rozhodl jsem se navrhnout
jednoduchý skriptovací jazyk ovlivněný nejlepšími vlastnostmi jazyka ABC, ale
bez jeho největších problémů.

Tak jsem začal psát. Vytvořil jsem jednoduchý virtuální stroj, jednoduchý
parser a jednoduchý běhový systém. Použil jsem své vlastní verze těch částí
ABC, které jsem si oblíbil. Navrhl jsem jednoduchou syntaxi, použil jsem
odsazování pro seskupování příkazů namísto složených závorek nebo bloků
begin-end a vytvořil jsem několik mocných datových typů: asociativní pole
(neboli slovník, jak jej dnes nazýváme), seznamy, řetězce a čísla.

Vzal jsem ingredience z ABC a trochu jsem je promíchal. Python se v mnohém
podobal ABC, ale bylo zde také několik zásadních rozdílů. Seznamy, slovníky,
základní příkazy a použití odsazení, to vše ho odlišovalo od ABC.  ABC také
používalo velká písmena pro klíčová slova. Velká písmena se mi nikdy nelíbila,
ať už při čtení nebo při psaní, a proto jsem v Pythonu použil pro klíčová slova
písmena malá.

Myslím si ale, že největší úspěch Pythonu zajistila velice dobrá
rozšiřitelnost. Tu zapříčinila frustrace jazykem ABC. ABC mělo velmi
monolitický návrh, kde tým navrhující jazyk byli "bozi", kteří určovali další
vývoj. Tito lidé vytvářeli každý detail jazyka a neexistoval žádný způsob, jak
se k nim připojit. Mohli jste psát program, ale nemohli jste jednoduše přidávat
další funkce.

Například, velkým postrachem vývojářů software pro velké mainframy v 60., 70.
a 80. letech, byly vstupně/výstupní operace (V/V). Všechny V/V systémy byly
velmi komplikované. Návrháři ABC vyřešili problém uživatelů s V/V operacemi
velmi jednoduše - rozhodli se udělat něco úplně odlišného. Myslím si ale, že
šlo o chybný krok.

Narozdíl od V/V, kde můžete číst a zapisovat soubory, se omezili pouze na
globální proměnné. Jelikož uživatelé jazyka snadno pochopili koncept globálních
proměnných, rozhodli se udělat tyto proměnné prezistentními.  Pokud jste
ukončili sezení, systém uložil všechny globální proměnné do souboru na disk.
Pokud jste spustili nové sezení, všechny globální proměnné byly obnoveny.
Pracovalo to docela dobře. Je to obdobný nápad jako například Smalltalkovský
workspace. Krom toho v ABC existoval příkaz tisku, který zapisoval na
obrazovku, a příkaz vstupu, který četl z klávesnice, neexistovala však možnost
jak přesměrovat V/V do nebo ze souboru. V pravém slova smyslu ABC nemělo žádný
přístup ke V/V operacím.

Mezitím se osobní počítače staly běžně dostupnými a veškeré softwarové balíky
byly dodávány v souborech a se soubory také pracovaly. Měli jste soubory z
tabulkového procesoru, textového editoru nebo grafického editoru.  A uživatelé
ABC chtěli psát takové programy, které by vzaly část dokumentu a vložily by ji
zpět do tabulky, nebo prováděly s těmito daty cokoli jiného. Ale to nešlo právě
kvůli omezení V/V.

**Bill Venners**:
Chtěli zpracovávat soubory.

**Guido van Rossum**:
Chtěli zpracovávat data a ta byla uložena v souborech. To bylo velmi obtížné,
protože jazyk prostě neměl soubory v základním návrhu.

Rozšiřitelnost Pythonu
----------------------

**Guido van Rossum**:
Ještě větším údělem ABC, daleko větším než chybějící podpora pro práci se
soubory, byla obtížná rozšiřitelnost jazyka. Kdekdo by si řekl: "Jelikož tento
jazyk je implementován v C, vytvořme funkci, která otevře soubor." To byl ale
problém, protože ABC postrádalo koncept standardních knihoven. Mělo pouze
integrované příkazy, jež rozpoznal parser, a vestavěné funkce, které byly však
velmi úzce svázány s běhovým prostředím. Proto bylo rozšiřování standardního
prostředí tak obtížné.

V Pythonu považuji rozšiřitelnost za skvělou věc. Python jsme již od začátku
chtěli používat na rozdílných platformách, především v prostředí Amoeba --
operačním systému, který jsme vyvíjeli -- a na UNIXu -- operačním systému,
který jsme používali na svých stolních počítačích. Dále jsme chtěli podporovat
i Windows a systémy Macintosh. Zajistili jsme, že ke každému z těchto systémů
se bude přistupovat stejným způsobem, jako třeba ke standardní IO knihovně v C.
Pokud budete chtít kreslit na obrazovku v systému Windows, musíte však použít
jiný kód a jiný programovací model než v případě, kdy chcete naprogramovat
totéž nad Macintoshem nebo UNIXem.

Proto jsem vymyslel flexibilní a rozšiřitelný model Pythonu podle následujícího
hesla: "V jazyce budeme používat mnoho vestavěných datových typů jako jsou
slovníky, seznamy, různé typy čísel a řetězce. Ostatním programátorům ale
umožníme jednoduše přidávat nové typu objektů."

ABC také nemělo jmenné prostory, protože bylo navrženo jako jazyk pro malé
aplikace. Mělo pouze funkce a procedury. Nemohli jste je dost dobře spojovat
dohromady. Později byl přece jen mechanismus prostorů jmen přidán, ale myslím
si že byl velmi nemotorný. A protože jsem měl nějaké zkušenosti s jazyky
Modula-2 a Modula-3, stal se hlavní programovací jednotkou Pythonu modul.

V Pythonu lze mít dva odlišné typy modulů: moduly, které můžete napsat v
Pythonu, ale stejně tak ty, které můžete vytvořit celé v jazyce C. A tyto
moduly mohou definovat nové typy a další objekty. Ukázalo se, že jde o výborný
nápad, protože moji kolegové z CWI, uživatelé jazyka, ihned začali psát nové
rozšiřující moduly. Rozšiřující moduly umožňují provádět širokou škálu úkolů:
komunikovat s grafickými knihovnami, síťovými knihovnami a pracovat s
rozličnými souborovými formáty.

**Bill Venners**:
Takže, pokud napíšu modul v C, mohu ho používat z mého programu v Pythonu a
jeho typy budou vypadat jako Pythonové typy?

**Guido van Rossum**:
Přesně tak. V Pythonu se moduly používají díky příkazu import. Import v Pythonu
pracuje trochu jinak než import v Javě, ale za oběma příkazy stojí stejná
myšlenka. Pokud zavádíte nějaký modul, systém ho začne vyhledávat podle
vyhledávací cesty. Jestliže chcete provést import `foo`, bude se na disku
hledat soubor `foo.py` nebo `foo.so` (popř.  `foo.dll` pod Windows).  `foo.py`
je kus zdrojového kódu v Pythonu. Tento zdrojový kód je zparsován a
interpretován. To zpřístupní funkce a/nebo třídy tohoto modulu samotnému
programu. Soubory `foo.so` nebo `foo.dll` zase obsahují zkompilovaný strojový
kód. Většinou jsou implementovány v C nebo C++, ale někteří lidé používají
třeba Fortran pro vytvoření vlastních rozšíření napojených na velké Fortranské
knihovny. Způsob zacházení s předkompilovaným strojovým balíčkem je z pohledu
Pythonu naprosto shodný se zacházením s obyčejnými moduly. Můžete je
importovat, prohlížet si jejich obsah a zjišťovat, co daný balíček obsahuje, a
pokud jste s modulem obeznámeni, můžete ho ihned začít používat.

Obsah
=====
 + RozhovorCast1 - Historie Pythonu
 + RozhovorCast2 - Cíle a návrh Pythonu
 + RozhovorCast3 - Rapidní vývoj v Pythonu
 + RozhovorCast4 - Závazky v programování
 + RozhovorCast5 - Statické vs. dynamické typování
 + RozhovorCast6 - Veřejné API jazyka Python



Rozhovor s Guido van Rossumem, část 1.

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

Úvod

Guido van Rossum je autorem Pythonu, interpretovaného, interaktivního objektově orientovaného programovacího jazyka. Guido na něm začal pracovat koncem 80. let minulého na půdě Národního výzkumného institutu pro matematiku a počítačové vědy v Nizozemí, v holandštině známém jako Centrum voor Wiskunde en Informatica (CWI). Od svých prvních verzí je Python velice populární mezi vývojáři, které přitahuje především čistá syntaxe a pověst jazyka s vysokou produktivitou.

V tomto rozhovoru Guido přibližuje hlavní cíle návrhu Pythonu, kořeny vysoké produktivity programátorů a důsledky volně typového návrhu. A nejen to.

Bill Venners: Jak byste Python popsal těm vývojářům, kteří ho nikdy nepoužívali?

Guido van Rossum: Z jednoho úhlu pohledu je Python vysokoúrovňový skriptovací jazyk. Z jiného úhlu pak můžeme mluvit o programovacím jazyce napsaném tak, aby podporoval vývojáře v jejich činnosti. Python sdílí některé charakteristické znaky se skriptovacími jazyky stejně jako s mnoha tradičními jazyky.

Vliv jazyka ABC na Python

Bill Venners: Můžete nám krátce přiblížit historii Pythonu?

Guido van Rossum: Počátkem 80. let jsem pracoval na půdě CWI jako implementátor v týmu vytvářejícím jazyk nazývaný ABC. Nevím, jak moc lidé vnímají vliv jazyku ABC na Python. Pokusím se proto nastínit vznik ABC, protože jemu a lidem, kteří na něm pracovali, jsem vděčný za mnoho zkušeností.

Jazyka ABC měl velmi jasné a chytré určení. ABC byl jazykem pro výuku inteligentních lidí, kteří ale nebyli programátory nebo vývojáři software. Koncem 70. let vyučovali autoři ABC tradiční programovací jazyky. Mezi jejich studenty patřili různí vědci -- od fyziků přes humanisty až po jazykovědce -- kteří ke svému studiu potřebovali tehdejší sálové počítače. Přestože se jednalo o ve svém oboru kapacity, tito studenti byli překvapeni různými omezeními a svévolnými pravidly, která obsahuje mnoho tradičních jazyků. Na základě těchto poznatků se pro ně rozhodli vytvořit nový jazyk.

Dalším zdrojem jejich zklamání byl jazyk Basic. V těchto dobách byl Basic velice omezený. Ačkoli byl Basic určený stejné cílové skupině, neprogramátorům používajícím počítače, vycházel z jiného návrhu. Ty verze Basicu, jež byly tehdy dostupné, vypadaly opravdu strašně. Téměř každý zajímavý program v Basicu byl plný nízkoúrovňových hacků. Například, pokud jste potřebovali změnit barvu pozadí obrazovky na žlutou, museli jste změnit byte 714 v hlavní paměti.

Bill Venners: Pamatuji si ty časy. Kdy jste na ABC začal pracovat vy?

Guido van Rossum: Návrch ABC vznikl na přelomu 70. a 80. let. V roce 1983 jsem se stal členem vývojového týmu. Myslím si, že jsme jazyk vyvíjeli do roku 1986 nebo 1987. Z mnoha různých důvodů však neměl projekt ABC velký úspěch. Možná přišel příliš brzy před Internetem, jenž by mu zajistil efektivní distribuci.

Zrodil se Python

Guido van Rossum: V roce 1986 jsem začal pracovat na dalším projektu CWI, na projektu Amoeba. Amoeba byl distribuovaný operační systém. Na konci 80. let jsme potřebovali skriptovací jazyk. V rámci projektu jsem měl velkou volnost a během práce na hlavním projektu jsem začal vyvíjet vlastní mini projekt. Vzpomněl jsem si na všechny zkušenosti a na některá zklamání s ABC. Rozhodl jsem se navrhnout jednoduchý skriptovací jazyk ovlivněný nejlepšími vlastnostmi jazyka ABC, ale bez jeho největších problémů.

Tak jsem začal psát. Vytvořil jsem jednoduchý virtuální stroj, jednoduchý parser a jednoduchý běhový systém. Použil jsem své vlastní verze těch částí ABC, které jsem si oblíbil. Navrhl jsem jednoduchou syntaxi, použil jsem odsazování pro seskupování příkazů namísto složených závorek nebo bloků begin-end a vytvořil jsem několik mocných datových typů: asociativní pole (neboli slovník, jak jej dnes nazýváme), seznamy, řetězce a čísla.

Vzal jsem ingredience z ABC a trochu jsem je promíchal. Python se v mnohém podobal ABC, ale bylo zde také několik zásadních rozdílů. Seznamy, slovníky, základní příkazy a použití odsazení, to vše ho odlišovalo od ABC. ABC také používalo velká písmena pro klíčová slova. Velká písmena se mi nikdy nelíbila, ať už při čtení nebo při psaní, a proto jsem v Pythonu použil pro klíčová slova písmena malá.

Myslím si ale, že největší úspěch Pythonu zajistila velice dobrá rozšiřitelnost. Tu zapříčinila frustrace jazykem ABC. ABC mělo velmi monolitický návrh, kde tým navrhující jazyk byli "bozi", kteří určovali další vývoj. Tito lidé vytvářeli každý detail jazyka a neexistoval žádný způsob, jak se k nim připojit. Mohli jste psát program, ale nemohli jste jednoduše přidávat další funkce.

Například, velkým postrachem vývojářů software pro velké mainframy v 60., 70. a 80. letech, byly vstupně/výstupní operace (V/V). Všechny V/V systémy byly velmi komplikované. Návrháři ABC vyřešili problém uživatelů s V/V operacemi velmi jednoduše - rozhodli se udělat něco úplně odlišného. Myslím si ale, že šlo o chybný krok.

Narozdíl od V/V, kde můžete číst a zapisovat soubory, se omezili pouze na globální proměnné. Jelikož uživatelé jazyka snadno pochopili koncept globálních proměnných, rozhodli se udělat tyto proměnné prezistentními. Pokud jste ukončili sezení, systém uložil všechny globální proměnné do souboru na disk. Pokud jste spustili nové sezení, všechny globální proměnné byly obnoveny. Pracovalo to docela dobře. Je to obdobný nápad jako například Smalltalkovský workspace. Krom toho v ABC existoval příkaz tisku, který zapisoval na obrazovku, a příkaz vstupu, který četl z klávesnice, neexistovala však možnost jak přesměrovat V/V do nebo ze souboru. V pravém slova smyslu ABC nemělo žádný přístup ke V/V operacím.

Mezitím se osobní počítače staly běžně dostupnými a veškeré softwarové balíky byly dodávány v souborech a se soubory také pracovaly. Měli jste soubory z tabulkového procesoru, textového editoru nebo grafického editoru. A uživatelé ABC chtěli psát takové programy, které by vzaly část dokumentu a vložily by ji zpět do tabulky, nebo prováděly s těmito daty cokoli jiného. Ale to nešlo právě kvůli omezení V/V.

Bill Venners: Chtěli zpracovávat soubory.

Guido van Rossum: Chtěli zpracovávat data a ta byla uložena v souborech. To bylo velmi obtížné, protože jazyk prostě neměl soubory v základním návrhu.

Rozšiřitelnost Pythonu

Guido van Rossum: Ještě větším údělem ABC, daleko větším než chybějící podpora pro práci se soubory, byla obtížná rozšiřitelnost jazyka. Kdekdo by si řekl: "Jelikož tento jazyk je implementován v C, vytvořme funkci, která otevře soubor." To byl ale problém, protože ABC postrádalo koncept standardních knihoven. Mělo pouze integrované příkazy, jež rozpoznal parser, a vestavěné funkce, které byly však velmi úzce svázány s běhovým prostředím. Proto bylo rozšiřování standardního prostředí tak obtížné.

V Pythonu považuji rozšiřitelnost za skvělou věc. Python jsme již od začátku chtěli používat na rozdílných platformách, především v prostředí Amoeba -- operačním systému, který jsme vyvíjeli -- a na UNIXu? -- operačním systému, který jsme používali na svých stolních počítačích. Dále jsme chtěli podporovat i Windows a systémy Macintosh. Zajistili jsme, že ke každému z těchto systémů se bude přistupovat stejným způsobem, jako třeba ke standardní IO knihovně v C. Pokud budete chtít kreslit na obrazovku v systému Windows, musíte však použít jiný kód a jiný programovací model než v případě, kdy chcete naprogramovat totéž nad Macintoshem nebo UNIXem?.

Proto jsem vymyslel flexibilní a rozšiřitelný model Pythonu podle následujícího hesla: "V jazyce budeme používat mnoho vestavěných datových typů jako jsou slovníky, seznamy, různé typy čísel a řetězce. Ostatním programátorům ale umožníme jednoduše přidávat nové typu objektů."

ABC také nemělo jmenné prostory, protože bylo navrženo jako jazyk pro malé aplikace. Mělo pouze funkce a procedury. Nemohli jste je dost dobře spojovat dohromady. Později byl přece jen mechanismus prostorů jmen přidán, ale myslím si že byl velmi nemotorný. A protože jsem měl nějaké zkušenosti s jazyky Modula-2 a Modula-3, stal se hlavní programovací jednotkou Pythonu modul.

V Pythonu lze mít dva odlišné typy modulů: moduly, které můžete napsat v Pythonu, ale stejně tak ty, které můžete vytvořit celé v jazyce C. A tyto moduly mohou definovat nové typy a další objekty. Ukázalo se, že jde o výborný nápad, protože moji kolegové z CWI, uživatelé jazyka, ihned začali psát nové rozšiřující moduly. Rozšiřující moduly umožňují provádět širokou škálu úkolů: komunikovat s grafickými knihovnami, síťovými knihovnami a pracovat s rozličnými souborovými formáty.

Bill Venners: Takže, pokud napíšu modul v C, mohu ho používat z mého programu v Pythonu a jeho typy budou vypadat jako Pythonové typy?

Guido van Rossum: Přesně tak. V Pythonu se moduly používají díky příkazu import. Import v Pythonu pracuje trochu jinak než import v Javě, ale za oběma příkazy stojí stejná myšlenka. Pokud zavádíte nějaký modul, systém ho začne vyhledávat podle vyhledávací cesty. Jestliže chcete provést import foo, bude se na disku hledat soubor foo.py nebo foo.so (popř. foo.dll pod Windows). foo.py je kus zdrojového kódu v Pythonu. Tento zdrojový kód je zparsován a interpretován. To zpřístupní funkce a/nebo třídy tohoto modulu samotnému programu. Soubory foo.so nebo foo.dll zase obsahují zkompilovaný strojový kód. Většinou jsou implementovány v C nebo C++, ale někteří lidé používají třeba Fortran pro vytvoření vlastních rozšíření napojených na velké Fortranské knihovny. Způsob zacházení s předkompilovaným strojovým balíčkem je z pohledu Pythonu naprosto shodný se zacházením s obyčejnými moduly. Můžete je importovat, prohlížet si jejich obsah a zjišťovat, co daný balíček obsahuje, a pokud jste s modulem obeznámeni, můžete ho ihned začít používat.

Obsah