[python] Buducnost Pythonu: lambda, map, filter

superman feed na centrum.cz
Pátek Listopad 10 12:46:14 CET 2006


> O osudu lambda se diskutovalo na comp.lang.python. Osobně jsem
> lambda nikdy nepotřeboval. Jakékoliv jeho použití v Pythonu
> se podle mě dá jednoduše přepsat bez lambda způsobem, který
> je proti lambda přehlednější a srozumitelnější.

Jako bych slyšel Javisty :-) Já jsem naopak člověk, který miluje 
syntakticky bohaté jazyky a logicky vystavěné jazyky (samozřejmě musí 
být dobře navržené), proto jsem miloval C++, proto miluju Python, proto 
jsem omezil Lisp a Javu. Jsem člověk, který má rád volnost a množství 
výrazových prostředků a dokážu je opravdu využít. Produkuji srozumitelné 
programy, až moc. To mi bohužel kazí kšefty.

Osobně lambda především omezuje zbytečné definice krátkých funkcí, které 
se použijí jednorázově. To může zpřehlednit maximálním způsobem zdrojový 
kód. Přepsat se samozřejmě dá všechno, protože je matematicky dokázáno, 
že jakýkoli algoritmus se dá napsat pouze s podmíněným skokem. Cokoli 
nad to je navíc, když půjdeme do teorie. Nicméně v teorii bych se nerad 
pohyboval a v praxi bych nerad připustil jazyk na dolní hranici 
teoretických vyjadřovacích možností.

> Přiřazení jako výraz působí komplikace protože se 
> v boolovských výrazech může poplést == s =.

To je bohužel problém Pythonu, že umožňuje do logických operátorů zavést 
i jiné, než logické typy. Tohle v jazycích nesnáším, tahle vlastnost je 
"error prone" a bohužel jí hodně tvůrců jazyka z nějakého, pro mě 
sadistického důvodu zavádí. Tohle bohužel dobře ošetřila Java, nebo 
Pascal, že logické operátory musejí mít jako operandy pouze logické 
typy. Pak rozhodně není žádný problém s = a ==. Takže problém, který 
popisujete je sekundární.

Díky té blbosti, že logické výrazy pracují i s nelogickými typy je 
Python závislý na kontextu. Tentýž výraz znamená něco jiného v podmínce 
a něco jiného mimo podmínku. Nechápu proč prostě dovolovat podmínky typu:

a = 2
if a:
   print "je to tam"

Já bych si přál jazyk, který striktně přikazuje napsat:

a = 2
if a != 0:
   print "je to tam"

Kdybych já byl Rossum a dělat Python s nekompatibilní syntaxí, tak mezi 
prvními by byl požadavek, že logické výrazy budou pracovat jen s 
logickým typem a nic jiného, než false a true do logických výrazů se 
nepovoluje. Tím by se vyloučilo spoustu chyb a přestal by být problém 
mezi = a ==, což by se mohlo okamžitě zavést, tedy přiřazení by mohlo 
být výrazem, ne příkazem jako je to teď.

> Python je procedurální a nikoliv funkcionální jazyk.
> Z funkcionálních zápisů v něm  fungují jen ty věci,
> které se dají JEDNODUŠE převést na procedurální postup.
> Jiné výhody funkcionálních jazyků zde odpadají (například
> automatická paralelizace výpočtu).

A taky se právě bavíme o tom, že i to, co zde z funkcinálního jazyka být 
může a je se má vyhodit. Tohle už není o tom, jaký je to jazyk. Jde o 
hrubé PORUŠENÍ ZPĚTNÉ KOMPATIBILITY jazyka, a pokud vím, zatím žádný 
jazyk tohle nepřežil ve zdraví. Já si opravdu za svých dvacet let co se 
v této oblasti pohybuji nepamatuji jediný jazyk, který by hrubě porušil 
zpětnou kompatibilitu a vzápětí nevymřel. Osobně nemám důvod si myslet, 
že Python 3000 nebude zároveň jeho R.I.P.. Právě plány s Pythonem 3000 
ve mě rozsvěcují varovné světélko a říkají, tak takhle končí jazyk.

> Navrhuji rozebrat několik případů, kde se používají
> lambda, map, filter, reduce a pohádat se o alternativním
> zápisu jinými prostředky jazyka Python ;-)

Já se nechci hádat o alternativním zápisu. Mě jsou takovéto hádky 
ukradené. Prostě lambda, map, filter, reduce tam v Pythonu již jsou a z 
toho vyplývá, že tam mají zůstat. A nebo tam neměly nikdy být. Tyhle 
hádky měly skutečný smysl v době návrhu jazyka, teď už jsou pasé.

Teď to tam je, a pak by tam podle Zen of Miloslav Ponkrác:

1) Budeš v maximální možné míře dodržovat zpětnou kompatibilitu
2) Jazyk, který kdy v historii hrubě porušil zpětnou kompatibilitu vymřel.

Tak podle tohoto Zenu nemá Python vůbec nárok tyto věci z jazyka vyhazovat.

A jinak cokoli se dá převést na podmíněný skok. Cokoli jiného je 
zbytečné, takže puristicky lze vyhodit toho z Pythonu spoustu. Tipuji, 
že 90% featur z Pythonu se dá zapsat jinými prostředky, záleží jen co si 
vezmete na paškál. Kdo chce psa bít, hůl si najde.

Miloslav Ponkrác


Další informace o konferenci Python