On 2024-08-11 13:48, Stefan Ram <r...@zedat.fu-berlin.de> wrote: > "Peter J. Holzer" <hjp-usen...@hjp.at> schrieb oder zitierte: >>On 2024-08-11 10:46, Stefan Ram <r...@zedat.fu-berlin.de> wrote: >>>"Zeiger" gibt es in C. >>"Zeiger" ist ein programiersprachenübergreifendes Konzept. > > Die Vorstellung einer programiersprachenübergreifenden Terminologie > führt immer wieder zu Begriffsverwirrungen. Letztendlich definiert > jede Programmiersprache ihre eigenen Begriffe.
Zweifellos, aber das ändert nichts daran, dass es die Konzepte programiersprachenübergreifend gibt. Es bringt nichts, so zu tun, als ob ein gebundener Name in Python etwas ganz anderes wäre als ein Pointer in Pascal. Beides sind Implementationen des gleichen Konzepts. Oder zu behaupten, dass entweder C oder Pascal einen Pointer falsch implementieren, weil beide Sprachen das gleiche Wort für etwas verwenden, das sich in (wichtigen!) Details unterscheidet. Man braucht eine Sprache, um über Programmiersprachen sprechen zu können. Natürliche Sprachen (auch Fachsprachen) haben nicht für jedes Konzept ein anderes Wort. Man muss im Kontext erkennen, ob mit "Pointer" gerade das Konzept des Pointers im Allgemeinen, ein Pointer in C oder einer in Pascal gemeint ist. Oder vielleicht etwas ganz anderes wie ein Mauszeiger. Wenn das nicht möglich ist, muss man das halt ergänzen oder eine lokale Terminologie definieren. >>Zeiger mögen in verschiedenen Programmiersprachen anders genannt >>werden und leicht unterschiedliche Eigenschaften haben (in C kann man >>z.B. damit rechnen, in den meisten anderen Sprachen nicht), aber das >>Grundkonzept gibt es fast überall. > > Zeiger gehören zum Laufzeitmodell, während Namen zum Quelltextmodell > gehören. > > Das heißt: Ein Zeiger ist ein Wert, der relevant ist, wenn man > beschreibt, was bei der Ausführung eines Programms passiert. > Er steht nicht im Quelltext. Ein Name ist umgekehrt etwas das > im Quelltext steht. Das ist eben bei Python nicht so. Der "Name" existiert sehr wohl zur Laufzeit, und die Bezeichnung "Name" wird auch nicht nur für Identifier verwendet, sondern für alles, was "gebunden" werden kann. > Mit dem Begriff "Bindung" drückt man aus, > daß eine Quelltextentität (Name) mit einer Laufzeit (Objekt) > verbunden ist. Die Language Reference ist meiner Meinung nach sehr klar darin, dass "binding operations" und "unbinding operations" Laufzeitoperationen sind, die auf Entitäten operieren, die zur Laufzeit existieren. >>>In Python sind Namen an Objekte /gebunden/. >>Das ist der übliche Jargon in Python, > > Das sind die /korrekten Fachbegriffe/ aus "The Python Language > Reference" von Guido van Rossum und kein "Jargon"! Korrekte Fachbegriffe sind immer Jargon (laut Duden "Sondersprache bestimmter durch Beruf, Stand, Milieu geprägter Kreise mit speziellem [umgangssprachlichem] Wortschatz"). >>ich halte ihn aber aus mehreren Gründen für irreführend: >>1. "Binden" ist ein Verb. Das beschreibt also eine Operation, nämlich >> genau die, die anderswo in der Dokumentation als "assignmen" >> (Zuweisung) bezeichnet wird. > > Beim /Binden/ wird, wie ich oben ausgeführt hatte, eine > Quelltextentität (der Name) mit einer Laufzeitentität (dem > Objekt) verbunden. > > Bei einer /Zuweisung/ (Begriff aus anderen Programmiersprachen) > wird ein Wert (eine Laufzeitentität) in einen Wertspeicher > (ebenfalls eine Laufzeitentität!) geschrieben. Ich halte diese Unterscheidung für falsch (d.h. sie geht weder aus der Language Reference hervor noch entspricht sie dem Sprachgebrauch). Aus der Language Reference kann man herauslesen, dass eine Zuweisung eine bestimmte Art der Bindung ist, aber das bezieht sich auf die syntaktische Form (assignment expressions), nicht die Semantik. Und im Sprachgebrauch wird der Begriff assignment jedenfalls nicht nur für assignment expressions verwendet: Ein Satz wie "a function definition is a form of assignment" ist unauffällig. >>(Zuweisung) bezeichnet wird. "Gebunden" ("bound") sagt also >>eigentlich nur aus, dass dem Namen bereits irgendetwas zugewiesen >>wurde. Es sagt wenig darüber aus, was das für Folgen hat und was man >>dann damit machen kann. > > Das wird in "The Python Language Reference" ausführlich beschrieben. > >>2. "Gebunden" hat keine klare Richtung. Wenn A an B gebunden ist, hängt >> dann A an B oder B an A oder hängen sie aneinander? > > In Python kann man die Richtung in einem gegebenen Kontext immer > daran erkennen, daß auf einer Seite ein Name (eine Quelltextentität) > und auf der anderen Seite ein Objekt (eine Laufzeitentität) steht. Dir fällt jetzt aber nicht auf, dass auch Dein Satz keine Aussage über die Richtung trifft? >>> def f(): >>> Hans = 5 >>> def g(): >>> Hans = 6 >>Das sind andere Namen. Der Scope gehört zum Namen, auch wenn er nicht >>explizit geschrieben wird. > > "Hans" ist ein anderer Name als "Hans"? Der Gültigkeitsbereich > gehört zum Namen? Das könnte die Kommunikation mit anderen > erschweren, wenn man solche Begriffe verwendet! Das Konzept des Namespace ist seit Jahrzehnten erfunden und Informatikern wohlvertraut. Ein Name existiert innerhalb seines Namespaces. Der Identifier ist in beiden Fällen gleich, aber es sind unterschiedliche Namen. Du begehst hier genau den Fehler, den Du mir oben vorgeworfen hast. Du verwendest nicht die Fachsprache, sondern allgemeines Deutsch. Aber ja, genau das ist der Grund, warum ich die Bezeichnung "Name" hier für unpraktisch halte. Sie verleitet zu falschen Schlüssen, weil jeder glaubt, zu wissen, was ein "Name" ist. > Du kannst natürlich Deine ganz eigene Terminologie aufstellen, Vor jemandem, der im Usenet berüchtigt für seine unverständliche Privatterminologie ist, ist dieser Vorwurf einigermaßen lustig. hp _______________________________________________ python-de Mailingliste -- python-de@python.org Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an python-de-le...@python.org https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: arch...@mail-archive.com