Deep C / C++
-
Du musst schon auch die Frage und nicht nur den Link lesen
Darüber wird im anderen Thread nicht (oder zumindest für mich unsichtbar) diskutiert.
MfG SideWinder
-
Ich versteh jetzt deine Frage nicht, denn was hat Detailwissen damit zu tun das die Sprache abstrahieren kann?
Würdest du trotz Detailwissen unter C die low-level Dateifummelei benutzen?
-
Computer sind nun einmal komplexe Maschinen. Wenn man ihnen detailliert beibringen will, was möchte, dann braucht man eben eine Sprache mit der diese Details ausdrückbar sind. Wenn die Sprache dies nicht bietet, dann wurden diese Details indirekt schon durch die Sprache oder deren Implementierung getroffen und man ist darauf angewiesen, dass diese Entscheidung zu einem passt, denn man kann sie nicht mehr ändern. Dann bekommt man etwas wie Java, wo jedes Array eine Bereichsprüfung und jede Variable Referenzsemantik hat.
-
Käse für was? Auch Käse hat seine Anwendungen. Verdammt viele sogar. OK, es mag etwas eklig sein dass unangenehme Seiteneffekte eintreten, wenn man bestimmte Sachen mit dem Käse anstellt, ohne die Hintergrunddetails darüber zu wissen, aber damit muss man halt leben.
Ohne Käse gibt's nämlich z.B. keine Pizza, und zusätzlich gibt es auch einen ziemlich großen Markt an Käsegourmets, denen die Vorteile von purem Käse eben zu wichtig sind, als dass sie direkt Pizza essen würden.
Das heisst nicht, dass man sein Nutellabrot mit Käse belegen muss. Oder dass jeder Auflauf mit Käse überbacken werden muss. Trotzdem: Käse braucht man an sehr, sehr vielen Ecken.
Käse = C++, bzw. allgemein "native" Sprachen mit Abstraktion.
Pizza = jede höhere Anwendung, wo auf irgendeiner Schicht unten drunter auf etwas natives aufgebaut wird
Gourmets = Beispielsweise die Gamingindustrie, wo auf den Konsolen sehr stark auf Performance und Speicher geachtet wird, auch wenn das für die Programmierer vll. ein wenig Mehraufwand bedeutet. Oder Serversoftwareprogrammierer. Oder Compilerschreiber. Oder... oder... oder...Für die passenden Anwendungen bieten Sprachen wie C++ eben ein angenehmes Level an Abstraktion, aber auch ein hohes Level an Optimierungsmöglichkeit, aber alles hat eben seinen Preis.
Wenn's um C++ speziell geht: Die Sprache ist sicher nicht perfekt. Man könnte bestimmt irgendwie das gleiche Level an Abstraktion, Plattformunabhängigkeit und Performance behalten, aber dennoch viele der undefinierten Verhalten o.ä. Fallstricke auslöschen. Aber nichts ist halt perfekt.
-
Lieber TravisG,
dein Beitrag ist Käse.
Mit Käse alleine kann man nicht alle Gerichte kochen, aber mit C/C++ kannst du dieselben Programme wie mit Java erstellen.L. G.
Steffo
-
Mit Java kann ich aber nicht alle Programme schreiben, die mit C++ moeglich sind.
So tun als würde die Sprache viel abstrahieren aber letzten Endes dies nur tun wenn ich erst wieder über jedes Detail bescheid weiß...da habe ich doch nichts gewonnen...
1.) Nenne bitte drei Beispiele.
2.) Gewonnen: Du musst es nur wissen aber nicht selbst implementieren. Das macht der Compiler.
-
Steffo schrieb:
Lieber TravisG,
dein Beitrag ist Käse.
Mit Käse alleine kann man nicht alle Gerichte kochen, aber mit C/C++ kannst du dieselben Programme wie mit Java erstellen.L. G.
SteffoBei ner Analogie zählt ja nicht die exakte Übertragbarkeit, sondern die Nachricht. Meine hinkt wie alle anderen Analogien natürlich.
-
SideWinder schrieb:
Ich konnte nicht alles beantworten, trotzdem den größten Teil. Scheinbar scheint sich aber keiner der drei daran zu stören, dass Sprachen die derartiges Detailwissen verlangen vielleicht schlichtweg Käse sind?
Wie denkt ihr da drüber? So tun als würde die Sprache viel abstrahieren aber letzten Endes dies nur tun wenn ich erst wieder über jedes Detail bescheid weiß...da habe ich doch nichts gewonnen...
Nun ja, das meiste konnte ich damals auch beantworten, soweit ich mich erinnere. Aber wirklich durchklicken will ich mich da nicht noch mal, diese Seite ist einfach nur lächerlich langsam.
Aber über was reden die da? Statische Lebenszeit, Stackframes, Sequenzpunkte, virtual, Initialisierungslisten? Finde ich jetzt nicht so weltbewegend, zumal 80% der Slides für Spielereien draufzugehen scheinen, die einfach nur UB sind und das (meistens recht uninteressante) Verhalten auf speziellen Maschinen erklären.Die meisten Themen da kann man in lockeren 3 Minuten klären. Ich finde es eher schade, dass er nicht auf die wirklich blöden Sachen eingegangen ist. Template-Overload-Resolution, Strict Aliasing, Alignment.
-
Ja, ich finde jeder muss ein tiefes Verstaendnis fuer C als Programmier mitbringen, egal welche Sprache. Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
-
knivil schrieb:
Ja, ich finde jeder muss ein tiefes Verstaendnis fuer C als Programmier mitbringen, egal welche Sprache. Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
-
Steffo schrieb:
knivil schrieb:
Ja, ich finde jeder muss ein tiefes Verstaendnis fuer C als Programmier mitbringen, egal welche Sprache. Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
Das sind eigentlich recht unterschiedliche Sachen. Ich habe seinerzeit mit Delphi angefangen, und als ich dann C gelernt habe, hab ich viel besser verstanden, wie das ganze funktioniert, weil Delphi doch sehr vieles abstrahiert hat und viele Details überhaupt nicht nötig waren. Von daher halte ich gute C Kenntnisse für wichtig, unabhängig davon, in welcher Programmiersprache man grad programmiert. Aber ich würde das nicht mit "Computern" gleichsetzen. Wie welcher C Standard statische Variablen initialisiert finde ich auch ziemlich unwichtig. Mag nicht schlecht sein sich da auszukennen, wenn man als C Programmierer arbeitet, für das allgemeine Verständnis ist es aber ziemlich nebensächlich.
-
Steffo schrieb:
knivil schrieb:
Ja, ich finde jeder muss ein tiefes Verstaendnis fuer C als Programmier mitbringen, egal welche Sprache. Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
Vielleicht wenn der Computer eine Turingmaschine ist. Ansonsten vermutlich eher nicht.
-
SideWinder schrieb:
http://www.slideshare.net/olvemaudal/deep-c
Ich konnte nicht alles beantworten, trotzdem den größten Teil. Scheinbar scheint sich aber keiner der drei daran zu stören, dass Sprachen die derartiges Detailwissen verlangen vielleicht schlichtweg Käse sind?
Wie denkt ihr da drüber? So tun als würde die Sprache viel abstrahieren aber letzten Endes dies nur tun wenn ich erst wieder über jedes Detail bescheid weiß...da habe ich doch nichts gewonnen...
MfG SideWinder
Es ist eben nicht so, dass die Sprache derartiges Detailwissen verlangen. Detailwissen ist hilfreich aber nicht immer notwendig. Man sollte wissen, was man tun darf und was nicht. Bei C sollte man wissen, wann undefiniertes Verhalten auftreten kann, aber warum und was die Folgen sind, ist unwichtig.
Es ist wie mit einem Automechaniker. Er muss wissen wie man ein Auto repariert, aber er muss kein Maschinenbauingenieur sein, der so ein Auto auch konstruieren kann.
Auch in anderen Sprachen ist Detailwissen hilfreich. Das viel gepriesene Java verlangt genauso Verständnis über den Garbage collector, wenn man wirklich das letzte raus holen will. Meistens reicht aber ein oberflächliches Wissen um gute Programme zu schreiben. Sicher braucht man bei C++ mehr Know-how als bei Java, aber das Know-how sollte jeder professionelle Softwareentwickler mit bringen.
-
Steffo schrieb:
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
xD Ja genau, weil Theoretische Informatik so viel mit Computern zu tun hat. Hahaha Alter, sei doch einfach still wenn du keine Ahnung hast.
-
knivil schrieb:
Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
Nein, es testet hauptsächlich, ob man die Arbeitsweise eines bestimmten Compilers unter bestimmten Optimierungsoptionen verstanden hat. Bei dem einen Beispiel das in etwa so aussah:
void bar(){int i = 42;} void foo(){ int a; printf("%d\n",a); } int main(){ bar(); foo(); }
kann alles raus kommen. Wenn der Compiler optimieren darf, kannst du nicht davon ausgehen, dass bar aufgerufen wurde. Du kannst auch generell nicht davon ausgehen, dass a an der selben Position im Speicher liegen wird, wie vorher i.
i könnte auch in einem Register liegen und a in einem anderen. Ich würde das dem Compiler sogar im Debug-Modus zutrauen.Erst nachdem du all diese Zusatzinformationen hast, dann testet der Test, wie der Computer funktioniert. Die Frage ist, ob das wirklich relevant ist.
-
Es ist wie mit einem Automechaniker. Er muss wissen wie man ein Auto repariert, aber er muss kein Maschinenbauingenieur sein, der so ein Auto auch konstruieren kann.
Der Vergleich hinkt. C-Programmierer bauen auch keine Computer.
Erst nachdem du all diese Zusatzinformationen hast, dann testet der Test, wie der Computer funktioniert. Die Frage ist, ob das wirklich relevant ist.
Ja. Dann anders: Das Maedel zeigt, dass sie ein bestimmtes Modell von Computer und Compiler im Kopf hat. Dieses Modell ist der Realitaet sehr nahe.
-
roflalter schrieb:
Steffo schrieb:
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
xD Ja genau, weil Theoretische Informatik so viel mit Computern zu tun hat. Hahaha Alter, sei doch einfach still wenn du keine Ahnung hast.
Das Thema hat sich eigentlich insofern erledigt, wenn man sich die Frage stellt, was Computer überhaupt tun. Dann kann man sich fragen, was theoretische Informatiker machen.
Man merkt dir aufjedenfall an, dass du keinerlei Berührung mit diesem Thema hattest...
EDIT: C hat übrigens gar nicht so viel mit Computern zu tun. Es ist nur eine Sprache, welche zu handhaben, nicht gerade sonderlich großen Computerverständnis erfordert...
-
Steffo, du hast in einem solchen Thread nichts zu suchen. Jeder weiß, dass du keine Ahnung hast. Tu dir selbst also einen Gefallen und verzieh dich.
-
Vielleicht kannst du anschaulich erklären, was Computerverständnis mit C im speziellen zu tun haben soll?
-
Steffo schrieb:
Vielleicht kannst du anschaulich erklären, was Computerverständnis mit C im speziellen zu tun haben soll?
Merkst du nicht, dass du von allen nur ausgelacht wirst? Du kannst keine der Fragen wie das Mädel beantworten, wenn du nicht ein halbwegs gutes Verständnis für Computer hast. Register, Callstack, Pointer, Cache, all das muss bekannt sein.
Aber das war auch gar nicht der Witz an deinem Beitrag. Der war nämlich das "theoretische" vor "Informatiker", es hat einfach köstlich gezeigt wie wenig Ahnung du von dem hast, was du da von dir gibst.