...narychlo druhá část (tady už to dělám trochu pečlivěji, než první část). Základní informace jsem slepil z obsahu prezentovaných slajdů. Zkoušel jsem to opsat přesně, ale slajdy přes video nejsou nejlépe čitelné, takže tam můžou být chyby například v číslech PEP. Do hranatých závorek dávám vlastní poznámky.
Zdroj (10.3.2006): "Google New York's Technical Speaker Series." Guido van Rossum přednáší v prostorách firmy Google ve středu 22. února 2006. http://video.google.com/videoplay?docid=60331183357868340 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) (*) [nečitelná poznámka] - 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 [tomu moc nerozumím] 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ázobou 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) pepr Jan Suchý > Ahoj, tady je Guido naživo z konference Python in New York > konané 22.2.2006. > V prvním videu mluví o vzniku jazyka a cílech návrhu, v > druhém podrobně > o změnách, které budou ve verzi Pythonu 2.5 a 3.0, včetně > předpokládaného data uvedení nové verze 2.5. > tak si o užijte :-) > > http://video.google.com/videoplay?docid=-7758421725489622662 > http://video.google.com/videoplay?docid=60331183357868340 pepr Jan Suchý > Ahoj, tady je Guido naživo z konference Python in New York > konané 22.2.2006. > V prvním videu mluví o vzniku jazyka a cílech návrhu, v > druhém podrobně > o změnách, které budou ve verzi Pythonu 2.5 a 3.0, včetně > předpokládaného data uvedení nové verze 2.5. > tak si o užijte :-) > > http://video.google.com/videoplay?docid=-7758421725489622662 > http://video.google.com/videoplay?docid=60331183357868340 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
