besonderheiten der kompilation oop



  • da könnte was wahres dran sein, wenn du mal bashars post gelesen hast. wie genau ein komplier im detail funktioniert, weis wahrscheinlich keiner, bis auf die freaks, die gcc und konsorten machen. frag doch mal bei denen nach.



  • Ich denke wie sich die anderen User verhalten liegt ganz an dir, lies dir mal
    deine Postings durch und dann meines hier, vllt. entdeckst du einen Unterschied.



  • entschuldigung, das mein posting nicht so aussieht wie alle andere, ich werde mir gleich den still von allen zulegen und dann mich brav einreihen und mein tristes das sein in einer langen reihe von gleichen zu verbringen...
    man ich schreib anders wie alle anderen, und andere schreiben wieder anderes und was soll daran falsch sein..
    wenn wir alle gleich wären, wäre es wohl eich trist, oder??

    ich habe mein posting weder böse, noch frech verfasst
    ich möchte doch nur mal etwas über die besonderheiten von ... was wissen. Das ich kein freak bin wie alle anderen dürfte man eigentlich schon daran gemerkt haben, das ich so was frage.
    also kann man doch eine normale antwort verlangen, oder

    aber ich kann es auch lassen und mir jemand anderes suchen, der das erklären kann, aber dann dürft ihr euch hier nicht mehr forum nennen, weil unter forum ich verstehe das einem bei problemen geholfen wird.
    eine frage dazu, konnte man aus diesen antworten eine hilfe ersehen??
    und jetzt sollen die antworten die anfänger sind wie ich.

    so ich hoffe das die "anderen User" das nicht soooo böse auffassen, aber auf eine so d..fe antwort muss man so was mal los werden.



  • 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 kann

    Merk 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 gibst

    So 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


Anmelden zum Antworten