Edit detail for PrednaskaGvRPythonInNewYorkII revision 2 of 1

2
Editor: nadvornix
Time: 2008/03/20 14:30:29 GMT+1
Note: překlep

changed:
-
::

 ===============================================================
 Guido van Rossum: Python in New York                           
                   Part II -- State of the Python Universe, 2006
 ===============================================================
 Google New York's Technical Speaker Series.                    
 Guido van Rossum giving his Python presentation                
 at the New York Google office on Wednesday, February 22nd 2006.
 http://video.google.com/videoplay?docid=60331183357868340      
 ===============================================================



Část II -- Stav pythonovského vesmíru, 2006
===============================================================

Guido van Rossum přednáší v prostorách firmy Google ve
středu 22. února 2006.

Jde o část přednášky, která bude v plném znění
přednesena na !PyCon 2006.


Python 2.5
==========
* alfa verze v květnu, release v září
  
  - alfa 1: 6. května 2006
  - alfa 2: 3. června 2006
  - alfa 3: 1. července 2006
  - beta 1: 29. července 2006
  - beta 2: 26. srpna 2006
  - rc 1:   16. září 2006
  - finální verze: 30. září 2006
  
  Může se to dokonce ještě urychlit.

* větev 2.4 taky není zatím mrtvá
  
  - 2.4.3 bude uvolněna před 2.5a1
  - 2.4.4 zhruba jako finální 2.5

Co tam bude nového
==================

* Jazyk
  
  - absolutní/relativní import (PEP 328)
  - podmíněné výrazy (PEP 308)
  - try/except/finally znovu spojenci (PEP 341)
  - výrazy s yield a vylepšení generátorů (PEP 342)
  - příkaz with (PEP 343)
  - revidované výjimky (PEP 352)
  - __index__ (PEP 357)

* Implementace
  
  - AST překladač ![Abstract Syntax Tree]
  - velikost objektů bude vyjádřena typem ssize_t
    místo int (PEP 353)
  - vylepšení volby -m (PEP 338)

* Knihovna
  
  - any()/all()
  - !ElementTree
  - a další


Absolutní/relativní import
==========================
    
Někdy nastanou situace, kdy jméno interního modulu (uvnitř
balíčku, tedy podadresáře) koliduje s jménem standardního
modulu. Podle pravidel se nejdříve hledá interní modul, což
ale brání možnosti použití standardního modulu.

Řešení spočívá v oddělení syntaxe pro absolutní a relativní
import. Nová syntaxe vede k zpětné nekompatibilitě, takže se
bude povolovat explicitně přes __future__. Příklady::

 import foo            # hledá se JEN v sys.path
 from . import foo     # hledá se JEN v aktuálním balíku
 from .. import foo    # hledá se v rodičovském balíku
 from .bar import foo  # hledá se v balíku bar
 from ..bar import foo # hledá se v sourozenci balíku bar

atd. Povolen je libovolný počet úvodních teček.


Podmíněné výrazy
================

* Debatovalo se o tom před pár lety. Problematika znovu
  otevřena. Používání obratu "PODMÍNKA and VÝRAZ1 or VÝRAZ2"
  vede k chybám při VÝRAZ1 vyhodnocený jako False.
* GvR navrhuje "VÝRAZ1 if PODMÍNKA else VÝRAZ2"
* Odmítnuta celá řada alternativ. (C styl je považován za
  příliš kryptický, přidávání dalších klíčových slov se také
  nezvažuje.)
* Doporučuje se používat zřídka. Používání klasické
  konstrukce if/else je často lepší. 

try/except/finally znovu spojenci
=================================

Momentálně nelze používat finally a except dohromady. GvR
měl kdysi potíže s implementací a současné použití se mu
jevilo v některých případech nejednoznačné. Java ukázala, že
tam žádná nejednoznačnost není.

Kdysi dříve Python konstrukci::

  try:
      BLOK1
  except:
      BLOK2
  finally:
      BLOK3

... umožňoval, ale tato možnost byla u novějších verzí
odstraněna. Po revizi bude tento syntaktický zápis znovu
povolen.


Vylepšení generátorů
====================

Inspirace případy použití generátorů pro vstup/výstupní
operace. Inspirace jazykem Ruby.

* yield může být použit jako výraz
* yield bez argumentu je totéž jako "yield None"
* g.send(hodnota) zašle generátoru hodnotu
* g.throw(výjimka) vyvolá výjimku ![v kontextu použití yield]
* g.close() vyvolá !GeneratorExit (a odchytí si ji)
* když se generátor dostane do pařátů garbage collectoru, 
  provede se close()    
* yield ![zatím] nelze použít uvnitř try/finally


with
====

Netriviální záležitost, trocha magie; with jako blok,
správce kontextu (@contextmanager), zpracování výjimek.

Mutex jako inspirace i jako první kandidát pro využití with.


Revidované výjimky
==================

* Standardní výjimky se stanou třídami nového typu.
* Nová kořenová třída: !BaseException

  - Stane se bázovou třídou pro !KeyboardInterrupt a !SystemExit.
    (Existují dobré důvody, proč tyto dvě výjimky nemají mít
    bázovou třídu Exception, ale právě !BaseException.)
  - Stane se bázovou třídou také pro Exception a vše pod
    touto třídou.
    
* Ve verzích po 2.5

  - budou zakázány výjimky používající řetězce
  - všechny výjimky musí dědit z !BaseException
  - Možná bude odstraněna holá forma příkazu "except:"
  - Cíle bude možné dosáhnout až během několika meziverzí.

__index__
=========

Nový protokol: "Pokud objekt reprezentuje index v
nestandardní reprezentaci, pak __index__() převádí tuto
nestandardní reprezentaci na standardní integer". Motivace
pochází s oblasti numerických výpočtů.


Překladač založený na abstraktních syntaktických stromech
=========================================================

Týká se vlastností implementace, nikoliv vlastností jazyka. 

Téměř se ho podařilo vypustit už v souvislosti s 2.4, ale
nebyl doladěný a blížil se naplánovaný termín vypuštění
verze. 

* Co to je?

  - zcela nový překladač bajtkódu
  - používá ABSTRAKTNÍ syntaktické stromy místo KONKRÉTNÍCH
  
* Proč?  

  - nový překladač se snadněji upravuje
    (užitečnost se již prokázala při úpravách try/except/finally)
  - ke strukturám AST lze přistupovat i s pythonovského kódu
    To znamená, že lze přímo prostřednicvím pythonovského
    kódu experimentovat z modifikacemi bajtkódu, pokusně
    vytvářet nové varianty jazyka a podobně. 
    
    
ssize_t
=======

Opět záležitost implementace. ssize_t odpovídá celočíselnému
znaménkovému typu, který zabírá stejný počet bajtů jako
ukazatel v jazyce C. To znamená, že například u 64bitového
kódu reprezentuje větší čísla, než typ long v jazyce C.


-m <package>.<module>
=====================

Přímé spuštění modulu v balíku. Využije se například při
spouštění regresních testů Pythonu, které jsou součástí jeho
zdrojových textů.


Novinky v knihovně 2.5
======================

* Nové zabudované funkce: any(), all()

  - if any(x > 0 for x in S):  ...
  - if all(P(x) for x in S): ...
  - Umožňují používat generátorové výrazy
  
    * ale pracují s libovolnými iterátory a iterable
    
  - Sémantika zkrácených výrazů (jako u and/or operátorů)
  
    * Zastaví při prvním nevyhovujícím případu,
    * ale nevyhovující případ není zpřístupněn, ![protože]
    * vedlo by to k mnoha podivnostem...
    
      - all() by muselo vracet True nebo případ, který vede k false.
        
* Nové moduly:

  - funkcional: partial()
  - hashlib: MD-5, SHA-1, -224, -256, -384, -512
  - cProfile: lepší profiler, rychlejší, menší režie
  - ![c]!ElementTree: lepší XML API
  
    * Fredrik Lundh, třetí strana
    * !ElementTree implementován v Pythonu
    * cElementTree je rychlejší
    * from xmlcore.etree import !ElementTree
  
* Doufejme, že také:
                                                
  - ctypes: volání libovolného C kódu z DLL nebo sdílené knihovny (sharelib)
  - wstiref ![?]: infrastruktura pro standardní web framework
  - setuptools: snadná správa balíků
  - bdist_msi, bdist_deb?, bdist_egg???: pro distutils      
  
(konec)


===============================================================
Guido van Rossum: Python in New York
                  Part II -- State of the Python Universe, 2006
===============================================================
Google New York's Technical Speaker Series.
Guido van Rossum giving his Python presentation
at the New York Google office on Wednesday, February 22nd 2006.
http://video.google.com/videoplay?docid=60331183357868340
===============================================================

Část II -- Stav pythonovského vesmíru, 2006

Guido van Rossum přednáší v prostorách firmy Google ve středu 22. února 2006.

Jde o část přednášky, která bude v plném znění přednesena na PyCon 2006.

Python 2.5

  • alfa verze v květnu, release v září

    • alfa 1: 6. května 2006
    • alfa 2: 3. června 2006
    • alfa 3: 1. července 2006
    • beta 1: 29. července 2006
    • beta 2: 26. srpna 2006
    • rc 1: 16. září 2006
    • finální verze: 30. září 2006

    Může se to dokonce ještě urychlit.

  • větev 2.4 taky není zatím mrtvá

    • 2.4.3 bude uvolněna před 2.5a1
    • 2.4.4 zhruba jako finální 2.5

Co tam bude nového

  • Jazyk
    • absolutní/relativní import (PEP 328)
    • podmíněné výrazy (PEP 308)
    • try/except/finally znovu spojenci (PEP 341)
    • výrazy s yield a vylepšení generátorů (PEP 342)
    • příkaz with (PEP 343)
    • revidované výjimky (PEP 352)
    • __index__ (PEP 357)
  • Implementace
    • AST překladač [Abstract Syntax Tree]
    • velikost objektů bude vyjádřena typem ssize_t místo int (PEP 353)
    • vylepšení volby -m (PEP 338)
  • Knihovna
    • any()/all()
    • ElementTree
    • a další

Absolutní/relativní import

Někdy nastanou situace, kdy jméno interního modulu (uvnitř balíčku, tedy podadresáře) koliduje s jménem standardního modulu. Podle pravidel se nejdříve hledá interní modul, což ale brání možnosti použití standardního modulu.

Řešení spočívá v oddělení syntaxe pro absolutní a relativní import. Nová syntaxe vede k zpětné nekompatibilitě, takže se bude povolovat explicitně přes __future__. Příklady:

import foo            # hledá se JEN v sys.path
from . import foo     # hledá se JEN v aktuálním balíku
from .. import foo    # hledá se v rodičovském balíku
from .bar import foo  # hledá se v balíku bar
from ..bar import foo # hledá se v sourozenci balíku bar

atd. Povolen je libovolný počet úvodních teček.

Podmíněné výrazy

  • Debatovalo se o tom před pár lety. Problematika znovu otevřena. Používání obratu "PODMÍNKA and VÝRAZ1 or VÝRAZ2" vede k chybám při VÝRAZ1 vyhodnocený jako False.
  • GvR navrhuje "VÝRAZ1 if PODMÍNKA else VÝRAZ2"
  • Odmítnuta celá řada alternativ. (C styl je považován za příliš kryptický, přidávání dalších klíčových slov se také nezvažuje.)
  • Doporučuje se používat zřídka. Používání klasické konstrukce if/else je často lepší.

try/except/finally znovu spojenci

Momentálně nelze používat finally a except dohromady. GvR měl kdysi potíže s implementací a současné použití se mu jevilo v některých případech nejednoznačné. Java ukázala, že tam žádná nejednoznačnost není.

Kdysi dříve Python konstrukci:

try:
    BLOK1
except:
    BLOK2
finally:
    BLOK3

... umožňoval, ale tato možnost byla u novějších verzí odstraněna. Po revizi bude tento syntaktický zápis znovu povolen.

Vylepšení generátorů

Inspirace případy použití generátorů pro vstup/výstupní operace. Inspirace jazykem Ruby.

  • yield může být použit jako výraz
  • yield bez argumentu je totéž jako "yield None"
  • g.send(hodnota) zašle generátoru hodnotu
  • g.throw(výjimka) vyvolá výjimku [v kontextu použití yield]
  • g.close() vyvolá GeneratorExit (a odchytí si ji)
  • když se generátor dostane do pařátů garbage collectoru, provede se close()
  • yield [zatím] nelze použít uvnitř try/finally

with

Netriviální záležitost, trocha magie; with jako blok, správce kontextu (@contextmanager), zpracování výjimek.

Mutex jako inspirace i jako první kandidát pro využití with.

Revidované výjimky

  • Standardní výjimky se stanou třídami nového typu.
  • Nová kořenová třída: BaseException
    • Stane se bázovou třídou pro KeyboardInterrupt a SystemExit. (Existují dobré důvody, proč tyto dvě výjimky nemají mít bázovou třídu Exception, ale právě BaseException.)
    • Stane se bázovou třídou také pro Exception a vše pod touto třídou.
  • Ve verzích po 2.5
    • budou zakázány výjimky používající řetězce
    • všechny výjimky musí dědit z BaseException
    • Možná bude odstraněna holá forma příkazu "except:"
    • Cíle bude možné dosáhnout až během několika meziverzí.

__index__

Nový protokol: "Pokud objekt reprezentuje index v nestandardní reprezentaci, pak __index__() převádí tuto nestandardní reprezentaci na standardní integer". Motivace pochází s oblasti numerických výpočtů.

Překladač založený na abstraktních syntaktických stromech

Týká se vlastností implementace, nikoliv vlastností jazyka.

Téměř se ho podařilo vypustit už v souvislosti s 2.4, ale nebyl doladěný a blížil se naplánovaný termín vypuštění verze.

  • Co to je?
    • zcela nový překladač bajtkódu
    • používá ABSTRAKTNÍ syntaktické stromy místo KONKRÉTNÍCH
  • Proč?
    • nový překladač se snadněji upravuje (užitečnost se již prokázala při úpravách try/except/finally)
    • ke strukturám AST lze přistupovat i s pythonovského kódu To znamená, že lze přímo prostřednicvím pythonovského kódu experimentovat z modifikacemi bajtkódu, pokusně vytvářet nové varianty jazyka a podobně.

ssize_t

Opět záležitost implementace. ssize_t odpovídá celočíselnému znaménkovému typu, který zabírá stejný počet bajtů jako ukazatel v jazyce C. To znamená, že například u 64bitového kódu reprezentuje větší čísla, než typ long v jazyce C.

-m <package>.<module>

Přímé spuštění modulu v balíku. Využije se například při spouštění regresních testů Pythonu, které jsou součástí jeho zdrojových textů.

Novinky v knihovně 2.5

  • Nové zabudované funkce: any(), all()
    • if any(x > 0 for x in S): ...
    • if all(P(x) for x in S): ...
    • Umožňují používat generátorové výrazy
      • ale pracují s libovolnými iterátory a iterable
    • Sémantika zkrácených výrazů (jako u and/or operátorů)
      • Zastaví při prvním nevyhovujícím případu,
      • ale nevyhovující případ není zpřístupněn, [protože]
      • vedlo by to k mnoha podivnostem...
        • all() by muselo vracet True nebo případ, který vede k false.
  • Nové moduly:
    • funkcional: partial()
    • hashlib: MD-5, SHA-1, -224, -256, -384, -512
    • cProfile: lepší profiler, rychlejší, menší režie
    • [c]ElementTree: lepší XML API
      • Fredrik Lundh, třetí strana
      • ElementTree implementován v Pythonu
      • cElementTree je rychlejší
      • from xmlcore.etree import ElementTree
  • Doufejme, že také:
    • ctypes: volání libovolného C kódu z DLL nebo sdílené knihovny (sharelib)
    • wstiref [?]: infrastruktura pro standardní web framework
    • setuptools: snadná správa balíků
    • bdist_msi, bdist_deb?, bdist_egg???: pro distutils

(konec)