ich einen Vortrag Hinweis auf Haskell lesen, wenn ich auf diesem Absatz kam (http://www.seas.upenn.edu/~cis194/lectures/02-lists.html):Art Löschen in Haskell?
Dieses „nicht darum kümmern,“ ist das, was die „parametrisch“ in parametrischen Polymorphismus Mitteln. Alle Haskell-Funktionen müssen in ihren Typparametern parametrisch sein; Die Funktionen müssen auf der Grundlage der Auswahlmöglichkeiten für diese Parameter keine Bedeutung haben oder Entscheidungen treffen. Eine Funktion kann nicht eine Sache tun, wenn a Int ist und eine andere Sache, wenn a Bool ist. Haskell bietet einfach keine Möglichkeit, eine solche Operation zu schreiben. Diese Eigenschaft einer Sprache wird parametrisch genannt.
Es gibt viele tiefe und tiefgreifende Konsequenzen der Parameterik. Eine Konsequenz ist etwas, das als Typ-Löschung bezeichnet wird. Da ein ausgeführtes Haskell-Programm aufgrund von Typinformationen niemals Entscheidungen treffen kann, können alle Typinformationen während der Kompilierung gelöscht werden. Trotz wie wichtig Typen beim Schreiben von Haskell-Code sind, sind sie beim Ausführen von Haskell-Code völlig irrelevant. Diese Eigenschaft verleiht Haskell eine enorme Geschwindigkeitssteigerung im Vergleich zu anderen Sprachen wie Python, die Typen zur Laufzeit beibehalten müssen. (Typ Löschung ist nicht die einzige Sache, die Haskell schneller macht, aber Haskell getaktet manchmal zu 20x schneller als Python.)
Was ich nicht verstehe ist, wie „alle Haskell Funktionen“ parametrisch sind? Sind Typen in Haskell nicht explizit/statisch? Auch ich verstehe nicht wirklich, wie Typ Löschung verbessert
kompilieren Zeit
Laufzeit?
Entschuldigung, wenn diese Fragen wirklich grundlegend sind, bin ich zu Haskell neu.
EDIT:
Noch eine Frage: Warum hat der Autor sagt, dass „Trotz, wie wichtig Typen sind, wenn der Code Haskell schreiben, sie völlig irrelevant sind, wenn Haskell Code ausgeführt“?
Das Zitat behauptet niemals, dass "Typ löschen verbessert kompilieren Zeit", nur dass es hilft _runtime_ zu verbessern. – chi
Funktionen sind parametrisch, wenn Sie einen Typparameter 'a' haben, können Sie niemals' a' inspizieren und auf der Basis des Typs Entscheidungen treffen. Sie können also sicher sein, dass sich eine Funktion wie 'map' für alle Eingabelisten einheitlich verhält, so dass Sie den Listenelementtyp zur Laufzeit nicht pflegen müssen. Vergleichen Sie dies mit einer Sprache wie C#, mit der Sie den reellen Listenparametertyp zur Laufzeit durch Reflektion erhalten können. – Lee