CodingCat hat geschrieben:Die dynamische Typisierung verhindert insbesondere eine effiziente Umsetzung von Attributzugriffen und Methodenaufrufen.
Im allgemeinen Fall ist dem natürlich so, allerdings hängt die Umsetzung stark vom Interpreter ab. IIRC werden in PyPy solche Zugriffe optimiert, so das kein Overhead mehr anfällt.
CodingCat hat geschrieben:Auch sonst fehlt eine statische Namensauflösung, die verhindert, dass undefinierte (oder falsch geschriebene) Variablen frühzeitig erkannt werden.
Ehrlich gesagt ist das für mich noch nie ein Problem gewesen und ich arbeite bereits seit sieben Jahren mit Python. Falsche Typen oder nicht vorhandene Namen werden immer durch Unittests abgefangen.
CodingCat hat geschrieben:Reine Objektbasierung ohne const-Korrektheit und damit Anfälligkeit für Fehler durch versehentliche Referenzierung (Abhilfe nur durch unveränderliche Typen; defensives Kopieren ist hoffentlich nur ein Witz von Unidozenten)
Dieses Verhalten ist beim Sprachdesign schon so gewünscht gewesen. Es gibt genau eine Art wie Parameter übergeben werden oder wie man auf Objekte zugreift: Referenzen; ohne const und mit allen Vor- und Nachteilen.
Die Unveränderlichen Typen sind auch keine Abhilfe gegen dieses Problem, sondern addressieren einen ganz anderen Bereich. Da in Python alle Namensauflösungen über Dictionaries laufen, sind die Zugriffe auf diesem Weg optimiert. Ansonsten kann man sich für Schlüsselvergleiche beliebig lange Laufzeiten einhandeln.
Kopien sind in Python tatsächlich relativ üblich, da sie einfach unglaublich billig sind. Eine Liste von Referenzen ist einfach schnell verdoppelt. Aber natürlich fängt niemand an in allen Funktionen nun wild alles zu kopieren um irgendwie Konstanten zu erhalten. Mit wenigen ausnahmen (wie zum Beispiel im fall von List Comprehensions) wird nur dann kopiert, wenn man in anderen Sprachen auch kopieren würde. In Python erfolgt dies lediglich explizit, wie viele andere Dinge auch (was übrigens auch ein gewünschtes Verhalten ist).
dot hat geschrieben:Python verwendet afaik Reference Counting, GC ist nur über eine Zusatzbibliothek verfügbar. Das war mir bis vor kurzem auch nicht bewusst, aber ich verwend python auch praktisch nie...
Richtig, Python verwendet Reference Counting. Falsch ist allerdings, dass man den GC über eine Zusatzbibliothek extra starten müsste. Über dieses Modul hat man lediglich weitere Kontrollmöglichkeiten über den GC. Ansonsten läuft der GC ganz normal im Hintergrund mit.
Entschuldigt diesen kleinen Ausflug, aber die Dinge wollte ich gerne richtigstellen.