Programmiersprache auf hoher Ebene
Im Informatik, a Programmiersprache auf hoher Ebene ist ein Programmiersprache mit stark Abstraktion Aus den Details der Computer. Im Kontrast zu Programmiersprachen mit niedriger Ebene, es kann verwenden Natürliche Sprache Elemente, seien Sie einfacher zu verwenden oder können signifikante Bereiche von Computersystemen (z. Speicherverwaltung), damit der Prozess der Entwicklung eines Programms einfacher und verständlicher wird als bei der Verwendung einer Sprache auf niedrigerer Ebene. Die Menge an Abstraktion definiert, wie "hochrangiger" eine Programmiersprache ist.[1]
In den 1960er Jahren eine hochrangige Programmiersprache mit a Compiler wurde allgemein als ein bezeichnet Autocode.[2] Beispiele für Autocodes sind Cobol und Forran.[3]
Die erste Programmiersprache auf hoher Ebene, die für Computer entwickelt wurde, war Plankalkül, erstellt von Konrad Zuse.[4] Es wurde jedoch zu seiner Zeit nicht umgesetzt, und seine ursprünglichen Beiträge waren weitgehend von anderen Entwicklungen aufgrund von anderen Entwicklungen isoliert Zweiter WeltkriegAbgesehen vom Einfluss der Sprache auf die Sprache "Superplan" von Heinz Rutishauser und auch bis zu einem gewissen Grad Algol. Die erste weit verbreitete hochrangige Sprache war Forran, eine maschinenunabhängige Entwicklung von IBMs früher Autocode Systeme. Das Algol Familie, mit Algol 58 1958 definiert und Algol 60 Definiert 1960 von Ausschüssen europäischer und amerikanischer Informatiker, eingeführt Rekursion ebenso gut wie verschachtelte Funktionen unter lexikalischer Bereich. Algol 60 war auch die erste Sprache mit einer klaren Unterscheidung zwischen Wert und Namensparameter und ihre entsprechend Semantik.[5] Algol stellte auch mehrere vor Strukturierte Programmierung Konzepte wie die währendd
und If-then-else
Konstrukte und seine Syntax War der erste, der in formaler Notation beschrieben wurde - Backus -Naur -Form (BNF). Während der gleichen Zeit, Cobol eingeführt Aufzeichnungen (auch Struktur genannt) und Lispeln stellte einen völlig allgemeinen vor Lambda -Abstraktion in einer Programmiersprache zum ersten Mal.
Merkmale
"Hochrangige Sprache" bezieht sich auf die höhere Abstraktionsniveau von Maschinensprache. Anstatt sich mit Registern, Speicheradressen und Rufstapeln zu befassen, befassen sich hochrangige Sprachen mit Variablen, Arrays, Objekte, komplexe arithmetische oder boolesche Ausdrücke, Unterprogramme und Funktionen, Schleifen, Themen, Schlösser und andere abstrakte Informatikkonzepte mit Schwerpunkt auf Benutzerfreundlichkeit Über optimale Programmeffizienz. Im Gegensatz zu niedriger Ebene Assemblersprachen, hochrangige Sprachen haben nur wenige, wenn überhaupt, Sprachelemente, die sich direkt in den Eingeborenen einer Maschine übersetzen Opcodes. Andere Funktionen, wie z. B. Routinen für Zeichenfolge, objektorientierte Sprachfunktionen und Dateieingabe/Ausgabe, können ebenfalls vorhanden sein. Eine Sache, die über hochrangige Programmiersprachen zu beachten ist, ist, dass diese Sprachen es dem Programmierer ermöglichen, sich von der Maschine zu lösen und getrennt zu werden. Das heißt, im Gegensatz zu Sprachen auf niedrigem Niveau wie Montage oder Maschinensprache kann die Programmierung auf hoher Ebene die Anweisungen des Programmierers verstärken und viele Datenbewegungen im Hintergrund ohne ihr Wissen auslösen. Die Verantwortung und die Kraft, Anweisungen auszuführen, wurden vom Programmierer an die Maschine übergeben.
Abstraktionsstrafe
Hochrangige Sprachen beabsichtigen, Merkmale bereitzustellen, die gemeinsame Aufgaben standardisieren, ein reiches Debuggen ermöglichen und architektonische Agnostizismus aufrechterhalten. während Sprachen auf niedrigem Niveau häufig effizientere Code durch produzieren Optimierung Für eine bestimmte Systemarchitektur. Abstraktionsstrafe sind die Kosten, die hochrangige Programmierungstechniken dafür bezahlen, dass sie die Leistung nicht optimieren oder bestimmte Hardware verwenden können, da sie bestimmte Architekturressourcen auf niedrigem Niveau nicht nutzen. High-Level-Programmierung zeigt Funktionen wie generische Datenstrukturen und -operationen, Laufzeitinterpretation und Zwischencode-Dateien; Dies führt häufig zur Ausführung weit mehr Operationen als notwendig, höherer Speicherverbrauch und größerer binärer Programmgröße.[6][7][8] Aus diesem Grund kann Code, der besonders schnell und effizient ausgeführt werden muss, möglicherweise eine Sprache auf niedrigerer Ebene erfordern, selbst wenn eine höhere Sprache die Codierung erleichtert würde. In vielen Fällen können kritische Teile eines Programms hauptsächlich in einer hochrangigen Sprache in Hand codiert werden Montagesprache, was zu einer viel schnelleren, effizienter oder einfach zuverlässig funktionieren optimiertes Programm.
Mit der wachsenden Komplexität der Moderne jedoch Mikroprozessor Architekturen, gut gestaltete Compiler für hochrangige Sprachen erzeugen häufig einen Code, der in der Effizienz vergleichbar ist, was die meisten Programmierer mit niedriger Ebene von Hand produzieren können, und die höhere Abstraktion kann leistungsfähigere Techniken ermöglichen, die bessere Gesamtergebnisse liefern als ihre Gegenstücke mit niedrigem Niveau in. bestimmte Einstellungen.[9] Auf hohe Sprachen sind unabhängig von einer spezifischen Computersystemarchitektur konzipiert. Dies erleichtert die Ausführung eines Programms in einer solchen Sprache auf jedem Computersystem mit kompatibler Unterstützung für das Interpretierte oder Jit Programm. Auf hohe Sprachen können Sprachen verbessert werden, wenn ihre Designer Verbesserungen entwickeln. In anderen Fällen entwickeln sich neue Sprachen auf hoher Ebene aus einem oder mehreren anderen mit dem Ziel, die beliebtesten Konstrukte mit neuen oder verbesserten Funktionen zu aggregieren. Ein Beispiel dafür ist Scala was bei der Rückwärtskompatibilität mit behält Java Dies bedeutet, dass Programme und Bibliotheken, die in Java geschrieben wurden, auch dann weiterhin verwendet werden können, wenn ein Programmierwerk zu Scala wechselt. Dies erleichtert den Übergang und die Lebensdauer von solch hochrangiger kodierender unbestimmte Zeit. Im Gegensatz dazu überleben niedrige Programme über die Systemarchitektur, für die sie ohne größere Überarbeitung geschrieben wurden. Dies ist der technische "Kompromiss" für die "Abstraktionsstrafe".
Relative Bedeutung
Beispiele für hochrangige Programmiersprachen, die heute aktiv verwendet werden Python, Visual Basic, Delphi, Perl, Php, ECMaskript, Rubin, C#, Java und viele andere.
Die Begriffe hohes Level und niedriger Ebene sind von Natur aus relativ. Vor einigen Jahrzehnten die C Spracheund ähnliche Sprachen wurden meisten parametrisiert rekursive Funktionen und Datentypen und Strukturen Montagesprache wurde als "niedrigem Niveau" angesehen. Heute könnten sich viele Programmierer C als niedrig bezeichnen, da es eine große fehlt Laufzeit-System (keine Müllsammlung usw.), unterstützt im Grunde nur skalare Operationen und bietet eine direkte Speicheradressierung. Es mischt sich daher leicht mit der Montagesprache und dem Maschinenstand von CPUs und Mikrocontroller. Auch im Einführungskapitel von Die C -Programmiersprache (zweite Ausgabe) Durch K & R wird C als relativ "niedrige" Sprache angesehen.[10]
Die Montagesprache kann selbst als höhere Ebene angesehen werden (aber oft noch eins zu eins, wenn es ohne verwendet wird Makros) Repräsentation von Maschinensprache, wie es Konzepte wie Konstanten und (begrenzte) Ausdrücke unterstützt, manchmal sogar Variablen, Verfahren und Datenstrukturen. Maschinensprachein den Zeitschriften ist von Natur aus auf einem etwas höheren Niveau als die Mikrocode oder Mikrooperationen intern in vielen Prozessoren verwendet.[11]
Ausführungsmodi
Es gibt drei allgemeine Ausführungsmodi für moderne Sprachen auf hoher Ebene:
- Interpretiert
- Wenn Code in einer Sprache geschrieben ist interpretiert, seine Syntax wird gelesen und dann direkt ausgeführt, ohne Kompilierungsphase. Ein Programm namens ein Dolmetscher liest jede Programmanweisung, folgt dem Programmfluss, beschließt dann, was zu tun ist, und tut es. Eine Mischung aus einem Dolmetscher und einem Compiler kompiliert die Anweisung in den Maschinencode und führt dies aus. Der Maschinencode wird dann verworfen, um neu zu interpretieren, wenn die Zeile erneut ausgeführt wird. Dolmetscher sind häufig die einfachsten Implementierungen des Verhaltens einer Sprache im Vergleich zu den beiden hier aufgeführten anderen Varianten.
- Zusammengestellt
- Wenn Code in einer Sprache geschrieben ist zusammengestellt, seine Syntax wird vor dem Ausführen in ein ausführbares Formular umgewandelt. Es gibt zwei Arten von Zusammenstellung:
- Maschinencodegenerierung
- Einige Compiler kompilieren den Quellcode direkt in Maschinensprache. Dies ist der ursprüngliche Zusammenstellungsmodus, und Sprachen, die auf diese Weise direkt und vollständig in den maschinellen nativen Code umgewandelt werden Wirklich kompiliert Sprachen. Sehen Montagesprache.
- Zwischendarstellungen
- Wenn der in einer Sprache geschriebene Code zu einem zusammengestellt wird ZwischendarstellungDiese Darstellung kann für die spätere Ausführung optimiert oder gespeichert werden, ohne die Quelldatei erneut zu lesen. Wenn die Zwischendarstellung gespeichert wird, kann sie in einer Form wie z. Bytecode. Die Zwischendarstellung muss dann interpretiert oder weiter zusammengestellt werden, um sie auszuführen. Virtuelle Maschinen Diese Ausführung von Bytecode direkt oder wandelte es weiter in den Maschinencode um, hat die einst klare Unterscheidung zwischen Zwischendarstellungen und wirklich kompilierten Sprachen verwischt.
- Übersetzt oder transkompiliert Quelle zu Source
- Der in einer Sprache geschriebene Code kann in eine Sprache auf niedrigerer Ebene übersetzt werden, für die native Code-Compiler bereits üblich sind. JavaScript und die Sprache C sind gemeinsame Ziele für solche Übersetzer. Sehen CoffeeScript, Huhn Schema und Eiffel als Beispiele. Insbesondere ist der generierte C- und C ++ - Code zu sehen (wie aus der Eiffelsprache generiert, wenn sie die verwenden Eiffelstudio IDE) im Eifgens -Verzeichnis eines kompilierten Eiffeltrojekts. In Eiffel die übersetzt Prozess wird als Transkompetenz oder Transkompilierung bezeichnet, und der Eiffel -Compiler als Transkompiler oder Source-to-Source-Compiler.
Beachten Sie, dass Sprachen nicht streng sind interpretiert Sprachen oder zusammengestellt Sprachen. Implementierungen des Sprachverhaltens verwenden vielmehr die Interpretation oder Kompilierung. Zum Beispiel, Algol 60 und Forran wurden beide interpretiert (obwohl sie typischerweise zusammengestellt wurden). In ähnlicher Weise zeigt Java die Schwierigkeit, diese Etiketten auf Sprachen anzuwenden, anstatt auf Implementierungen anzuwenden. Java wird zu Bytecode zusammengestellt, das dann durch die beiden Interpretationen ausgeführt wird (in a Java virtuelle Maschine (JVM)) oder Kompilieren (normalerweise mit einem Just-in-Time-Compiler wie z. Hotspotwieder in einem JVM). Darüber hinaus ist das Kompilieren, Transkompetenz und Interpretieren nicht nur auf eine Beschreibung des Compiler -Artefakts (binäre ausführbare Datei oder IL -Baugruppe) beschränkt.
Hochrangige Sprachcomputerarchitektur
Alternativ ist es möglich, dass eine hochrangige Sprache direkt von einem Computer implementiert wird-der Computer führt den HLL-Code direkt aus. Dies ist als a bekannt hochrangige Sprachcomputerarchitektur - das Rechnerarchitektur selbst ist so konzipiert, dass sie durch eine bestimmte Sprache auf hoher Ebene gezielt werden. Das Burroughs große Systeme waren Zielmaschinen für Algol 60, zum Beispiel.[12]
Siehe auch
- Abstraktion (Informatik)
- Generationsliste von Programmiersprachen
- Programmiersprachen mit niedriger Ebene
- Hochrangiger Assembler
- Sehr hochrangige Programmiersprachen
- Kategorische Liste der Programmiersprachen
Anmerkungen
Verweise
- ^ HThreads - Rd Glossar
- ^ London, Keith (1968). "4, Programmierung". Einführung in die Computertechnik. 24 Russell Square London WC1: Faber und Faber Limited. p. 184. ISBN 0571085938.
Die Programmiersprachen mit hoher Ebene werden oft als Autocodes und das Prozessorprogramm, ein Compiler, bezeichnet.
{{}}
: CS1 Wartung: Standort (Link) - ^ London, Keith (1968). "4, Programmierung". Einführung in die Computertechnik. 24 Russell Square London WC1: Faber und Faber Limited. p. 186. ISBN 0571085938.
Zwei hochstufige Programmiersprachen, die hier als Beispiele verwendet werden können, um die Struktur und den Zweck von Autocodes zu veranschaulichen, sind COBOL (gemeinsame geschäftsorientierte Sprache) und Forran (Formularübersetzung).
{{}}
: CS1 Wartung: Standort (Link) - ^ Giloi, Wolfgang, K.(abstrakt) (1997). "Konrad Zus's Plankalkül: Das erste hochrangige" Non von Neumann "Programmiersprache". IEEE Annals of the History of Computing, Vol. 19, nein. 2, S. 17–24, April - Juni, 1997.
- ^ Obwohl es eine Vorstellung von fehlte Referenzparameter, was in einigen Situationen ein Problem sein könnte. Mehrere Nachfolger, einschließlich Algol w, Algol 68, Simula, Pascal, Modula und Ada So enthielt die Referenzparameter (die zugehörige C-Sprachfamilie zulässt stattdessen Adressen als
Wert
-PARAMETERS). - ^ Surana P (2006). "Metakompilierung von Sprachabstraktionen" (PDF). Archiviert (PDF) vom Original am 2015-02-17. Abgerufen 2008-03-17.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ Kuketayev. "Die Datenabstraktionsstrafe (DAP) für kleine Objekte in Java". Archiviert von das Original am 2009-01-11. Abgerufen 2008-03-17.
- ^ Chatzigeorgiou; Stephanides (2002). "Bewertung der Leistung und Leistung von objektorientiertem vs. prozeduraler Programmiersprachen". In Blieberger; Strohmeier (Hrsg.). Proceedings - 7. Internationale Konferenz über zuverlässige Softwaretechnologien - ADA -Europe'2002. Springer. p. 367.
- ^ Manuel Carro; José F. Morales; Henk L. Müller; G. Puebla; M. Hermenegildo (2006). "Hochrangige Sprachen für kleine Geräte: eine Fallstudie" (PDF). Verfahren der Internationalen Konferenz von 2006 über Compiler, Architektur und Synthese für eingebettete Systeme. ACM.
- ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). Die C -Programmiersprache: 2. Auflage. Prentice Hall. ISBN 9780131103627. Archiviert vom Original am 2018-12-13.
- ^ Hyde, Randall. (2010). Die Kunst der Versammlungssprache (2. Aufl.). San Francisco: Keine Stärkepresse. ISBN 9781593273019. OCLC 635507601.
- ^ Chu, Yaohan (1975), "Konzepte der hochrangigen Sprachcomputerarchitektur", Hochrangige SprachcomputerarchitekturElsevier, S. 1–14, doi:10.1016/b978-0-12-174150-1.50007-0, ISBN 9780121741501
Externe Links
- http://c2.com/cgi/wiki?highlevellanguage - Das WikiwikiwebArtikel über hochrangige Programmiersprachen