Programiersprache für Anfänger
-
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.
-
unglaublich, wie man sich in was reinsteigern kann, da vergeht ja jedem anfänger die lust auf c und c++
ich muss ehrlich sagen, dass ich c++ einiges leichter fand um einzusteigen. vor allem aus dem grund, weil die meisten c tutorials die sache mit den zeigern und dynamisch allociertem speicher nur schlecht erklären und die stringbearbeitung per char array erklären statt mit library funktionen. das erfordert doch schon relativ viel vorstellungsvermögen. c++ macht es einem da leichter mit new und delete und der string klasse. es ist sicher nicht schlecht, solche dinge zu lernen, aber für anfänger halt erschlagend. da sollte man erstmal lernen was 'schlaufen' sind
[flame]bezüglich syntax komplexizität und kontext sensitivität sind ja beide sprachen pillepalle, perl ist da vieeeel schöner.[/flame]
my @array = ("eins", "zwei", "drei"); print @array; print "\n"; print "@array\n"; print @array."\n"; foreach(@array) { print; } print "\n";
einszweidrei eins zwei drei 3 einszweidrei
soll mal einer nem anfänger erklären