Ansi C Operator überladen?
-
pale dog schrieb:
Mr. N schrieb:
pale dog schrieb:
komplexität bezwingt man aber nicht mit zusätzlicher komplexität.
Womit sonst?
modularisierung, schichtenmodelle usw.
Ist das keine Komplexität? Wieso ist dann so etwas simples und intuitives wie Operatorüberladung komplex?
Nebenbei, zum Thema "Schichtenmodell"... Das ist dann vermutlich das Zeug, was meine Kollegen gerade abschaffen, nachdem Kollege H das Team gewechselt hat. Irgendein bekannter Softwarezeug-Schreiberling hat gesagt: Schichten sind toll um Diagramme zu zeichnen (mit denen ich irgendwie allerdings nie was anfangen konnte), aber eben nicht flexibel genug für die Anforderungen der Realität.
pale dog schrieb:
Mr. N schrieb:
Orthogonalität? Das ist jetzt ja nicht die Stärke von C.
muss ja auch nicht.
C ist ein nur ein ziemlich 'straightes' werkzeug, es zwingt dir keine konzepte auf.Das ist auch die große Stärke von C++
.
pale dog schrieb:
klar, C's ausstattung ist spartanisch, aber für seinen zweck (system- treiber- kernel- netzwerk- programmierung) ist alles da was man braucht und man hat zugriff auf unmengen an source codes und libraries (google - filetype:c).
Und man hat den großen Vorteil, dass Linus Torvalds es akzeptiert
.
pale dog schrieb:
wir sollten jetzt aber keinen flamewar C++ gegen C anfangen, das wäre ja so, als wenn der grosse bruder das kleine geschwisterchen verprügeln würde
Du willst also lieber Java verteidigen?
-
pale dog schrieb:
Mr. N schrieb:
pale dog schrieb:
komplexität bezwingt man aber nicht mit zusätzlicher komplexität.
Womit sonst?
modularisierung, schichtenmodelle usw.
etwa das, was Simon2 angesprochen hat, auch wenn er auf etwas anderes hinaus wollte.Und hat (z.B.) Modularisierung mit Operator-Überladung zu tun?
Ich sehe einen Datentyp gerne "von oben". Was eine Zahl darstellen kann, soll auch rechnen können - da habe ich keine Lust, mein komplettes Programm umzustellen, nur weil mir long zu klein wurde und ich deshalb umsteige auf eine eigene BigInt-Klasse. Mit dem jetzigen Konzept reicht es aus, einen typedef zu ändern und dank Operator-Überladung kann ich die BigInt's ohne weitere Quellcode-Änderungen nutzen. Ohne diese Möglichkeit müsste ich alle Formeln in meinem Programm umstellen zu mehrfach verschachtelten Funktionsaufrufen.
Mr. N schrieb:
Orthogonalität? Das ist jetzt ja nicht die Stärke von C.
muss ja auch nicht.
C ist ein nur ein ziemlich 'straightes' werkzeug, es zwingt dir keine konzepte auf.Macht C++ doch auch nicht.
Wenn du wirklich Low-Level programmieren willst, hindert dich niemand daran, die fortgeschrittenen Möglichkeiten von C++ zu ignorieren - niemand ist gezwungen, Operatoren zu überladen oder alles in Klassen zu verpacken.
(und einen Operator kannst du übrigens genauso durchoptimieren wie jede andere Funktion).wir sollten jetzt aber keinen flamewar C++ gegen C anfangen, das wäre ja so, als wenn der grosse bruder das kleine geschwisterchen verprügeln würde
Randfrage: Wen siehst du hier als großen Bruder an?
-
Mr. N schrieb:
pale dog schrieb:
klar, C's ausstattung ist spartanisch, aber für seinen zweck (system- treiber- kernel- netzwerk- programmierung) ist alles da was man braucht und man hat zugriff auf unmengen an source codes und libraries (google - filetype:c).
Und man hat den großen Vorteil, dass Linus Torvalds es akzeptiert
.
als windoze-user weise ich diese freche unterstellung entschieden zurück
CStoll schrieb:
pale dog schrieb:
Mr. N schrieb:
pale dog schrieb:
komplexität bezwingt man aber nicht mit zusätzlicher komplexität.
Womit sonst?
modularisierung, schichtenmodelle usw.
etwa das, was Simon2 angesprochen hat, auch wenn er auf etwas anderes hinaus wollte.Und hat (z.B.) Modularisierung mit Operator-Überladung zu tun?
kann sein, aber ich glaube struppi hat op-überladung eher eingebaut, weil er es 'geil' fand. dass es auch sehr gut ohne geht, beweist doch eine der erfolgreichsten OOP-plattformen der welt recht gut.
CStoll schrieb:
Wenn du wirklich Low-Level programmieren willst, hindert dich niemand daran, die fortgeschrittenen Möglichkeiten von C++ zu ignorieren
versuche ich ja, aber C++ weigert sich vehement: hast du schon mal probiert, bestehende C-codes durch einen C++ compiler zu jagen? das hagelt nur so von errors...
auch wenn man mal im C++ forum einen quelltext ohne 'std::wassweissich' posted, gibt's gleich mecker von allen seiten: 'das ist aber kein C++, *heul*, *kreisch*'CStoll schrieb:
wir sollten jetzt aber keinen flamewar C++ gegen C anfangen, das wäre ja so, als wenn der grosse bruder das kleine geschwisterchen verprügeln würde
Randfrage: Wen siehst du hier als großen Bruder an?
der, der aussieht wie die türkische flagge, bloss mit einem zweiten sternchen drin
-
pale dog schrieb:
dass es auch sehr gut ohne geht, beweist doch eine der erfolgreichsten OOP-plattformen der welt recht gut.
Welche meinst du? (Ja, du begibst dich damit vermutlich in die Gefahr, einen Flame zu beschwören
- aber IMHO ist es jetzt schon zu spät, um das zu bereuen. *teuflischlach*)
-
Mr. N schrieb:
pale dog schrieb:
dass es auch sehr gut ohne geht, beweist doch eine der erfolgreichsten OOP-plattformen der welt recht gut.
Welche meinst du?
dazu sag ich mal nix
-
pale dog schrieb:
dazu sag ich mal nix
Also Java.
-
Mr. N schrieb:
pale dog schrieb:
dazu sag ich mal nix
Also Java.
damit hast du das todesurteil für diesen thread ausgesprochen.
-
pale dog schrieb:
damit hast du das todesurteil für diesen thread ausgesprochen.
Du hast diese Sprache als Beispiel dafür gebracht, wieso man keine Operator-Überladung braucht. Was man ja auch an der Vielzahl an Matrix-Bibliotheken für Java sieht...
-
Mr. N schrieb:
pale dog schrieb:
damit hast du das todesurteil für diesen thread ausgesprochen.
Du hast diese Sprache als Beispiel dafür gebracht, wieso man keine Operator-Überladung braucht....
das hat nichts zu bedeuten.
die meisten sprachen kommen ohne operatorüberladung aus.
ausserdem hab' ich java auch schon (indirekt) weiter oben erwähnt, weil ich damit klarstellen wollte, dass ich kein genereller OOP-hasser bin, denn den eindruck, glaube ich, bei einigen erweckt zu haben.
ausserdem - obwohl ich hier allein gegen eine ganze armee von op-überladungsfreaks stehe - wollen wir ja nicht noch die Java-fans anlocken.
wenn die erst kommen, dann zieht ihr nämlich den kürzeren
-
pale dog schrieb:
Mr. N schrieb:
pale dog schrieb:
damit hast du das todesurteil für diesen thread ausgesprochen.
Du hast diese Sprache als Beispiel dafür gebracht, wieso man keine Operator-Überladung braucht....
das hat nichts zu bedeuten.
die meisten sprachen kommen ohne operatorüberladung aus.Jo, Brainfuck braucht das auch nicht.
pale dog schrieb:
ausserdem hab' ich java auch schon (indirekt) weiter oben erwähnt, weil ich damit klarstellen wollte, dass ich kein genereller OOP-hasser bin, denn den eindruck, glaube ich, bei einigen erweckt zu haben.
Die Operator-Überladungs-Freunde sind denke ich zumeist keine OOP-Dogmatiker sondern Anhänger des in C++ üblichen Mischens von Paradigmen.
pale dog schrieb:
ausserdem - obwohl ich hier allein gegen eine ganze armee von op-überladungsfreaks stehe
"Ein Geisterfahrer?! Hunderte!"
pale dog schrieb:
- wollen wir ja nicht noch die Java-fans anlocken.
Jo, die sind die schlimmsten.
pale dog schrieb:
wenn die erst kommen, dann zieht ihr nämlich den kürzeren
Weil sie noch weniger diskussionsbereit sind, als Jester es von mir behauptet?
Oder weil sie in der Überzahl sind?
... Natürlich nicht, weil sie potenziell Recht haben könnten, das stimmt natürlich mal gar von sowas nicht.
-
pale dog schrieb:
die meisten sprachen kommen ohne operatorüberladung aus.
Es gibt auch Sprachen die kommen ohne Variablen und ohne Operatoren aus. Ich weiß nur nicht ob man das deswegen in anderen Sprachen genauso machen sollte...
-
Mr. N schrieb:
pale dog schrieb:
ausserdem hab' ich java auch schon (indirekt) weiter oben erwähnt, weil ich damit klarstellen wollte, dass ich kein genereller OOP-hasser bin, denn den eindruck, glaube ich, bei einigen erweckt zu haben.
Die Operator-Überladungs-Freunde sind denke ich zumeist keine OOP-Dogmatiker sondern Anhänger des in C++ üblichen Mischens von Paradigmen.
wirklich? ich dachte dass für C++ fans gerade das op-overloading etwas ist, durch das C++'s OO-fähigkeit erst richtig komplett wird
rüdiger schrieb:
pale dog schrieb:
die meisten sprachen kommen ohne operatorüberladung aus.
Es gibt auch Sprachen die kommen ohne Variablen und ohne Operatoren aus. Ich weiß nur nicht ob man das deswegen in anderen Sprachen genauso machen sollte...
das sind aber ziemlich exotische sprachen.
es gibt da ja alles mögliche, programmiersprachen ohne jegliche kontrollstrukturen, programmiersprachen in denen man bilder malt anstatt code zu schreiben, programmiersprachen als ersatz für schaltschrankverdrahtung usw.usw.usw...
trotzdem gibt es viele nicht-exotensprachen, ohne solche exotenfeatures wie operatorüberladung, die täglich millionenfach genutzt werden und wobei keinem der gedanke kommt, dass op-overloading auch nur ansatzweise fehlen würde.
-
pale dog schrieb:
rüdiger schrieb:
pale dog schrieb:
die meisten sprachen kommen ohne operatorüberladung aus.
Es gibt auch Sprachen die kommen ohne Variablen und ohne Operatoren aus. Ich weiß nur nicht ob man das deswegen in anderen Sprachen genauso machen sollte...
das sind aber ziemlich exotische sprachen.
es gibt da ja alles mögliche, programmiersprachen ohne jegliche kontrollstrukturen, programmiersprachen in denen man bilder malt anstatt code zu schreiben, programmiersprachen als ersatz für schaltschrankverdrahtung usw.usw.usw...
trotzdem gibt es viele nicht-exotensprachen, ohne solche exotenfeatures wie operatorüberladung, die täglich millionenfach genutzt werden und wobei keinem der gedanke kommt, dass op-overloading auch nur ansatzweise fehlen würde.
Was ich dir sagen wollte war, dass Programmiersprachen unterschiedlich sind. Was in einer Programmiersprache funktioniert oder richtig ist, muss nicht für eine andere Programmiersprache richtig sein.
Argumente ala "Aber X tut das so. Also soll Y das auch so tun" sind lächerlich.
("Und wenn X von der Brücke springt, würdest du das auch tun?...")
-
pale dog schrieb:
das sind aber ziemlich exotische sprachen.
Ist diese Unterscheidung in irgendwie wichtig?
pale dog schrieb:
es gibt da ja alles mögliche, programmiersprachen ohne jegliche kontrollstrukturen, programmiersprachen in denen man bilder malt anstatt code zu schreiben, programmiersprachen als ersatz für schaltschrankverdrahtung usw.usw.usw...
Und die letzte ist sogar ernst gemeint, vermute ich.
pale dog schrieb:
trotzdem gibt es viele nicht-exotensprachen, ohne solche exotenfeatures wie operatorüberladung
Operatorüberladung ist kein Exotenfeature.
pale dog schrieb:
, die täglich millionenfach genutzt werden und wobei keinem der gedanke kommt, dass op-overloading auch nur ansatzweise fehlen würde.
Lisp braucht auch keine Operator-Überladung. Weil es keine Operatoren gibt.
Und bei den anderen: Dir ist schon bewusst, dass das Forum überfüllt ist mit Fragen wie "Welche Befehle hat C++?" oder "Welchen Befehl brauche ich, um einen Kreis zu malen? Ach ja und ein Fenster will ich auch noch."...? Diese Leute sind natürlich keine Fans der Operator-Überladung. Das ist ganz einfach nicht auf ihrem Radar.
Wer Operator-Überladung nicht kennt, wird sie auch nicht vermissen. Der wird eben mit x1.add(x2) rumfrickeln und sich vielleicht sogar ärgern, warum seine einfache Formel so schwer umzusetzen ist (übrigens eine Aufgabe, die keineswegs alltäglich ist - aber sie kommt vor). Er wird aber nicht unbedingt gleich darauf kommen: "Wenn ich den Operator jetzt überladen könnte..."
-
Was spricht da gegen:
Ich sehe einen Datentyp gerne "von oben". Was eine Zahl darstellen kann, soll auch rechnen können - da habe ich keine Lust, mein komplettes Programm umzustellen, nur weil mir long zu klein wurde und ich deshalb umsteige auf eine eigene BigInt-Klasse. Mit dem jetzigen Konzept reicht es aus, einen typedef zu ändern und dank Operator-Überladung kann ich die BigInt's ohne weitere Quellcode-Änderungen nutzen. Ohne diese Möglichkeit müsste ich alle Formeln in meinem Programm umstellen zu mehrfach verschachtelten Funktionsaufrufen.
Ich verstehe die Anti-Operator-Überladungs-Argumentation irgendwie nicht.
Das tolle ist ja, das z.B. ein "+" Operator genau das tut, was er soll. Addieren halt. Bei Funktionen ist das imho nicht immer so eindeutig.
-
pale dog schrieb:
...komplexität bezwingt man aber nicht mit zusätzlicher komplexität. ;)...
Korrekt !
Deswegen sollte man nicht die Komplexität der semantischen Mittel erhöhen, indem man Indexzugriffe plötzlich nicht mehr per [], sondern per Makro (oder eine Funktion mit einem Namen seines persönlichen Geschmacks) vornimmt.
"Kapselung" bedeutet: Sehen, WAS gemacht wird, ohne genau wissen zu müssen, WIE es die benutzte Schicht es umsetzt. Damit begrenzt man Komplexität - und dabei hilft (Oh Wunder) Operatorüberladung.Wenn Du so ein Herz für neue Plattformen hast, müsstest Du es doch kennen, dass man auf Basis einer bestimmten API, mit der man sich erstmal vertraut machen muss, programmiert. Und da wird Dich doch nicht plötzlich ein überladener operator[]() aus der Fassung bringen, oder ?
Auf einem neuen System kannst Du sowieso nicht davon ausgehen, dass ein Indexzugriff "hinter den Kulissen" (was für Dich anscheinend Maschinenebene bedeutet) genauso funktioniert, wie Du es bislang gewohnt bist. Du musst es Dir also (wenn Du es wissen willst) sowieso ansehen.
@"...freunde": Sorry, aber das sind nun wirklich die Kollegen, die alle C++-Features ablehnen, die sie nicht kennen, WEIL sie sie nicht kennen. "Wieso - geht doch auch ohne !" ... hat mir damals ein ASM-Fan gesagt, als er von OO hörte - mit übrigens genau denselben Argumenten wie Du
- Dann sehe ich ja gar nicht mehr, was da passiert
- das macht das alles nur komplizierter
- Habe ich noch nie gebraucht
- das kann man alles auch ohne machen.Gruß,
Simon2.
-
Hazzel schrieb:
Was spricht da gegen:
Ich sehe einen Datentyp gerne "von oben". Was eine Zahl darstellen kann, soll auch rechnen können - da habe ich keine Lust, mein komplettes Programm umzustellen, nur weil mir long zu klein wurde und ich deshalb umsteige auf eine eigene BigInt-Klasse. Mit dem jetzigen Konzept reicht es aus, einen typedef zu ändern und dank Operator-Überladung kann ich die BigInt's ohne weitere Quellcode-Änderungen nutzen. Ohne diese Möglichkeit müsste ich alle Formeln in meinem Programm umstellen zu mehrfach verschachtelten Funktionsaufrufen.
Ich verstehe die Anti-Operator-Überladungs-Argumentation irgendwie nicht.
Das tolle ist ja, das z.B. ein "+" Operator genau das tut, was er soll. Addieren halt. Bei Funktionen ist das imho nicht immer so eindeutig.Versuch es gar nicht erst, das hört pale schon seit 10 Threadseiten - er ignoriert es einfach oder führt plötzlich Performanceargumente an (sehr interessant für einen Freund der Sprache, "deren Namen nicht genannt werden darf"
).
Gruß,
Simon2.
-
rüdiger schrieb:
Was ich dir sagen wollte war, dass Programmiersprachen unterschiedlich sind. Was in einer Programmiersprache funktioniert oder richtig ist, muss nicht für eine andere Programmiersprache richtig sein.
da stimme ich dir zu.
aber es ist nunmal so, dass die meisten programmiersprachen von leuten entwickelt werden, die auch viele andere sprachen kennen. in ihrer euphorie (und deshalb leider kurzsichtigkeit) gucken sie sich sachen von einer anderen sprache ab, weil sie sie einfach nur 'cool' finden.
doch manchmal ist weniger eben mehr...Mr. N schrieb:
Wer Operator-Überladung nicht kennt, wird sie auch nicht vermissen.
[...]
Er wird aber nicht unbedingt gleich darauf kommen: "Wenn ich den Operator jetzt überladen könnte..."...würde er sich sicher ein zweites loch in den po freuen, das glaube ich auch.
aber um so grösser wär' wahrscheinlich der frust, wenn er nach ein paar wochen seinen eigenen code nicht mehr versteht. die korrekte anwendung von overloaded-ops ist nicht einfach. ich denke dafür braucht man viel erfahrung.btw:
hey leute, wir drehen uns seit längerem nur noch im kreis. ich steige jetzt wirklich aus
~(jaja, das hat dieser idiot vorgestern auch schon gesagt)~
und betet, dass die java-fans nicht hier auftauchen
-
pale dog schrieb:
ich denke dafür braucht man viel erfahrung.
Eigentlich nicht. Man braucht um C++ gut einzusetzen allgemein viel Erfahrung, aber Operator-Überladung ist da kein großes Problem. Solange man sich erstmal von operator&&, operator, und Konsorten fernhält (welche das sind, steht in jedem guten C++-Buch). Aber das ist machbar.
pale dog schrieb:
btw:
hey leute, wir drehen uns seit längerem nur noch im kreis. ich steige jetzt wirklich ausJetzt hatte ich doch gehofft, dich durch gebetsmühlenhafte Diskussion zu bekehren.
pale dog schrieb:
~(jaja, das hat dieser idiot vorgestern auch schon gesagt)~
und betet, dass die java-fans nicht hier auftauchenHätten die doch längst, wenn sie was zu sagen hätten
.
-
pale dog schrieb:
rüdiger schrieb:
Was ich dir sagen wollte war, dass Programmiersprachen unterschiedlich sind. Was in einer Programmiersprache funktioniert oder richtig ist, muss nicht für eine andere Programmiersprache richtig sein.
da stimme ich dir zu.
aber es ist nunmal so, dass die meisten programmiersprachen von leuten entwickelt werden, die auch viele andere sprachen kennen. in ihrer euphorie (und deshalb leider kurzsichtigkeit) gucken sie sich sachen von einer anderen sprache ab, weil sie sie einfach nur 'cool' finden.
doch manchmal ist weniger eben mehr...Was in einer Programmiersprache funktioniert oder richtig ist, muss nicht für eine andere Programmiersprache richtig sein.
(komisch ich glaube ich habe das schon mal gesagt)