Warum gibt es keinen swap / exchange-Operator in Imperativ- oder OO-Sprachen wie C / C ++ / C # / Java ...?

8

Ich habe mich immer gewundert, warum eine so einfache und grundlegende Operation wie das Tauschen der Inhalte von zwei Variablen für viele Sprachen nicht eingebaut ist.

Es ist eine der grundlegendsten Programmierübungen im Informatikunterricht; es wird in vielen Algorithmen stark verwendet (z. B. beim Sortieren); hin und wieder braucht man es und man muss eine temporäre Variable verwenden oder eine Vorlage / generische Funktion verwenden.

Es ist sogar eine grundlegende Maschinenanweisung auf vielen Prozessoren, so dass das Standardschema mit einer temporären Variable optimiert wird.

Viele weniger offensichtliche Operatoren wurden erzeugt, wie die Zuweisungsoperatoren (z. B. + =, die wahrscheinlich erzeugt wurden, um die kumulativen Maschinenanweisungen, z. B. add ax, bx, zu reflektieren), oder die & Delta; & theta; Operator in C #.

Also, was ist der Grund? Oder existiert es tatsächlich und ich habe es immer vermisst?

    
mr_georg 13.11.2008, 08:07
quelle

5 Antworten

11

Meiner Erfahrung nach ist es nicht so, wie es in den aktuellen Anwendungen üblich ist, abgesehen von den bereits erwähnten Sortieralgorithmen und gelegentlich auch beim Low-Level-Hardware-Stochern, so dass es meiner Ansicht nach etwas zu speziell für einen allgemeinen Zweck ist -Zwischensprache.

Wie bereits erwähnt, unterstützen nicht alle Prozessoren es als Anweisung (und viele unterstützen es nicht für Objekte, die größer als ein Wort sind). Wenn es also mit einigen nützlichen zusätzlichen Semantiken unterstützt wird (z. B. eine atomare Operation ist), wäre es schwierig, auf einigen Prozessoren zu unterstützen, und wenn es nicht die zusätzliche Semantik hätte, dann wird es nur (selten verwendet) synatatischer Zucker.

Die Zuteilungsoperatoren (+ = usw.) wurden unterstützt, weil diese in realen Programmen viel häufiger vorkommen - und daher war der von ihnen angebotene syntaktische Zucker nützlicher und auch als Optimierung - erinnern Sie sich an C-Daten aus den späten 60ern / Anfang der 70er Jahre, und die Compiler-Optimierung war nicht so fortgeschritten (und die Maschinen weniger leistungsfähig, so dass Sie ohnehin keine langwierigen Optimierungspässe wollten).

Paul

    
The Archetypal Paul 13.11.2008, 08:28
quelle
4

C ++ hat zu tauschen.

%Vor%

Außerdem können Sie swap auch für benutzerdefinierte Typen spezialisieren!

    
Chris Jester-Young 13.11.2008 08:48
quelle
3

Es ist ein weitverbreitetes Beispiel in Informatikkursen, aber ich finde es fast nie, dass ich es in echtem Code brauche - während ich + = sehr häufig benutze.

Ja, bei der Sortierung wäre es praktisch - aber Sie müssen die Sortierung normalerweise nicht selbst durchführen, so dass die Anzahl der tatsächlichen Verwendungen im Quellcode immer noch ziemlich niedrig ist.

    
Jon Skeet 13.11.2008 08:29
quelle
0

Sie haben den XOR-Operator , der eine Variablensubstitution für primitive Elemente durchführt Geben Sie ...

ein     
VonC 13.11.2008 08:10
quelle
-1

Ich denke, sie haben nur vergessen, es hinzuzufügen :-) Ja, nicht alle CPUs haben diese Art von Anweisungen, na und? Wir haben viele andere Dinge, bei denen die meisten CPUs keine Anweisungen zum Berechnen haben. Es wäre viel einfacher / klarer und auch schneller (intrinsisch) wenn wir es hätten !!!

    
Malkocoglu 13.11.2008 08:41
quelle