c:memorylayout [c:die_speicherlandschaft_eines_prozesses]

Diskussionen zu Tutorials, Änderungs- und Erweiterungswünsche
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: c:die_speicherlandschaft_eines_prozesses

Beitrag von fat-lobyte » Mo Jul 18, 2011 8:37 am

Hallo.
Da hat jemand ganz frech einfach in die Todo-Liste folgenden Punkt eingetragen:
Wiki hat geschrieben:c:memorylayout - C(!) ⇒ kein std::vector
Darf ich mal Fragen wieso es denn so zwingend notwendig ist den Artikel zu verkrüppeln?
Ich hatte den Artikel eigentlich nicht als _reinen_ C-Artikel angedacht, sondern eher allgemein für Programmierer. Ich finde std::vector<> ist ein wichtiges Beispiel wie Stack und Heap zusammenspielen, und deswegen hab ichs auch mit reingenommen.
Ehrlichgesagt wärs mir nicht so recht wenn man das jetzt entfernen würde, von mir aus kann ich den Artikel auch woanders hinverschieben wenn er dort besser hinpasst.
Bitte um Klärung durch den autor dieser Zeile.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: c:die_speicherlandschaft_eines_prozesses

Beitrag von Xin » Mo Jul 18, 2011 10:43 am

fat-lobyte hat geschrieben:Hallo.
Da hat jemand ganz frech einfach in die Todo-Liste folgenden Punkt eingetragen:
Wiki hat geschrieben:c:memorylayout - C(!) ⇒ kein std::vector
Darf ich mal Fragen wieso es denn so zwingend notwendig ist den Artikel zu verkrüppeln?
Ich stelle mich mal vor, ich bin Jemand.

Es ist nicht notwendig den Artikel zu verkrübeln, ich würde ihn gerne verbessern.
fat-lobyte hat geschrieben:Ich hatte den Artikel eigentlich nicht als _reinen_ C-Artikel angedacht, sondern eher allgemein für Programmierer. Ich finde std::vector<> ist ein wichtiges Beispiel wie Stack und Heap zusammenspielen, und deswegen hab ichs auch mit reingenommen.
Gut, der Artikel liegt trotzdem im C-Namensraum, er gehört da eigentlich auch hin und überfordert einen C-Leser. Es wäre daher besser, wenn printelm() statt std::cout printf() verwenden würde und der Vector ein Array wäre.

Dass ein Vector wachsen kann ist gut, dass er deswegen vorrangig aus einem Zeiger auf die Daten besteht ist sicherlich interessant und zeigt ihn als einfaches Beispiel für ein derartiges Objekt. Ein std::vector ist allerdings auch ein Wrapper, der die Handhabung für C++-Entwickler vereinfacht. Schöner wäre es, wenn man die Motorhaube aufmacht und die Leute entsprechend Ihrer Erfahrung reingucken lässt:

Code: Alles auswählen

struct Vector
{
  int * Daten;

  unsigned int size;
};

struct Vector vector = vector_new( 10 );
vector_pushValue( vector, 1 );
vector_pushValue( vector, 2 );
...
vector_pushValue( vector, 9 );
vector_pushValue( vector, 10 ); // huh, hier passiert was...

int elem = vector_getIndex( vector, 10 )

printelem( vector, 10 );
Ich weiß, dass Dich das C++-Entwickler ankotzt. Geht mir ähnlich, aber das ist, was ein C-Anwender verstehen kann, wo Du am Schluss dann auch sagen kannst, dass der Trabant, den Du da gebaut hast in C++ als modernes SUV zur Verfügung steht und std::vector<int> heißt und sooo einfach <codebeispiel> zu verwenden ist. Vector ist der moderne Motor, aber für einen Einsteiger ist das wie die Motorhaube eines modernen PKWs. Nur weil die Haube offen ist, sieht man noch nicht den Motor und der Artikel sagt "Stellt euch einfach vor, in dem Vector werkelt was Tolles." Er zeigt es aber eben nicht, sondern nur die Plastikabdeckung über dem Motor: den "Wrapper".

Das Beschriebene wird in C auch noch so programmiert. Es ist also auch nicht Verschwendung, es zu demonstrieren, da es leider immernoch Fälle gibt, wo C++ nicht zur Verfügung steht.

Wenn Du die Speicherlandschaft demonstrieren willst, muss Du die Sprache des Lesers sprechen und die ist in diesem Namensraum und beim Kenntnisstand des Lesers, der diese Informationen erhalten sollte nunmal das Level "C".
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: c:die_speicherlandschaft_eines_prozesses

Beitrag von fat-lobyte » Mo Jul 18, 2011 1:46 pm

Xin hat geschrieben:Ich stelle mich mal vor, ich bin Jemand.
Hallo.
Gut, der Artikel liegt trotzdem im C-Namensraum, er gehört da eigentlich auch hin und überfordert einen C-Leser.
Diese aussage ist unwahr, da sich beide Teilaussagen gegenseitig ausschließen. Entweder er gehört dorthin wo er ist, oder er überfordert den Leser und gehört woanders hin.
Xin hat geschrieben:Schöner wäre es, wenn man die Motorhaube aufmacht und die Leute entsprechend Ihrer Erfahrung reingucken lässt:
Da bin ich anderer Meinung. Ich finde macht man an dieser Stelle die Motorhaube auf, ist das eine reine Themenverfehlung, denn:
Wiki hat geschrieben:Nützlich ist dieser Text für Leute, die besser verstehen wollen, was eigentlich im Innern eines Programms so vor sich geht, aber auch für Leute die den Speicherverbrauch reduzieren und die Performance ihrer Programme verbessern wollen
Das Ziel des Artikels ist es _nicht_ absoluten Anfängern beizugbringen was ein Speicher ist. Ich setze gewisse Syntaxkentnisse voraus, und auch gewisse Vorstellung davon was speicher ist. Dafür gibt es nämlich bereits zwei Artikel:
http://www.proggen.org/doku.php?id=c:hardware:ram
http://www.proggen.org/doku.php?id=c:virtualmem

Ich will in diesem Artikel explizit nicht, dass der Leser jede Zeile des codes versteht, und vor allem will ich an dieser Stelle nicht std::vector<> erklären. Dafür gibt es andere, besser geeignetere Orte.
Ich will, dass der User das Augenmerk darauf richtet, wo welche Variablen vorkommen, und er soll sich auch nicht zuerst den Code durchlesen sondern den Artikel und dann im Code nachkucken ("ach, DAS meint er..."). Der Vektor ist hier optional, und steht auch genau deshalb am Ende.
Er gehört trotzdem erwähnt (aber nicht erklärt!), da es eine Art sonderfall ist und bei fortgeschrittenen Programmierern das verständniß fördert.

Xin hat geschrieben:Wenn Du die Speicherlandschaft demonstrieren willst, muss Du die Sprache des Lesers sprechen und die ist in diesem Namensraum und beim Kenntnisstand des Lesers, der diese Informationen erhalten sollte nunmal das Level "C".
Ich glaube das ist eben der Hauptpunkt. Ich habe diesen Artikel mangels alternativen in das C-Tutorial gesteckt - eigentlich ist er nämlich gar nicht C-Spezifisch. Nur der Beispielcode ist es. Von mir aus können wir ihn gerne woanders hinverschieben, wo er besser hinpasst.
Zum Thema "Kenntnisstand": Es sollt nicht der erste Artikel sein, den jemand liest. Er steht nicht umsonst ganz weit unten unter "Hintergründe". Er soll "complementory information" sein, die schon recht gut C können. Und diese leute sollten auch in der Lage sein soweit zu abstrahieren, dass sie bei der ersten Zeile die sie nicht verstehen gleich aussteigen.

Und auch zu deiner Angst vor std::cout möchte ich erwähnen:
Eigentlich ist es unfair zu argumentieren dass man für cout gleich Objekte und operatorüberladung lernen muss. Das muss man eben _nicht_. Am Anfang muss man nur wissen wie man es anwendet, und das ist einfach: std::cout, "<<", daten, "<<", daten, "<<", daten, ..., semikolon. Das ist nicht kompliziert, und man muss nicht sofort alles verstehen um es anwenden zu können.
Wenn man nämlich fair wäre, ist printf() nicht wirklich besser: Du musst erklären was Funktionen sind, wie man Parameter übergibt, wie die Formattierungszeichen funktionieren (weder einfach noch logisch), was datentypen sind und vor allem was variable Argumentlisten sind, und wie va_list und der restliche kram aus <stdarg.h> funktioniert. Und wenn wir soweit sind, ist printf() ganz und gar nicht einfacher als cout.

Nur weil die Haube offen ist, sieht man noch nicht den Motor und der Artikel sagt "Stellt euch einfach vor, in dem Vector werkelt was Tolles." Er zeigt es aber eben nicht, sondern nur die Plastikabdeckung über dem Motor: den "Wrapper".
Wenn ich die Karosserie vorstelle, möchte ich genau das. Ich möchte nicht über jedes Detail des Motors reden, wenn das thema meines vortrages etwas anderes ist. Ich sage dann "... und hier ist der Motor, in dem was tolles werkelt, und der hängt ebenfalls auf der Karosserie". Ich habe kein Problem damit.

ps.: Wir haben nun mit der Diskussion über den Artikel ungefähr doppelt so viel Text produziert, als im Artikel selbst vorhanden ist. Nur mal so als Anmerkung ;-)
Haters gonna hate, potatoes gonna potate.

Antworten