besonderheiten der kompilation oop
-
gaga schrieb:
ich kein freak bin wie alle anderen [...]
also kann man doch eine normale antwort verlangen, oder
aber ich kann es auch lassen und mir jemand anderes suchen, der das erklären kannMerk Du was? Alle anderen sind ja Freaks! Aber da kann man schon ne ordentliche Antwort verlangen, nicht wahr?
Damit triffst Du übrignes den Punkt der Sache: Du kannst hier garnichts verlangen. Wenn die Leute Lust haben Dir zu antworten, dann tun sie das auch und ansonsten nicht.
Dennoch fühlen wir uns geehrt, daß gerade wir auserwählt wurden Dir das beantworten zu dürfen.So, und jetzt mal zur Frage:
Die Frage ist einfach etwas ungünstig würde ich sagen. Denn alles, was mit mit OOP machen kann kann man auch so machen. Ob ich jetzt Objekt.Funktion(Parameter) schreibe oder Funktion(this-Zeiger vom Objekt, Parameter) ist eigentlich nur ein syntaktische Unterschied. Und schon bist Du mitten in einer "normalen" Sprache.
Ob es da jetzt noch spezifische Unterschiede gibt kann ich Dir nicht sagen, aber meines wissens gab (oder gibt es?) C++ Compiler, die nach C übersetzt haben und das wird wohl so ähnlich gelaufen sein. Für virtuelle Funktionen ruft man halt nicht gleich die Funktion auf, sondern da hat der this-Zeiger den richtigen pointer für die Funktion dabei etc.
Allerdings weiß ich nicht, ob es nicht vielleicht noch andere Wege gibt sowas zu übersetzen. Aber das ist zumindest ein möglicher und ich denke, daß es so auch in den meisten Fällen umgesetzt wird.MfG Jester
-
aber meines wissens gab (oder gibt es?) C++ Compiler, die nach C übersetzt haben
Jo. CFront z.B. Wer mehr zum Thema Abbildung von C++ auf C wissen möchte, der sollte einen Blick in "Inside the C++ Object Model" von Lippman werfen. Ich fand die Lektüre sehr lohnend.
@gaga
Ich sehe beim Besten Willen nicht, wie ich dich ernst nehmen soll. Erst wiederholst du gebetsmühlenartig deine merkwüdige Frage trotz der Bitte doch mal zu erklären, was genau du wirklich wissen willst und dann heulst du rum, das du von bösen Freaks umzingelt bist.@Bashar
Da du ja nun der einzige zu sein scheinst, der weiß worum es in diesem Thread gehen soll, wäre es vielleicht hilfreich (besonders für gaga), wenn du uns mal aufklären könntest. Ich zumindest komme mir hier mächtig veralbert vor.
OOP ist meines Wissens nach hauptsächlich ein Denk- und Design-Modell. Kein fest definiertes Implementationsmodell. Nach dem Motto: "Der Unterschied bei OOP-Sprachen gegenüber Pascal ist, dass sie ihr Front-End orthogonal zur oo-Achse implementieren müssen. Ihr Back-End muss danach lauter unnütze noops einstreuen, weil Abstraktion und OOP nun mal langsamer ist."Ich könnte mir vorstellen, dass man nach den Besonderheiten der OOP gegenüber der prozeduralen Programmierung fragt. In Bezug auf die Hernagehensweise. In Bezug auf die Sichtweise der Abarbeitung eines Programms usw. Ich könne mir auch vorstellen, dass man an der Compilertechnik *konkreter* Compiler interessiert ist (ein völlig anderes Level) oder an Techniken Compiler in OOP-Manier zu schreiben.
Nur was bitte soll "Kompilation der OOP sein?" Und was sind OOP's?
-
HumeSikkins schrieb:
@Bashar
Da du ja nun der einzige zu sein scheinst, der weiß worum es in diesem Thread gehen soll, wäre es vielleicht hilfreich (besonders für gaga), wenn du uns mal aufklären könntest. Ich zumindest komme mir hier mächtig veralbert vor.Ich glaube nicht, dass ich das im Detail kann. Schließlich hab ich "Modern Compiler Design" schon vor Monaten zurück in die Bibliothek gebracht. Allgemein ist schon alles gesagt: Es geht darum, ob Compiler für objektorientierte Sprachen irgendwelche Besonderheiten gegenüber solchen für prozedurale Sprachen haben. Das Kapitel darüber in MCD enthält meiner Erinnerung nach deutlich mehr Text als "Siehe prozedurale Programmierung", also kann es durchaus sein, dass es diese Besonderheiten gibt.
Dass die meisten hier sich das nicht vorstellen können kann man akzeptieren. Aber warum dann gleich den Frager lächerlich machen?OOP ist meines Wissens nach hauptsächlich ein Denk- und Design-Modell. Kein fest definiertes Implementationsmodell.
Es hat ja auch keiner unterstellt, dass es DIE Besonderheit gibt. Es gibt einige Dinge, die nur in OO-Sprachen von Bedeutung sind (Vererbung und Polymorphie z.B.), und wahrscheinlich einige, die sich erst aus dem anderen Charakter der Programme ergeben (kurze Prozeduren, viel Pointer-Indirektion, viel Heap-Allokation, etc.)
-
ich wollte keine verarschen, ect.
Ausserdem verlange ich nicht das man mir antwortet, es wäre halt schöner..
aber wenn man antwortet, dann bitte so das ich es auch verstehe.so dann, die frage so wie ich sie stellt war, hab ich als aufgabe bekommen um darüber eine ausarbeitung zumachen.
Da ich aber keine ahnung hab was die besonderheiten sein sollen beim übersetzen dachte ich mir ich frag jemand der sich damit auskennt, um mir zumindest einen anstoss zu holen was vielleicht dazu gehören könnte ( als besonderheit).
Es tut mir leid wenn sich jemand auf den schlips getreten fühlt, das war keine absicht.
@ Bashar Danke, das du mir rückendeckung gibst
-
aber wenn man antwortet, dann bitte so das ich es auch verstehe.
Eine vernünftige Antwort setzt eine vernünftige Frage voraus. Eine Frage die das Gebiet um das es geht einschränkt. Wer nach dem Leben, dem Universum und dem ganzen Rest fragt, darf sich über die Antwort "42" nicht wundern.
Es geht darum, ob Compiler für objektorientierte Sprachen irgendwelche Besonderheiten gegenüber solchen für prozedurale Sprachen haben.
Tatsächlich? Und das steht wo genau?
Es gibt einige Dinge, die nur in OO-Sprachen von Bedeutung sind (Vererbung und Polymorphie z.B.), und wahrscheinlich einige, die sich erst aus dem anderen Charakter der Programme ergeben (kurze Prozeduren, viel Pointer-Indirektion, viel Heap-Allokation, etc.)
Es gibt imo nicht einige Dinge sondern unzählige. Die meisten auf völlig verschiedenen Ebenen. Über Polymorphie und Vererbung kann man im Umfang von Büchern reden, ohne das Wort Compiler auch nur in dem Mund zu nehmen. Und genausogut kann ich das ganze von ganz unten betrachten, dann kommt da aber ebenso eine Menge Holz zusammen.
Zusätzlich: Wenn ich A mit B in Vergleich setzen soll, dann bietet es sich an, wenn der Fragesteller bereits über Wissen zum Thema B verfügt. Ansonsten ist ein Vergleich imo nutzlos.Konkret: Wenn es hier um Implementationen auf Compilerebene geht, dann sollte der OP wohl zumindest ein grundlegendes Wissen zum Theme Compilerbau mitbringen (zumindest im Bereich der prozeduralen Sprachen). Danach sieht es mir aber nicht aus.
Versteh mich nicht falsch, ich behaupte nicht, dass ich zu diesem Thema großartig viel sagen kann (Ich habe nur einen Kurs zum Thema Compilerbau gehört). Ich behaupte aber, dass eine derartig schwammig gestellte Frage überhaupt keine sinnvolle Antwort haben kann.
Denn entweder man fängt einfach an zu labern (so wie ich), man erzählt willkürlich irgendwelche Sachen (nach dem Motto: Für die Implementation von später Bindung bietet sich das Konzept einer Indirektion über eine Methodentabelle an), oder, falls jemand mit mächtig viel Compiler-Bau-Erfahrung antwortet, wird der OP es nicht verstehen. Zumindest, wenn die Länge der Antwort nicht den Rahmen eines Forums sprengen soll.Ich sehe nach wie vor keine Themeneingrenzung. Unter der Annahme, dass du Recht hast (was ich bezweifle), scheint mir die einzig vernünftige Antwort bisher:
1. Falls du keinerlei Erfahrung im Bereich Compilerbau hast, besorg dir das "Drachenbuch".
2. Besorg dir das Buch "Modern Compiler Design".
3. Lies es.
4. Frag Bashar, wenn du was nicht verstehst.
-
Na also geht doch:
ich wollte keine verarschen, ect.
Ausserdem verlange ich nicht das man mir antwortet, es wäre halt schöner..
aber wenn man antwortet, dann bitte so das ich es auch verstehe.so dann, die frage so wie ich sie stellt war, hab ich als aufgabe bekommen um darüber eine ausarbeitung zumachen.
Da ich aber keine ahnung hab was die besonderheiten sein sollen beim übersetzen dachte ich mir ich frag jemand der sich damit auskennt, um mir zumindest einen anstoss zu holen was vielleicht dazu gehören könnte ( als besonderheit).
Es tut mir leid wenn sich jemand auf den schlips getreten fühlt, das war keine absicht.
@ Bashar Danke, das du mir rückendeckung gibstSo sollte nen Posting aussehen.
Du hast keine tausend Satzzeichen nacheinander verwendet und dich endlich mal
deutlich ausgedrückt.
Es geht hier nicht um deinen Stil den meinte ich nicht, sondern darum, dass man
in richtigem und vor allem verständlichen Deutsch um Hilfe bitten sollte.Ich kenn mich mit Compilern zwar nicht aus, aber ich weiß dass es aufgesetztes
und richtiges OOP gibt.
C++ ist richtiges, da es direkt in ASM umgewandelt wird und nicht intern erst
in C und dann in Assembler.
Die Objektorientierung bleibt aber auch im Assembler-Code enthalten, sonst wäre
OOP nicht langsamer als ein prozedurales Programm.
-
SirLant schrieb:
Ich kenn mich mit Compilern zwar nicht aus, aber ich weiß dass es aufgesetztes
und richtiges OOP gibt.?
C++ ist richtiges, da es direkt in ASM umgewandelt wird und nicht intern erst
in C und dann in Assembler.Wo steht das, und hast du schonmal von cfront gehört?
Die Objektorientierung bleibt aber auch im Assembler-Code enthalten, sonst wäre
OOP nicht langsamer als ein prozedurales Programm.Ist es?
-
SirLant schrieb:
Ich kenn mich mit Compilern zwar nicht aus, aber ich weiß dass es aufgesetztes
und richtiges OOP gibt.
C++ ist richtiges, da es direkt in ASM umgewandelt wird und nicht intern erst
in C und dann in Assembler.Und was ist mit CFront? Das ist ein Compiler, der aus dem C++ Code C code generiert.
Die Objektorientierung bleibt aber auch im Assembler-Code enthalten, sonst wäre
OOP nicht langsamer als ein prozedurales Programm.Interessant. Wie definiere ich in Assembler denn eine Klasse?
-
Das meinte ich doch nicht, ich meinte die Art wie etwas OOP mäßig erledigt wird,
also Objekte usw. die werden auch gekapselt abgelegt wie Strukturen in C, nur sind
Objekte halt komplexer (bei weitem).Und für richtige C++ Compiler ist es meines Wissens nach pflicht direkt in ASM
und nicht über C zu compilieren.
-
SirLant schrieb:
Das meinte ich doch nicht, ich meinte die Art wie etwas OOP mäßig erledigt wird,
also Objekte usw. die werden auch gekapselt abgelegt wie Strukturen in C, nur sind
Objekte halt komplexer (bei weitem).Verstehe ich nicht. Kannst du mir bitte erklaeren was du damit meinst?
Und für richtige C++ Compiler ist es meines Wissens nach pflicht direkt in ASM
und nicht über C zu compilieren.Also ich kann im Standard keine Stelle finden in der das verlangt wird.
IMHO darf eine C++ Implementation auch Bytecode produzieren oder direkt Interpretieren.
-
Comeau compiliert doch auch über C, oder?
-
also ein klasse in C++ ist eine struktur aus C mit funktionen die als methoden hinzugefuegt werden
-
Was ist mit der Kaspelung? Was ist mit der virtuellen Methodentabelle? ...
-----
Auch wenns ernst gemeint war "4. Frag Bashar, wenn du was nicht verstehst." klingt irgendwie lustig.-----
@gaga: Damit man vielleicht etwas mehr dahinterkommt, was du konkret willst, solltest du vielleicht mal erzählen, was du grade machst. Aus welchem Kontext heruas wurde diese seltsame Frage gestellt. Vielleicht wird es dann etwas klarer.
-
Sorry dann war das mit dem Compiler was anderes, hatte vor einiger Zeit wo
gelesen, dass es für C++ irgendwie was besonderes war,dass es direkt in ASM
umgewandelt wird und nicht in C und dann erst ASM.
Hatte ich dann irgendwie falsch behalten.Daher hatte ich mir das zusammengereimt, dass es eben ein Unterschied gibt ob
OOP direkt in ASM oder über eine prozedurale Sprache in ASM umgewandelt wird.Sorry nochmal.
-
@Helium
Ich hatte weiter oben erwähnt, das ich das als aufgabe für eine ausarbeitung bekommen hab und ich mich erstmal erkundigen wollte nach was ich suchen muss.@ all
jetzt weiss ich zumindest schon mal mehr als wie vorgestern....
DANKE
-
@Helium
Ich hatte weiter oben erwähnt, das ich das als aufgabe für eine ausarbeitung bekommen hab und ich mich erstmal erkundigen wollte nach was ich suchen muss.Hu???
Aus welchem Kontext heruas wurde dir die Aufgabe gestellt? Antwort: Mir wurde eine Aufgabe gestellt.
OK. Dann kann ich dir auch nicht helfen, tut mir leid.
-
SirLant schrieb:
Daher hatte ich mir das zusammengereimt, dass es eben ein Unterschied gibt ob OOP direkt in ASM oder über eine prozedurale Sprache in ASM umgewandelt wird.
Hast Du eigentlich den Thread gelesen? Insbesondere die Postings von Hume?
Dann sollte Dir eigentlich klar sein, daß OOP garnicht in irgendwas umgewandelt wird, weder in ASM noch in sonstwas.MfG Jester
-
maschinencode halt
aber das ist ja eigentlich assemblerweil assembler eine 1:1 abbildung von maschinencode ist
ausser das er halt so sachen hat wie makros und so - aber das lass ich jetzt einmal weg
-
Helium schrieb:
Aus welchem Kontext heruas wurde dir die Aufgabe gestellt? Antwort: Mir wurde eine Aufgabe gestellt.
OK. Dann kann ich dir auch nicht helfen, tut mir leid.Sorry,
aber was ist daran so schwer zu verstehen, das ich eine aufgabe für eine ausarbeitung gestellt bekommen habe, die da hies:
"Besonderheiten der compilation von oop"
und da ich keine ahnung habe was ich darüber schreiben soll, geschweige den was die besonderheiten sind, dachte ich mir ich frag hier mal.
Wenn du wissen willst, warum mir gerade das auferlegt wurde und wie man auf sowas kommen kann, kann ich dir sagen das es für Compilerbau ist.
Ich hoffe das die antwort dich mehr zufrieden stellt....