Diskussion aus FAQ getrennt
-
CStoll schrieb:
(wer sich etwas besser auskennt, kann sich ja gerne mit den Interna beschäftigen - und mit den "Altlasten", die C++ von C geerbt hat)
die gehören aber (leider) dazu und unkenntnis dieser altlasten führt früher oder später zu problemen.
Simon2 schrieb:
"Cer" argumentieren gegenüber "C++ern" oftmals mit dieser "überflüssigen Abstraktionsebene" und vergessen dabei, dass sie es sich ganz selbstverständlich selbst hinter so einer gemütlich gemacht haben.
abstraktion ist oft hilfreich, aber sie ist nur sinnvoll, wenn man damit etwas vereinfachen kann. wenn abstraktion zu einem hindernis wird, ist sie sinnlos. es kommt immer auf den jeweiligen fall an. C++ an sich zwingt niemanden zu übertriebener abstraktion - aber - aus irgendeinem unerfindlichen grund neigen eine menge C++ -user dazu, vieles unnötig zu abstrahieren. man braucht nur durch dieses forum zu bowsen und dann kann man die mega-rolleyes kriegen, wie oft zusätzlich komplexität hinzugefügt wird, die eigentlich gar nicht sein muss.

-
Bouncer schrieb:
man braucht nur durch dieses forum zu bowsen und dann kann man die mega-rolleyes kriegen, wie oft zusätzlich komplexität hinzugefügt wird, die eigentlich gar nicht sein muss.

Naja, ist ja auch nicht so, dass Programmieren immer nur einfach ist

-
Bouncer schrieb:
CStoll schrieb:
(wer sich etwas besser auskennt, kann sich ja gerne mit den Interna beschäftigen - und mit den "Altlasten", die C++ von C geerbt hat)
die gehören aber (leider) dazu und unkenntnis dieser altlasten führt früher oder später zu problemen.
Das kann gut sein - aber einen Neuling gleich damit zu erschlagen führt zu nichts. Dazu ist später noch Zeit, wenn er sich mit den C++ Grundlagen auskennt.
Simon2 schrieb:
"Cer" argumentieren gegenüber "C++ern" oftmals mit dieser "überflüssigen Abstraktionsebene" und vergessen dabei, dass sie es sich ganz selbstverständlich selbst hinter so einer gemütlich gemacht haben.
abstraktion ist oft hilfreich, aber sie ist nur sinnvoll, wenn man damit etwas vereinfachen kann. wenn abstraktion zu einem hindernis wird, ist sie sinnlos. es kommt immer auf den jeweiligen fall an.
Aber in diesem Fall ist die Abstraktion von char* auf std::string bestimmt kein Hindernis

man braucht nur durch dieses forum zu bowsen und dann kann man die mega-rolleyes kriegen, wie oft zusätzlich komplexität hinzugefügt wird, die eigentlich gar nicht sein muss.
Ja, zum Beispiel indem ständig krampfhaft versucht wird, die Funktionsweise von C++ Standardklassen auf Basis der C-Funktionen nachzubilden.
(aber ich kenne ja deine Meinung zu C++, vista :D)
-
Zuerst einmal: ja, ich gehoere auch zu den Leuten, die sagen "trennt C so weit wie moeglich von C++"
Das "so weit wie moeglich" steht da extra drin, denn dank der Erblasten ist eine absolute Trennung nicht moeglich, wenn man ueber die ersten Hello-World Anwendungen hinaus ist.
ABER: Wenn ich eine API hab die mir einen Stapel C-Funktionen liefert, und ich diese Funktionen haeufig benutze, dann baue ich mir Wrapper darum, die das C-Style Gewerkel mit const char*s & Co auf einen moeglichst kleinen Quelltextabschnitt beschraenken.
Was das Verstaendnis der Hintergruende angeht: klar wird jeder sich irgendwann mit den char-arrays hinter den std::strings auseinandersetzen muessen, aber nicht am Anfang (ich denke das Beispiel mit pow(), sprintf etc. war da schon ganz gut gewaehlt). Man muss nicht sofort alle HJintergruende kennen, sonst koennen wir C++ und auch C an den Nagel haengen und uns erstmal mit Assembler auseinandersetzen. Die Hintergruenden werden erst wichtig, wenns ans Optimieren geht oder man anderweitig in den Eingeweiden der Sprache rumwuehlen muss.Dann wurde noch angeprangert, dass hier oft C-Style Code bemaengelt wird und die Leute doch eh frueher oder spaeter ordentlichen Stil lernen. Aber den lernen sie doch nur dadurch dass man ihnen sagt was sie besser machen koennen. Schliesslich sind bestimmt 70% oder mehr der Leute hier Hobbyprogrammierer, die mit ihrem "C/C++"-Buch vor dem Rechner zu Hause sitzen und ausser diesen oftmals grauenhaft sprachvergewaltigenden Buechern nur dieses Forum als Lernmittel und Stilvorlage haben. Aus demselben Grund ist es auch entgegen einigen Behauptungen oft besser, den Leuten Hinweise zu geben, wo sie Loesungsansaetze zu ihren Problemen finden koennen, als ihnen jedesmal stumpf fertigen Quellcode vor die Nase zu setzen. Denn nur durch abtippen lernt man nicht so wirklich viel.
-
Hi pumuckl,
ich kann dir nur voll zustimmen!!!
Ich fände es sogar gut, wenn die C++ Compiler eine Option hätten, welcher die C-Altlasten (printf, scanf, malloc, free, ...) als Mißbilligung ("deprecated") wenn nicht sogar als Fehler anprangert (damit die NewBees gleich darauf hingewiesen werden).
-
Bouncer schrieb:
...
abstraktion ist oft hilfreich, aber sie ist nur sinnvoll, wenn man damit etwas vereinfachen kann. wenn abstraktion zu einem hindernis wird, ist sie sinnlos. es kommt immer auf den jeweiligen fall an. ...2 mal 2 ist 4.
Du schreibst hier eine Menge Allgemeinplätze ohne sie plausibel in Zusammenhang mit dem aktuellen Thema zu bringen.
Aus schon ausreichend dargelegten Gründen hat std::string immense Vorteile und so gut wie keine Nachteile.@Abstraktion: Man kann sogar sagen: std::string sind eigentlich keine "Abstraktion" von Strings, sondern eine exakte Abbildung. C-Strings dagegen sind eine sehr komkrete "Maschinisierung" dieses Konzepts.
@Komplexität: Lege einfach mal die Zahl der Threads, in denen Leute Probleme mit C-Strings haben, gegen die, in denen Leute Probleme mit std::string haben, gegeneinander.
Wenn Du dann noch einberechnest:
- Wo die C-String-Probleme durch den Einsatz von std::string gelöst wurden und
- wo die std::string-Probleme durch den Einsatz von C-Strings nicht gelöst oder sogar noch vergrößert worden wären,
wird allerspätestens klar, wo die größere Komplexität liegt.Gruß,
Simon2.
-
Simon2 schrieb:
Bouncer schrieb:
...
abstraktion ist oft hilfreich, aber sie ist nur sinnvoll, wenn man damit etwas vereinfachen kann. wenn abstraktion zu einem hindernis wird, ist sie sinnlos. es kommt immer auf den jeweiligen fall an. ...2 mal 2 ist 4.
Du schreibst hier eine Menge Allgemeinplätze ohne sie plausibel in Zusammenhang mit dem aktuellen Thema zu bringen.
Aus schon ausreichend dargelegten Gründen hat std::string immense Vorteile und so gut wie keine Nachteile.ich hab' ja nicht direkt über std::strings abgelästert. mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.

-
Bouncer schrieb:
ich hab' ja nicht direkt über std::strings abgelästert. mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.

Unsinn.
std::stringmag nicht perfekt sein, ist aber wesentlich besser und einfacher zu handhaben gegenüber C-Strings.Wenn du dir den OP ansiehst:
Sebastian848 schrieb:
Ich finde es etwas schlecht das Ihr sagt man solle nicht C mit Cpp mischen. Für Anfänger ist es oftmals leichter zu verstehen wenn man mit C-Strings und Char* arrays anfängt. man soll die sache ja verstehen wie es funktioniert und nicht schlicht und einfach mit Std::String arbeiten. Jeder möchte das verstehen was da passiert und da ist C-String sehr wohl in ordnung.
, wirst (oder solltest zumindest) du erkennen dass das Problem nicht ist dass in diesem Fall "[A]bstraktion zu einem [H]indernis" wird, sondern die Abstraktion an sich nicht verstanden wurde.
p.s. was mir grad so völlig offtopic und belanglos in den Sinn kommt: gab's eigentlich noch eine Inkarnation vor net?
-
finix schrieb:
Bouncer schrieb:
ich hab' ja nicht direkt über std::strings abgelästert. mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.

Unsinn.
std::stringmag nicht perfekt sein, ist aber wesentlich besser und einfacher zu handhaben gegenüber C-Strings.dass das oft stimmt, will ich gar nicht bezweifeln. ich hab' ja nix gegen std::strings gesagt.
finix schrieb:
Wenn du dir den OP ansiehst:
Sebastian848 schrieb:
Ich finde es etwas schlecht das Ihr sagt man solle nicht C mit Cpp mischen. Für Anfänger ist es oftmals leichter zu verstehen wenn man mit C-Strings und Char* arrays anfängt. man soll die sache ja verstehen wie es funktioniert und nicht schlicht und einfach mit Std::String arbeiten. Jeder möchte das verstehen was da passiert und da ist C-String sehr wohl in ordnung.
, wirst (oder solltest zumindest) du erkennen dass das Problem nicht ist dass in diesem Fall "[A]bstraktion zu einem [H]indernis" wird, sondern die Abstraktion an sich nicht verstanden wurde.
wo siehst du da unverständnis? der OP plädiert einfach für ein 'hinter die kulissen schauen' und was das angeht, bin ich mit ihm sogar einer meinung.
finix schrieb:
p.s. was mir grad so völlig offtopic und belanglos in den Sinn kommt: gab's eigentlich noch eine Inkarnation vor net?
nein, wieso? gab's hier schon mal so'nen schlimmen troll? (kann ich mir gar nicht vorstellen).

-
Bouncer schrieb:
wo siehst du da unverständnis?
Er versteht den Sinn der Abstraktion nicht.
Bouncer schrieb:
der OP plädiert einfach für ein 'hinter die kulissen schauen' und was das angeht, bin ich mit ihm sogar einer meinung.
1. "Hinter die Kulissen schauen" ist durchaus legitim, und im Grunde sogar empfehlenswert.
2. Nach diesem Muster zu programmieren ist definitiv nicht angebracht (nicht mal in C!).Bouncer schrieb:
nein, wieso? gab's hier schon mal so'nen schlimmen troll? (kann ich mir gar nicht vorstellen).

Wollte mich nur vergewissern, weil dich manche schon vista und so nennen

-
Th schrieb:
Ich finde auch, bevor man C lernt, sollte man erstmal alle Assembler-Befehle kennen...
Ja, besser ist das.
So war bei mir die Reihenfolge auf dem Brotkasten (C64)
Erst Assembler gelernt und dann mit Basic rumgehampelt.

-
finix schrieb:
2. Nach diesem Muster zu programmieren ist definitiv nicht angebracht (nicht mal in C!).
ich weiss nicht welches muster du meinst, aber für viele C-user ist programmierung nur ein mittel zum zweck. nicht schöner, hochabstrakter code ist wichtig, sondern das ergebnis zählt. ich hab' gerade einen beitrag im C++ forum gelesen, wobei ein microcontroller-coder C++ lernen will, weil er seine embedded systeme damit beackern will. der arme junge wird noch schreikrämpfe kriegen, aber da muss er nun mal durch.
finix schrieb:
Wollte mich nur vergewissern, weil dich manche schon vista und so nennen

die kamen alle nach 'net'
steven71 schrieb:
So war bei mir die Reihenfolge auf dem Brotkasten (C64)
Erst Assembler gelernt und dann mit Basic rumgehampelt.

echt? war bei mir genau umgekehrt.

-
Bouncer schrieb:
ich weiss nicht welches muster du meinst
Wahrscheinlich weil C++ zu weit von der Idee hinter Smalltalk entfernt ist...
Bouncer schrieb:
aber für viele C-user ist programmierung nur ein mittel zum zweck.
Bouncer schrieb:
die kamen alle nach 'net'
Ich weiß.
Btw, vorhin ganz vergessen:
Bouncer schrieb:
mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.
Soll ich ins C-Forum oder, deinem derzeitigem "High-Level (lol)"-Liebling, das Java-Forum marschieren und dort ein paar frequently asked questions raussuchen?

-
Bouncer schrieb:
...mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.

Stimmt - indem sie unnötigerweise mit C-Strings rumfrickeln, unerklärlicherweise Berührungsängste mit std::string haben und durch schlechte Tutorials und seltsame Ratgeber (oft mit "da musste ich auch durch"- oder "Nur die Harten kommen in den Garten"-Mentalität) dazu gedrängt werden.

Gruß,
Simon2.
-
finix schrieb:
Btw, vorhin ganz vergessen:
Bouncer schrieb:
mir ist nur aufgefallen, dass sich's viele frager im C++ forum (für meine begriffe) zu schwer machen.
Soll ich ins C-Forum oder, deinem derzeitigem "High-Level (lol)"-Liebling, das Java-Forum marschieren und dort ein paar frequently asked questions raussuchen?

naja, der unterschied ist der: im C forum kommen meistens absolute grundlagenfragen. oft hat einer was mit der syntax nicht verstanden oder hat 'nen bug, weil z.b. ein pointer über's ziel hinaus schiesst. haben die leute das einmal gecheckt, dann machen sie die fehler meistens nicht mehr. im Java forum fragen z.b. viele nach, weil sie in der riesigen library nicht das richtige finden können oder solche grundlagen-sachen wie, warum Java kein 'unsigned' hat. meistens ist das thema dann schnell erledigt und der OP ist zufrieden (in beiden foren). im C++ -forum dagegen werden super-komplizierte themen gewälzt, etwa wie man am besten UTF-8 oder sockets mit 'streams' verheiratet, der ganze stl- und smart-pointer krempel (okay, das gehört irgendwie schon zu C++), wann, wie und welche nebeneffekte destruktoren, delete, delete[], sämtliche C-fragen natürlich auch, warum laufzeit-polymorphie schlecht ist und ganz lustig wirds immer, wenn einer asynchrone sachen (multithreading etc.) programmieren will. ganz nebenbei wirft jeder auch noch jedem designfehler vor. es kommt mir fast so vor, als wäre C++ reiner selbstzweck. naja, aber hauptsache ist doch, die leute haben ihren spass daran...

-
Bouncer schrieb:
im Java forum fragen z.b. viele nach, weil sie in der riesigen library nicht das richtige finden können oder solche grundlagen-sachen wie, warum Java kein 'unsigned' hat.
Ach so, Grundlagen. Also so Sachen wie what does *= do???

Bouncer schrieb:
meistens ist das thema dann schnell erledigt und der OP ist zufrieden (in beiden foren).
Glaub's mir oder nicht, das könnte in C++ ähnlich laufen. Aber ich persönlich denke es ist hilfreicher das Problem zu lösen statt die angedachte Lösung zu liefern.
[quote="Bouncer"]im C++ -forum dagegen werden super-komplizierte themen gewälzt, etwa wie man am besten UTF-8 oder sockets mit 'streams' verheiratet[/url]
Das sind eher seltene Themen, wie du sicher selbst weißt, und tatsächlich gibt es komplizierte Probleme auch unter C oder Java. (Aber ja, jüngere Sprachen haben in der Regel eine größere Standardlib.)Bouncer schrieb:
der ganze stl-[krempel]
Algorithmen und Datenstrukturen spielen bei aller Programmierung eine Rolle. Davon ab, ich halte den Part der Standardlib die generell mit STL bezeichnet wird für wesentlich besser (insbesondere die wenig beachteten <algorithm>s) als das was man unter Java vorfindet, bzw. unter C verzweifelt sucht.
Bouncer schrieb:
smart-pointer krempel
Standard Ressourcen-Management, relativ unkompliziert. Hast du in Java auch, in C noch wesentlich mehr. (Wobei dennoch anzumerken ist dass ich zu den scheinbar wenigen gehöre die einen optionalen Standard-GC begrüßen würden.)
Bouncer schrieb:
(okay, das gehört irgendwie schon zu C++)
Ja, genau wie es Dinge gibt die "schon irgendwie zu Java/C/whatever" gehören. Und?
Bouncer schrieb:
wann, wie und welche nebeneffekte
Eh?
Bouncer schrieb:
destruktoren
Eine weitere Ausdrucksmöglichkeit die Java und C nicht besitzen. Welche sehr sinnvoll sein kann, insbesondere wenn es um oben angesprochene Ressourcen geht.
Bouncer schrieb:
ganz nebenbei wirft jeder auch noch jedem designfehler vor.
Siehe oben, bzgl. zufriedenstellen und helfen. Fische v. fischen. Etc. pp.
-
finix schrieb:
(insbesondere die wenig beachteten <algorithm>s) als das was man unter Java vorfindet, bzw. unter C verzweifelt sucht.
ist es so? wird <algorithm> in C++ wirklich so selten verwendet? übrigens in Java gibt's massenweise fertige klassen für alles erdenkliche und für C braucht man nur mal die suchmaschinen bemühen. dann findest du generische algos wie stacks, queues, maps, hashtables usw. in 1000-facher ausführung.
finix schrieb:
Eine weitere Ausdrucksmöglichkeit die Java und C nicht besitzen. Welche sehr sinnvoll sein kann, insbesondere wenn es um oben angesprochene Ressourcen geht.
geht in Java ganz einfach mit try/finally (nicht zu verwechseln mit finalize(), das irgend wann mal in der zukunft angetriggert wird, wenn überhaupt ;)). in C gibts das natürlich nicht, klar, aber in C *soll* auch nicht viel automatisch passieren (ich fänd's jedenfalls nicht gut, wenn's so wäre). oh mann, hoffentlich wird das jetzt kein C++/Java flamewar.
finix schrieb:
Bouncer schrieb:
ganz nebenbei wirft jeder auch noch jedem designfehler vor.
Siehe oben, bzgl. zufriedenstellen und helfen. Fische v. fischen. Etc. pp.
muss denn jeder selber fischen gehen? manchmal ist es einfacher, fische im laden zu kaufen. (ja ich weiss, das widerspricht jetzt meinem einwand, dass man hinter die kulissen schauen sollte, aber *du* hast mit Java angefangen).

-
Vista! Immer wieder die gleiche Laier! Jeden Monat grüßt das Murmeltier! Und du scheinst es auch nicht zu raffen! Du stellst immer die gleichen Fragen und behauptungen auf. Hast du kein Langzeitgedächtnis?
-
Artchi schrieb:
Vista! Immer wieder die gleiche Laier! Jeden Monat grüßt das Murmeltier! Und du scheinst es auch nicht zu raffen! Du stellst immer die gleichen Fragen und behauptungen auf. Hast du kein Langzeitgedächtnis?
was soll ich denn machen? irgendjemand fängt damit an und ich gebe einfach nur meinen senf dazu. ausserdem ist es doch, bei gleichem tenor, immer ein bisschen anders. das musste zugeben.

-
Bouncer schrieb:
ist es so? wird <algorithm> in C++ wirklich so selten verwendet?
Es sieht leider so aus. Allerdings ist dies kein Grund dir einen zu Grinsen, da worauf ich anspiele (map (a.k.a. std::transform), reduce, for-each, etc.) in Java scheinbar nicht nur kaum Verwendung findet, sondern sogar fast verpönt scheint.
Bouncer schrieb:
übrigens in Java gibt's massenweise fertige klassen für alles erdenkliche
Siehe oben.
Bouncer schrieb:
und für C braucht man nur mal die suchmaschinen bemühen. dann findest du generische algos wie stacks, queues, maps, hashtables usw. in 1000-facher ausführung.
Ach ja? Wo bleibt denn dann dein/das Killer-Argument für Java?
Bouncer schrieb:
geht in Java ganz einfach mit try/finally.
Ich weiß du hast derzeit ein Faible für Java, aber selbst dir sollte klar sein dass RAII einem finally - im Allgemeinen - haushoch überlegen ist.
Bouncer schrieb:
in C gibts das natürlich nicht, klar, aber in C *soll* auch nicht viel automatisch passieren (ich fänd's jedenfalls nicht gut, wenn's so wäre).
Und das siehst du als Vorteil?
Bouncer schrieb:
muss denn jeder selber fischen gehen? manchmal ist es einfacher, fische im laden zu kaufen.
Ja. Man kann natürlich auch Fische in der Dose kaufen, allerdings darf man nicht über ein gepflegtes Fuck Off überrascht sein wenn man diese hier, in einem Forum mit freiwilligen Helfern ergattern oder gar erfordern will.
Außerdem ist das kein Argument für oder wider C++, sondern ein allgemeines Prinzip - es scheint bloß in diesem speziellem Forum hier das jeweilige Mindset widerzuspiegeln.