[Python-de] "Funktionalitaet" von Python
Dinu Gherman
gherman at darwin.in-berlin.de
Fri Aug 30 13:49:04 EDT 2002
Thilo Ernst <Thilo.Ernst at dlr.de>:
> In meinen Augen ist der eigentliche Hintergrund der, daß Python mehr
> und mehr Terrain auf Gebieten gewinnt, in denen traditionell den "ech-
> ten" funktionalen Sprachen wie Lisp und Scheme die Alleinherrschaft
> zukam - und zwar häufig nicht, weil sie funktional sind, sondern weil
> sie bis vor einigen Jahren die einzigen leistungsfähigen dynamischen
> Sprachen waren.
Das ist ein Punkt, den man zurecht hervorheben sollte!
> Auf einmal gibt es nun Sprachen wie Python, die mit den etablierten
> funktionalen Sprachen sehr viele Vorteile teilen (schneller Entwick-
> lungszyklus, Introspektion, vergleichbar hohes Abstraktionsniveau,
> usw.) ohne deren Nachteile (eher kryptische Syntax, höherer Ressour-
> cenbedarf im Gehirn, akademisch-praxisferne Reputation) mitzubringen.
Funktionale Sprachen sind halt Ausdruck von Mathematikern, die ihre Pro-
pleme moeglichst mathematisch zu formulieren versuchen, was voellig
opportun ist - nur: bekanntlich ist nicht jedes Problem in einer ge-
schlossenen mathematischen Formel darstellbar oder auch nur entscheid-
bar!
> In bezug auf praktische Aspekte wie Verfügbarkeit leistungsfähiger
> Bibliotheken, Standardisierung und Portabilität hat Python Sprachen
> wie Lisp und Scheme inzwischen weit hinter sich gelassen und ist
> dabei, das zu schaffen, was Lisp in vierzig Jahren nicht geschafft
> hat - zu einer "Mainstream"-Sprache zu werden.
Dein Wort in Gottes Ohr (und in das der Buch-Verleger und -Kaeufer)!
Lisp waere heute auch wesentlich verbreiteter, wenn sich die Community
nicht so frueh gespaltet haette! Richard P. Gabriels lesenswertes Buch
"Patterns of Software" gibt darueber sehr schoenen (und traurigen) Auf-
schluss... Aehnliches mag man evtl. von Smalltalk behaupten.
> Und das ist natürlich nicht so erfreulich für die "funktionale Gemein-
> de", die folglich versucht zu zeigen, daß Python (und im übrigen alle
> modernen Sprachen) erstens fast alle interessanteren Features von Lisp
> abgeschaut hat, zweitens aber erhebliche Mängel besitzt, die dazu
> führen dass es ihren bevorzugten Sprachen weit unterlegen bleiben muss
> - es ist ja nicht "wirklich funktional". In der Tat muß man als Python-
> Nutzer wohl dauerhaft auf echte Closures und "hygienische" Makros ver-
> zichten. Wie schwer dieser Verzicht allerdings wiegt, muß jeder Nutzer
> für sich (oder per Projekt) entscheiden.
Zu den "wirklichen" Vorteilen funktionaler Sprachen zaehle ich weniger
solche Features, als zwei unmittelbare Konsequenzen des Fehlens von Sei-
teneffekten: 1. eine viel einfachere Modularisierbarkeit und 2. eine
viel einfachere parallele Ausfuehrung. Beides bekommt man offenbar ge-
schenkt, wenn man den Gurus glauben darf auch mit schnellen Compilern.
> Die Artikel von Paul Graham (www.paulgraham.com) belegen recht anschau-
> lich diese durch den Siegeszug der imperativen dynamischen Sprachen aus-
> gelöste Sinnkrise in der Lisp-Community. Lisp wird dort z.B durch folgen-
> de Argumentation "gerettet": Höheres Abstraktionsniveau erlaubt kompak-
> teren Code (maximalen semantischen Gehalt pro Codezeile), und Code-Kom-
> paktheit muss immer das übergeordnete Optimierungsziel sein. Man darf
> folglich in einer modernen Sprache auf kein einziges leistungsfähiges
> Abstraktionsmittel (wir z.B. Lisp-Makros) verzichten. (Probleme wie die
> Lesbarkeit und Wartbarkeit solcher "maximal-kompakten" Programme werden
> allerdings nicht näher betrachtet :-)
Nix gegen kompakten Code, gell!? Der Unterschied ist, ob ich dabei ma-
thematische Konzepte "maximal-komprimiere" oder anwendungsbezogene (die
vermutlich seltener rein mathematischer Natur sind). Fuer mich ist fol-
gendes auch ultrakompakt und dennoch sehr lesbar und leistungsfaehig
(wenn auch leider noch nicht ausfuehrbar)! ;-)
from robots import *
from flat import *
class Hoover(CleaningRobot):
def clean(self, room):
try:
assert self.isCharged()
except AssertionError:
self.gotoRechargingStation()
self.goto(room)
self.clean()
self.gotoRechargingStation()
Um die oben genannten zwei Punkte (triviale Modularisierung und Paral-
lelisierung) irgendwie durch die funktionale Hintertuer zu erreichen,
muesste Guido nochmal auf die Welt kommen. Stackless versucht zumin-
dest letzteres ohne diesen "workaround"! ;-)
Mehr und mehr "funktionale Schmankerl" einzubauen, comprehensions,
closures und ich weiss nicht was, bringt Python letztlich nicht sehr
viel, ausser, dass man Idiome zur Reduktion von 2-3 Zeilen auf eine
bekommt... soooo viel ist das eigentlich nicht.
Dinu
More information about the Python-de
mailing list