Programiersprache für Anfänger
-
u_ser-l schrieb:
ich finde C++ auch angenehmer als C, vor allem wegen Strings, STL-Containern und wegen der Datenkapselung durch das OO-Modell.
Warum diskutieren wir dann überhaupt?
u_ser-l schrieb:
Logischer finde ich C++ deswegen aber nicht - eher unlogischer. Hatte man bei C nur eine Art von Referenzen (nämlich Zeiger), so hat man jetzt zwei.
Die aber unterschiedliche Bedeutung haben, und zusätzlich je nach Verwendung vom Compiler auch anders umgesetzt werden können (Referenzen können intern Zeiger sein, können aber ebenso gänzlich wegoptimiert werden).
u_ser-l schrieb:
Und schon hat das '&'-Zeichen drei weitere Bedeutungen, zusätzlich zu den zweien, die es schon in C hat.
Es ist klar das wenn man einerseits weitgehen C-Kompatibel sein will, anderseits aber neue Möglichkeiten eröffnen will, eine Sprache mehr Befehle oder Zeichen verwenden muss (bzw. Zeichen auch noch mehrere Kontextspezifische Bedeutungen gibt).
Nichts desto trotz spart man sich in C++, sofern man auch wirklich C++ und nicht C Programmiert, viele Fallstricke aus C. Daher sehe ich beides von der Komplexität gleich an. Ansonsten müsste man sagen das C#/Java komplexer als C/C++ ist, weil der Bibliotheksumfang größer ist.
Man kommt als Anfänger immer nur mit einem Teil in Berührung. Und nicht nur als Anfänger. Ich frage mich wieviele C++ Programmierer (prozentual) jemals direkt mit der Templatemetaprogrammierung zu tun haben. Ich tippe eher wieder auf die 90:10 Regel (90 Prozent werden es niemals direkt verwenden, indirekt über Bibliotheken vielleicht).
u_ser-l schrieb:
Der Programmierer muß in C++ einfach zu viel Verwaltungskram selbst machen, den auch der Compiler erledigen könnte: Prototypen, Typisierung, Garbage Collection (klar - geht nicht, wenn man Zeiger zuläßt), ...
Und wo bitte ist da C besser (Ich habe niemals gesagt das C++ besser, leichter... als andere Sprachen ist, verwehre mich nur dagegen das C weniger Komplex sein soll. Für einen Anfänger eher nicht.
u_ser-l schrieb:
Die Seitenzahl der Referenzbücher spricht da eine deutliche Sprache - je mehr erklärt werden muß, umso weniger intutiv muß eine Sprache wohl sein.
Dann sie bitte auch meine (Anwendungsfallspezifische) Empfehlung an. Siehst du dort an vielen Stellen C++?
cu André
-
Tim schrieb:
asc schrieb:
...Zu 2: Wenn ich dafür die Fehler zur Compilezeit statt zur Laufzeit geliefert bekomme, ist es zumindestens mir das wert.
Warnung: format »%d« erwartet Typ »int«, aber Argument 2 hat Typ »char *«
...
Das klappt aber nur wenn der C-Compiler komplexes Parsing betreibt, und das machen beileibe nicht nicht alle. Ich weiß noch wieviele Laufzeitfehle ich wegen falscher Benutzung von C-Funktionen in Programmen suchen durfte (und nein, die C-Funktionen habe nicht ich eingebaut, ich durfte sie nur ausbaden).
cu André
-
asc schrieb:
Das klappt aber nur wenn der C-Compiler komplexes Parsing betreibt, und das machen beileibe nicht nicht alle.
Sollen wir darüber diskutieren wieviele C++ Compiler nicht komplett z.B. Templates umsetzen?
Ich wollte lediglich andeuten, dass die Beispiele die hier gegeben werden nicht sonderlich sinnvoll sind. Aber durchaus passend zur Diskussion...
-
Tim schrieb:
Zähl mir doch bitte mal alle Mehrdeutigkeiten von
static
in C auf...wieso? Hast Du kein C++ Buch ?
1. static Variable innerhalb einer Funktion
2. static globale Variable innerhalb ihrer Datei
3. static Deklaration in Klassen, vor Variablen und Funktionen3 verschiedene Konzepte teilen sich 1 Schlüsselwort. Das ist nicht logisch und dient nicht der Erfaßbarkeit der Sprache für Anfänger.
-
Ohne dass dazu ausreichend relevante Aussagen von Anfängern vorliegen ist das einfach eine unbelegte Behauptung.
-
ich verstehe auch nicht, warum das Hinderlich sein soll. Ich kann zwischen den Konzepten sogar Paralellen erkennen. Das in Funktionen und das in Klassen ist für ihren Anwendungsbereich im Prinzip sogar das gleiche. Zumindest aus rein logischer Sicht. Die Konzepte die du nennst, sind wieder die technische Sicht, die du selbst kritisierst.
-
u_ser-l schrieb:
Tim schrieb:
Zähl mir doch bitte mal alle Mehrdeutigkeiten von
static
in C auf...wieso? Hast Du kein C++ Buch ?
Ich habe in der Tat kein C++-Buch. Ich habe auch kein C-Buch, aber das war trotzdem nicht der Grund warum ich explizit nach static in C fragte.
Kurzum, C hat ebenso Mehrfachbelegung von Schlüsselwörtern/Operatoren. Teilweise sogar richtig unsinnige.
-
asc schrieb:
(Referenzen können intern Zeiger sein, können aber ebenso gänzlich wegoptimiert werden).
du verwechselst hier zwei Konzepte - die unabhängigen Referenzen (Variablenumbenennung) und die Argument-Übergabe per Referenz in Funktionen.
Nur weil diese Konzepte beide das '&' beanspruchen, ist es nicht dasselbe. Variablenumbenennungen können im Einzelfall wegoptimiert werden, bei Argumentübergabe by-reference wird die CPU im allgemeinen einen Zeiger übergeben müssen, das läßt sich nicht wegoptimieren.
Genau das ist eines der Probleme von C++ - verschiedene Konzepte stecken in ein- und demselben Syntaxelement (hier '&'), was offenbar selbst einigen Fortgeschrittenen gar nicht klar ist.
asc schrieb:
Es ist klar daß, wenn man einerseits weitgehen C-Kompatibel sein will, anderseits aber neue Möglichkeiten eröffnen will, eine Sprache mehr Befehle oder Zeichen verwenden muss (bzw. Zeichen auch noch mehrere Kontextspezifische Bedeutungen gibt).
Würde man all die zahlreichen kontext-abhängigen Mehrfachbelegungen von Syntaxelementen aus C++ entfernen, indem man zusätzliche Schlüsselwörter und Sonderzeichen einführt, dann wäre C++ ein noch viel riesigeres Sprachkonstrukt mit etlichen Schlüsselwörtern mehr.
Z.B. müßte "static" im Kontext von globalen Variablen mit Datei-weiter Gültigkeit eher "filewide" oder so heißen. "static" bei Deklarationen innerhalb von Klassen sollte besser
"unique" oder "classvar" heißen oder etwas in der Richtung.Aber immerhin könnte man damit erreichen, daß eine eindeutige Zuordnung zwischen Syntax-Elementen und Konzepten entsteht.
-
du verwechselst hier zwei Konzepte - die unabhängigen Referenzen (Variablenumbenennung) und die Argument-Übergabe per Referenz in Funktionen.
Du nennst hier Logik und unterscheidest dann zwischen technischen Unterschieden, bei, rein logisch betrachtet, gleichen Konzepten?
edit: Wie die Compiler das umsetzen und was da für Performanceunterschiede sind sollte für Anfänger doch sowas von egal sein.
-
Bashar schrieb:
Ohne dass dazu ausreichend relevante Aussagen von Anfängern vorliegen ist das einfach eine unbelegte Behauptung.
es dient grundsätzlich nie der Erfaßbarkeit und Lernbarkeit, wenn verschiedene Konzepte denselben Namen tragen oder auf dieselbe Syntax abgebildet werden.
Und z.B. die Datei-weite Variablengültigkeit globaler Variablen ist ein anderes Konzept als der Wertbehalt lokaler Variablen zwischen Funktionsaufrufen, und trotzdem heißt beides "static".
-
u-ser_l schrieb:
es dient grundsätzlich nie der Erfaßbarkeit und Lernbarkeit, wenn verschiedene Konzepte denselben Namen tragen oder auf dieselbe Syntax abgebildet werden.
Du wiederholst dich, also tu ich das auch: Wo bleibt dein Beleg?
-
Tim schrieb:
Sollen wir darüber diskutieren wieviele C++ Compiler nicht komplett z.B. Templates umsetzen?
Die Warnung bei printf ist aber eine freiwillige Leistung, die nicht vom Standard abgedeckt wird. Und auch wenn die Diskussion nicht sonderlich sinnvoll ist, kann man beim Vergleich von Sprachen nicht die Vorteile eines einzelnen Compilers zugunsten der Sprache auslegen.
Davon ab, dass Dein Fehler zur Compilezeit den Übersetzungsvorgang nicht sonderlich beeinträchtigt
-
LordJaxom schrieb:
Tim schrieb:
Sollen wir darüber diskutieren wieviele C++ Compiler nicht komplett z.B. Templates umsetzen?
Die Warnung bei printf ist aber eine freiwillige Leistung, die nicht vom Standard abgedeckt wird. Und auch wenn die Diskussion nicht sonderlich sinnvoll ist, kann man beim Vergleich von Sprachen nicht die Vorteile eines einzelnen Compilers zugunsten der Sprache auslegen.
Wenn man nur die Theorie betrachtet, hast du sicher recht.
LordJaxom schrieb:
Davon ab, dass Dein Fehler zur Compilezeit den Übersetzungsvorgang nicht sonderlich beeinträchtigt
Es ist aber trivial ihn zu erkennen
-
LordJaxom schrieb:
Die Warnung bei printf ist aber eine freiwillige Leistung, die nicht vom Standard abgedeckt wird. Und auch wenn die Diskussion nicht sonderlich sinnvoll ist, kann man beim Vergleich von Sprachen nicht die Vorteile eines einzelnen Compilers zugunsten der Sprache auslegen.
und genau so wenig aussagekraft hat der vergleich von library-funktionen (cout vs. printf, usw).
btw: irgendwo weiter vorn wurde c++-verweigerern vorgeworfen, sie hätten >20 jahre mit C rumgefummelt und können sich daher auf nichts neues einlassen. meiner meinung nach stimmt das nicht. die meisten, die c++ nicht sonderlich schätzen, kennen mehrere programmiersprachen und haben auch einiges an c++ -wissen. gerade leute, die nur C kennen und dann irgendwann von C++ erfahren, sind von C++ besonders angetan.
-
Bashar schrieb:
u-ser_l schrieb:
es dient grundsätzlich nie der Erfaßbarkeit und Lernbarkeit, wenn verschiedene Konzepte denselben Namen tragen oder auf dieselbe Syntax abgebildet werden.
Du wiederholst dich, also tu ich das auch: Wo bleibt dein Beleg?
welcher der beiden Sätze ist verständlicher:
1. Fliegen fliegen Fliegen nach
2. Hunde laufen Hunden nach
Einfacher verständlich ist 2., weil in 1. das gleiche Wort in zwei verschiedenen Bedeutungen vorkommt, in 2. dagegen eine 1:1 Zuordnung zwischen Wort und Bedeutung vorliegt.
-
Okay, da du mich zu ignorieren scheinst, sag ich es nochmal.
In C gab es static schon in der Form, dass es in einer Funktion ausgesagt hat, die Variable bleibt über alle Funktionsaufrufe so bestehen.(Oder so ähnlich).
In C++ hat man das selbe für Klassen eingeführt, static bedeuted nun "Die Variable bleibt über alle Instanzen so bestehen"(bzw. so ähnlich eben).
Dass das technisch gesehen, 2 verschiedene Dinge sind, kann dem Anfänger doch scheißegal sein. Im Gegenteil, es kann sogar als Merkhilfe fungieren, da das Schlüsselwort absolut ähnliche Dinge tut.
Genau das selbe gilt für deinen Satz, für jemanden der Deutsch lernt, kann die Ähnlichkeit zwischen Fliegen und fliegen gerade beim Vokabeln lernen eine Merkhilfe sein, und da ich den Satz, so wie du ihn gesagt hast, niemals in einer sinnvollen Aussage gehört hab ist die zufällig auftretende Kuriosität, dass "F/fliegen" 3 mal nacheinander auftritt(bei 2en ist es schon nicht mehr wirklich verwirrend) und für verwirrung sorgen kann ein absolut irrelevanter Ausnahmefall.
-
JustAnotherNoob schrieb:
Okay, da du mich zu ignorieren scheinst, sag ich es nochmal.
sry, hab's wohl übersehen ...
JustAnotherNoob schrieb:
"Die Variable bleibt über alle Instanzen so bestehen"(bzw. so ähnlich eben).
Dass das technisch gesehen, 2 verschiedene Dinge sind,technisch und auf CPU-Ebene ist es eher schon ähnlich (nämlich realisiert als globale Variable), aber semantisch bedeutet static 3 verschiedene Dinge. Was hat eine *Klassenvariable* damit zu tun, daß eine *lokale* Variable zwischen zwei Funktionsaufrufen ihren Wert behält ??
Und was hat das wiederum damit zu tun, daß eine *globale* Variable innerhalb ihrer Datei gültig ist ??
JustAnotherNoob schrieb:
kann dem Anfänger doch scheißegal sein.
Eben nicht. Wäre es so schlimm gewesen, aus static drei verschiedene Schlüsselwörter zu machen ?
JustAnotherNoob schrieb:
Im Gegenteil, es kann sogar als Merkhilfe fungieren, da das Schlüsselwort absolut ähnliche Dinge tut.
das ist ein Trugschluß. Gleiche Syntax verführt dazu, gleiche Bedeutung dahinter zu vermuten (oder zumindest ähnliche), und das führt im Fall von static zu Problemen.
-
u_ser-l schrieb:
welcher der beiden Sätze ist verständlicher:
Drück ich mich undeutlich aus?
-
gut, Du willst also einen Nachweis, daß C++ für Anfänger schwer zu durchschauen ist, schwerer als Programmiersprachen mit eindeutiger Zuordnung zwischen Konzept und Syntax ?
Da du mir ohnehin nicht glauben wirst:
goOgle nach "C++ in der Schule"
-
u_ser-l schrieb:
gut, Du willst also einen Nachweis, daß C++ für Anfänger schwer zu durchschauen ist, schwerer als Programmiersprachen mit eindeutiger Zuordnung zwischen Konzept und Syntax ?
Nein, ich will einen Beleg dafür, dass die "Mehrdeutigkeit" von static für Anfänger ein Problem darstellt.
goOgle nach "C++ in der Schule"
Den Beleg zu suchen ist deine Aufgabe. BTW bei Artikeln von Stefan Ram wär ich ganz vorsichtig. Der drückt zwar alles sehr genau aus, aber zwischen echten und imaginären Verständnisproblemem unterscheidet er nicht.