höhere/maschinenorientierte Programmiersprache

  • Hallo!


    Es geht um maschinenorientierte und höhere Programmiersprachen.


    Und zwar bräuchte ich je die wichtigsten Eigenschaften, die die jeweilige Gruppe ausmachen und dann noch beide verglichen, also Unterschiede, aufgeschlüsselt in Vor- Und Nachteile.
    Wichtiges Stichwort ist dabei die Effektivität.


    Hier mal meine Ansatzpunkte:


    höhere Programmiersprachen:


    - Schleifen möglich
    - vorgefertigte Module (geriger Zeitaufwand)
    - logisch verständlich
    - viel, was ausgeführt wird, wird gar nicht benötigt (zeitintensiv)


    maschinenorientierte Programmiersprachen:


    - schwer verständlich
    - keine vorgefertigten Module --> alles muss selber geschrieben werden (zeitintensiv)
    - Fehler können besser überprüft werden
    - keine Schleifen, sondern Sprünge
    - schnelle, effektive Abläufe


    Hm, finde das aber noch ein bisschen dürftig, hoffe deshalb auf eure Hilfe :)


    Wäre euch wirklich sehr dankbar!


    Rayne

  • Was meinst du mit "Fehler können besser überprüft werden "?



    im Grunde hast du die wichtigsten Vor- und Nachteile. Allerdings fehlen meiner Ansicht nach die Brgründungen für deine Vor- und Nachteile. Warum sind maschienen oridentierte Sprchen z.B. schwer verständlich?


    Worüber du noch nachdenken solltest sind nutzbare Datentypen, Maschinenabhängigkeit und Komplexität der Programme

  • Zitat

    Was meinst du mit "Fehler können besser überprüft werden "?


    Hm, das habe ich mich auch schon gefragt, aber diesen Stichpunkt habe ich von meinem Lehrer aufgeschnappt ?(
    Vielleicht, weil der Programmtext nicht so verschachtelt ist.


    Zitat

    Allerdings fehlen meiner Ansicht nach die Brgründungen für deine Vor- und Nachteile. Warum sind maschienen oridentierte Sprchen z.B. schwer verständlich?


    Ja, das stimmt. Aber deshalb habe ich auch hier gepostet um zu hoffen, dass mir jemand hier kompetent weiterhelfen kann ;)
    Denn richtig wissen tue ich es nicht, ich kann es nur erahnen, aber wie es dann mit der Richtigkeit aussieht...


    Höhere Programmiersprachen sind auf jeden Fall leichter verständlich, da sie weitestgehend unserer Sprache entsprechen und Befehle nutzen, die jeder kennt oder zumindestens interpretieren kann.
    Das ist bei der maschinenorientierten Programmiersprache nicht der Fall.
    Hat das eventuell auch noch etwas mit dem Compiler zu tun? ?(
    Also höhere Programmiersprachen benötigen einen Compiler, damit die Befehle für den Computer verständlich "übersetzt" werden können.
    Bei der maschinenorientierten programmiersprache sind die Befehle direkt computerverständlich eingegeben, somit erklärt sich auch die schwere Verständlichkeit für den Menschen.


    Irgendwas hat mein Lehrer auch davon gesagt, dass bei der höheren Programmiersprache die Register nicht eingesehen werden können, was im Vergleich zu der maschinenorientierten Programmiersprache Zeiteinbußen mit sich bringt...so ganz verstehe ich das aber nicht.


    Zitat

    Worüber du noch nachdenken solltest sind nutzbare Datentypen, Maschinenabhängigkeit und Komplexität der Programme


    Maschinenorientierte Programmiersprachen laufen doch nur auf bestimmten Prozessoren, richtig?
    Programme mit höheren Programmiersprachen sind flexibler in ihrer Anwendung, da prozessorunabhängiger...vermute ich mal.


    Komplexität....hmm....ich schätze, da hat die maschinenorientierte Programmiersprache einen Vorteil, da dort nur die Befehle eingegeben werden, die auch tatsächlich gebraucht werden. Im Gegensatz zu den höheren Programmiersprachen, wo viel vorgegebenes mit ausgeführt wird, was gar nicht direkt zum Programm gehört.


    Bei den Datentypen muss ich passen :(
    Weiß da nicht so richtig, wie das bei den maschinenorientierten Sprachen gehandhabt wird.
    Vielleicht kann mir hierzu jemand weiterhelfen :)


    Danke!


    Rayne

  • Eigentlich erhält der Programmierer je abstrakter (höher) die Sprache ist immer mehr Möglichkeiten den Quelltext zu verschachteln. Meiner Meinung kann man jeden Quelltext so schrieben, dass er unlesbar wird. Paradebespiele sind Skript-Sprachen wie Perl.
    Assembler-Programme sind einfach aufgebaut, dort ist eher das Verständnis das Problem. Demnach wäre das genau das Gegenteil von dem was du meinst.


    Evtl. meint dein Lehrer dass es für Standardstrukturen (schleifen usw) vorgefertigte Elemente in den Hochsprachen gibt und der Aufbau an die Denkweise des Menschen angepasst ist.


    In den maschinennahen Sprachen muss der Programmierer diese selber bilden (eben über sprünge). Bei Hochsprachen übersetzt der Compiler die Abstrakten Elemente in die Maschinensprache. Das ist natürlich deutlich einfacher zu verstehen und auch zu testen, als wenn man jede Schleife selber zusammen bastelt. Auch ist die Programmierung mit fortschreitender Komplexität der Programme fehler unanfälliger. (Fehlerfrei ist keine Software)


    Desweiteren sind Maschinennahen Sprachen eigentlich nur die unterschiedlichen Assembler für die jeweiligen Prozessortypen. Jeder Prozessortyp hat in der Regel einen anderen Befehlssatz und somit auch andere Assemblerbefehle. Das ist natürlich ein großes Problem, wenn man Programme auf einen anderen Prozessortyp übertragen möchte. Das ist oft garnicht möglich. Programmieren auf höherer Ebene (mit Bibliotheken usw.) ist eigentlich garnicht möglich. Um dies zu ermöglichen, können dann höhere (C, C++, Delphi ... ) oder Hochsprachen (Java ... ) genutzt werden.


    Bei maschinennahen Sprachen können nur primitive Datentypen genutzt werden. Im Prinzip stehen einem ja nur die Register zur Verfügung, die man selber interpretieren muss. Bei höheren Sprachen über nimmt das alles der Compiler.


    Bei Hochsprachen ist es dann sogar so, dass die Rechnerarchitektur und sogar das Betriebssystem nicht bekannt sein müssen. Der Compiler und entsprechende Bibliotheken oder auch Virtuelle Maschinen wie bei Java, ermöglichen dann ein Plattformübergreifendes Ausführen der Programme.


    Bei solchen Hochsprachen ist es dann auch nciht mehr möglich auf Register direkt zu zugreifen. Die Speicherverwaltung erledigt der Compiler oder das Betreibsystem. Desswegen sehe ich persöhnlich Sprachen wie C auch noch als recht maschinennah an. Die Grenzen sind wie immer nicht scharf abgegrenzt.


    Noch was zu den Datentypen. Bei höheren Sprachen stehen verschiedene Zahlentypen und andere Datentypen (Zeichen, Zeiger, Mengen ...) zur Verfügung. Bei Hochsprachen kann es um sehr komplexe Datentypen handeln, die der Programmierer auch selbst definieren kann. Das könenn dann schon Zeichenketten, Mengen bis hin zu Listen oder graphischen Objekten sein. Man sieht der Abstraktionsgrad wird immer großer.



    p.S. ich weiß der Text ist etwas konfus, Frag (möglichst genau) wenn du etwas nicht verstehst

  • Hallo!
    Danke für deine Hilfe :)


    Habe jetzt mal etwas Zeit gefunden, die wichtigsten Merkmale übersichtlich darzustellen:


    [Blockierte Grafik: http://www.sky-divezone.de/Other/Sprachen.gif]


    Sind dort irgendwelche Fehler oder Unstimmigkeiten versteckt?


    Mich irritiert nur der Punkt bei der höheren Programmiersprache, dass die bei wachsender Komplexität übersichtlicher werden sollen.
    Man kann den Programmtext zwar besser interpretieren, aber die Befehle verschlingen doch Unmengen an Platz und dürften doch somit die Übersicht einschränken, oder etwa nicht ?(


    Danke!


    Rayne

  • Also ein paar sachen hab ich da schon:


    1. Ging es nicht um maschinenennahe Sprachen? Maschinensprache ist 01000110 usw. maschinenennahe Sprachen sind Assembler (Befehle z. B. MOV 04h, 05h


    Darauf aufbauend sind natürlich die pro und contra nicht ganz richtig.


    2. Was sind enfache Datenstrukturen für dich? Datenstrukturen (Zeichenketten bis Listen und Felder) sind in Assembler nur mühsam per Hand zu gestallten. Also im Prinzip durch die Sprache nicht gegeben.


    3. Was meinst du mit komprimierter Syntax?


    4. Fließkommazahlen sind auch im Assambler möglich, das ist eher Prozessorabhängig


    5. Mit der Bewertung der Portabilität der Programme wäre ich vorsichtig, da deine Gruppe (höhere Programmiersprechen) doch sehr viele verschiedene Sprachen einschließt. Allgemein kann man das unter umständen schon so sagen wie du das machst. Prinzipiell steigt die Portabilität mit dem Abstaktionsgrad der Sprache, der Grund ist einfach, dass nicht mehr auf Hardwäreebene gearbeitet wird (wie z.B. noch bei C und C++)


    Die Frage ist wo sie übersichtlicher sind.
    Wenn man den Maschinen-Code anschaut sind alle Programme mit höherer Komplexität unübersichtlich. Schaut man sich den Quellcode an sicher nicht. Du kannst dir ja mal einfache Schleifen und Verzwiegungen in Assembler und in C anschauen. Wenn du dann noch sagst maschinennahe Sprachen sind dort übersichtlicher, reden wir weiter ;)


    Ich weiß auch nciht was du mit "unmengen von platz", den sie verbrauchen sollen meinst.

  • Zitat

    1. Ging es nicht um maschinenennahe Sprachen? Maschinensprache ist 01000110 usw. maschinenennahe Sprachen sind Assembler (Befehle z. B. MOV 04h, 05h


    Es geht um Sachen wie Assembler.


    Zitat

    2. Was sind enfache Datenstrukturen für dich? Datenstrukturen (Zeichenketten bis Listen und Felder) sind in Assembler nur mühsam per Hand zu gestallten. Also im Prinzip durch die Sprache nicht gegeben.


    Hm, diesen Stichpunkt habe ich bei Wikipedia im Vergleich der beiden Sprachen gefunden.
    Ich kenne keine maschinennahe Sprache im praktischen Sinne, habe also noch nie wirklich damit gearbeitet und muss eben das glauben, was ich höre bzw. lese :/


    Zitat

    3. Was meinst du mit komprimierter Syntax?


    Komprimierte Syntan bedeuten kurze Befehle, die wenig Raum für Interpretationen oder Verständnis bieten.
    Bei höheren Sprachen ist die Syntax wesentlich "auseinandergezogen", sodass man den Sinn hinter den Befehlen leichter erkennen kann.


    Zitat

    4. Fließkommazahlen sind auch im Assambler möglich, das ist eher Prozessorabhängig


    Hm, diese Angabe habe ich auch bei Wiki gefunden.
    Ich muss nicht unbedingt jede Ausnahme kennen, sondern so die groben Merkmale/Unterschiede :)


    Zitat

    5. Mit der Bewertung der Portabilität der Programme wäre ich vorsichtig, da deine Gruppe (höhere Programmiersprechen) doch sehr viele verschiedene Sprachen einschließt. Allgemein kann man das unter umständen schon so sagen wie du das machst. Prinzipiell steigt die Portabilität mit dem Abstaktionsgrad der Sprache, der Grund ist einfach, dass nicht mehr auf Hardwäreebene gearbeitet wird (wie z.B. noch bei C und C++)


    Wie oben geschrieben. Du hast sicherlich Recht, aber im Prinzip ist das mit der Portabilität so einzuordnen. Klar wird es Ausnahmen geben und Eventualitäten, aber ich muss nur wissen, wie es hauptsächlich ist.


    Zitat

    Die Frage ist wo sie übersichtlicher sind.
    Wenn man den Maschinen-Code anschaut sind alle Programme mit höherer Komplexität unübersichtlich. Schaut man sich den Quellcode an sicher nicht. Du kannst dir ja mal einfache Schleifen und Verzwiegungen in Assembler und in C anschauen. Wenn du dann noch sagst maschinennahe Sprachen sind dort übersichtlicher, reden wir weiter ;)


    OK, da hast du wohl mit Sicherheit Recht und kennst dich da besser aus. Wie gesagt, so viele Programme in Assembler und Co. habe ich noch nicht wirklich gesehen ;)


    Zitat

    Ich weiß auch nciht was du mit "unmengen von platz", den sie verbrauchen sollen meinst.


    Unmengen von Platz habe ich doch nirgendswo geschrieben ?(
    Aber auf Grund des Umfangs von höheren Programmiersprachen dürften die mit Sicherheit mehr Speicherplatz benötigen.
    Ob das nun viel ist oder nicht, spielt hier erstmal keine große Rolle ;)

  • Zitat

    Man kann den Programmtext zwar besser interpretieren, aber die Befehle verschlingen doch Unmengen an Platz und dürften doch somit die Übersicht einschränken, oder etwa nicht



    Tja Leider stimmt nicht alles was in der Wikipedia steht (das gilt generell für alle Bücher und andere Informationsquellen)


    Das mitdem komprimierten Quelltext ist wieder so eine Sache, Assemblerbefehle leiten sich meist direkt aus der Funktion ab, z. B. MOV für verschieben (move) oder ADD für addieren. Sicher ist die Schreibweise stark verkürzt, was als komprimiert gesehen werden kann. Das hat abe reigentlich historische ursachen, früher war halt Speicherplatz knapp und man hat um jedes Byte im Quelltext gekämpft. Das sieht man auch schön bei C, wo die Schreibweise C++ ja für das inkrementieren der Variable C steht, also C = C +1.
    Höhere und vorallem neuere Sprachen haben diese eigenheit meist nicht. Befehle können fast beliebig lange Namen bekommen, dieser läßt sich idealerweise auch gleich als Kurzbeschreibnung nutzen. Die komprimierte Schreibweise ist also schon richtig, es leigt aber weniger an der Sprache als an historisch gewachsenen Eigenheiten.


    Datentypen & Datenstrukturen


    komplexe Datentypen sind im Grunde Datenstrukturen. Felder und Listen sind wohl die einfachsten Datenstrukturen in Sprachen wie Pascal oder Java sind diese als "einfache Datentypen" bezeichnet so genannte Primitives. Man sollte in einem Vergleich also schon klar sagen was man unter einem Begriff versteht. Ich würde das mit "nur einfache Datenstrukturen" bei Assembler entfernen.



    Ob Fließkommazahlen nutzbar sind, ist vom Prozessortyp abhängig. Alte Prozessoren udn viele Mikrocontroller nicht, Pentiums Athlons sowie RISC-Prozessoren von Motorolla oder IBM eigentlich heutzutage schon. Stichwort MMX oder SSE