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

Reply via email to