„Programmcode“ – Versionsunterschied
Erscheinungsbild
[gesichtete Version] | [ungesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
K +QSI |
siehe QS-Diskussion |
||
Zeile 1: | Zeile 1: | ||
{{Begriffsklärung}} |
|||
{{QS-Informatik}} |
|||
⚫ | |||
[[Datei:Programmcode.png|miniatur|'Programmcode', Begriffszusammenhänge und im Sprachgebrauch auftretende Synonyme]] |
|||
In folgenden Arten von Programmcode wird unterschieden: |
|||
⚫ | |||
* ''[[Quelltext]]'' ist die für Menschen lesbare Form eines Computerprogramms. |
|||
Man unterscheidet verschiedene Arten von Programmcode: |
|||
* ''[[Zwischencode]]'' wird beim [[Compiler|Kompiliervorgang]] erzeugt und anschließend [[Interpreter|interpretiert]] oder in andere [[Formale Sprache|formale Sprachen]], z.B. Maschinencode, übersetzt. |
|||
* ''[[Quelltext]]'' – ein für Menschen lesbarer, in einer Programmiersprache geschriebener Text eines Computerprogrammes. |
|||
* |
** [[Bytecode]] ist ein ''Zwischencode'', der zur [[Laufzeitumgebung|Laufzeit]] in ''Maschinencode'' übersetzt wird. |
||
* ''[[Maschinencode]]'' |
* ''[[Maschinencode]]'' kann von der Maschine direkt ausgeführt werden, ist für Menschen jedoch nicht oder nur schwer lesbar. |
||
Abhängig von der verwendeten [[Entwicklungsumgebung]] weisen die Varianten von Programmcode erhebliche Unterschiede auf, die in erster Linie die verwendete ''Sprache'' betreffen. Weitere Unterschiede können zum Beispiel sein, ob sie aus [[Imperative Programmierung|imperativen]] ''Befehlstexten'' oder [[Deklarative Programmierung|deklarativen]] Anweisungen bestehen, ob sie von den Werkzeugen ''automatisch erzeugt und verwaltet'' oder im Entwicklungsprozess gezielt hergestellt werden, ob sie typbezogen als ''getrennte Datenobjekte'' (als Dateien oder in [[Programmbibliothek]]en) oder in einem gemeinsamen [[Datenbestand]] geführt werden, ob sie ''überhaupt auftreten'' (z. B. bei Zwischencode) oder wie sie ''bezeichnet'' werden (etwa „Pseudocode“ oder „Bytecode“). Zusammenfassend lässt sich feststellen: Die Entwicklung auf dem Gebiet der [[Programmiersprache]]n und [[Programmierparadigma|Programmierparadigmen]] führte zu vielen unterschiedlichen Formen von Programmcode – die in der Praxis auch entsprechend anzutreffen sind. |
|||
''Unterschiedliche Bedeutungen und Synonyme:'' <br /> |
|||
Der Ausdruck 'Programmcode' und seine Unterarten werden auch für „[[Code]]“ im Sinn von [[Syntax]] bzw. Sprache benutzt, in der die Anweisungen formuliert sind. Beispiel: ‚Maschinencode‘ als Synonym für [[Maschinensprache#Maschinenprogramm|Maschinenprogramm]] oder i. S. von [[Maschinensprache]]<ref>Online Enzyklopädie [http://www.enzyklo.de/Begriff/Maschinencode] 'Maschinencode'</ref>. <br /> |
|||
Im Sprachgebrauch werden sie auch mit unterschiedlichen Synonymen bezeichnet, im Besonderen wird die allgemeine Bezeichnung ‚Programmcode‘ häufig für ‚Quelltext‘ verwendet. Weitere Synonyme siehe nebenstehende Grafik.<!--evtl. wäre es nützlich/besser, die jeweiligen Synonyme HIER oder OBEN aufzuzählen--> |
|||
''Abgrenzung:'' <br /> |
|||
Bei [[Anwendungssoftware|Anwendungen]], die mithilfe von Formular- oder [[Reportgenerator]]en oder z. B. mit Datenbank-Auswertungssprachen erzeugt (und oft auch ausgeführt) werden, sind die dazu erstellten Anweisungen zwar in syntaktischer Hinsicht ebenfalls "[[Code]]", und sie beschreiben auch den Inhalt eines „Programms“. Werden diese ‚Angaben‘ nicht als Befehlstexte, sondern z. B. über eine [[Grafische Programmiersprache]] als [[Parameter (Informatik)|Parameter]] oder objekt-/ereignisbezogene [[Attribut (Objekt)|Attribute]] erstellt, so lassen sich keine Belege dafür finden, dass diese Angaben als „Programmcode“ bezeichnet werden. Zum Teil gelten derartige Spezifikationen sogar als Gegenstück zu Programmcode.<ref>Jürgen Bayer ''Visual C# 2008''[http://books.google.de/books?id=LFMhNmBx8RgC&pg=PA899&lpg=PA899&dq=programmcode+deklarativ&source=bl&ots=S7rbfuI4kK&sig=f6jIrMG9kK0gXoCQAVqFkJ3Azzg&hl=de&sa=X&ei=TOwMUuaUHczwhQeX74D4BQ&ved=0CEIQ6AEwBDge#v=onepage&q=programmcode%20deklarativ&f=false] ''Kapitel 14.3 Triffer''</ref> |
|||
== Werkzeuge zur Programmcode-Verarbeitung (Überblick) == |
|||
Die Varianten von Programmcode sind Zwischen- oder Endergebnisse bei der [[Softwaretechnik|Entwicklung]] von [[Software]], deren Zweck es letztlich ist, von ihren [[Anwender]]n genutzt, d. h. von einem Computer [[Prozessor#Funktionsweise|'ausgeführt']] zu werden. Die nachfolgenden Abschnitten geben einen Überblick über Werkzeuge, die zum Erzeugen und Bearbeiten von Programmcode eingesetzt werden können. Mit Links wird auf die jeweiligen Hauptartikel verwiesen. |
|||
=== Erzeugung und Verarbeitung von Quelltext === |
|||
*'''Texteditor:''' Nur aus Text bestehender Quellcode wird meist mit einem Standard-Texteditor, zum Teil auch mit programmiersprachen-spezifischen Editoren erstellt und bearbeitet. Siehe Hauptartikel [[Texteditor]]. |
|||
*'''Codegeneratoren ''' erzeugen aus in der Regel grafisch erstellten Modellen (wie z. B. [[UML]]-Modellen oder [[Struktogramm]]en) Quelltext für eine gewählte Programmiersprache. Siehe Hauptartikel [[Codegenerator]]. |
|||
=== Programmcode-Konvertierung === |
|||
[[Datei:Quellcode zur Ausführung.png|miniatur|Der Prozessor kann nur Maschinenbefehle ausführen]] |
|||
Da Programme heutzutage nicht mehr in Maschinencode programmiert werden, jede Art von Software aber letztlich nur vom [[Prozessor]] und nur durch Verarbeitung von [[Maschinensprache#Maschinenprogramm|Maschinenbefehlen]] ausgeführt wird (denn Anweisungen wie z.B. „A = B + 100 * C“ 'versteht' der Prozessor nicht), müssen die Anweisungen des Quellcodes auf irgendeine Art und Weise in Maschinenanweisungen umgesetzt werden. Umgekehrt resultiert jede Ausführung eines Programms/Befehls aus ursprünglich programmierten (Primär- oder Quell-) Anweisungen. |
|||
Je nach [[Programmierparadigma]], [[Programmiersprache]] und verwendeter [[Entwicklungsumgebung]] wird die Codetransformation auf unterschiedliche Art und Weise, mit unterschiedlichen Zwischenformaten und ggf. in mehreren Stufen praktiziert. <!-- keine Details! Diese finden sich in den jeweils per Link angesprochenen Hauptartikeln! -->Sie ist die wichtigste der auf den Programmcode wirkenden Bearbeitungsfunktionen. Dabei werden folgende Werkzeuge eingesetzt: |
|||
*'''Compiler:''' Ein Compiler ist ein Programm, das Programme einer Quellsprache Q in semantisch äquivalente Programme einer Zielsprache Z übersetzt.<ref name="TUWien">TU Wien [http://www.complang.tuwien.ac.at/lehre/ubvo/Kap01.pdf] (PDF; 74 kB)</ref> Siehe Hauptartikel [[Compiler]]. |
|||
:Compiler erzeugen entweder [[Maschinencode]] (auch [[Objektcode|Objektprogramm]] genannt<ref Name="UniGi">Uni Giessen [http://www.uni-giessen.de/~gc1079/compiler/compiler.pdf] (PDF; 276 kB)</ref>) oder aus Gründen der Hardwareunabhängigkeit sog. [[Zwischencode]] (z. B. [[Bytecode]] oder auch [[Assemblersprache|Assemblercode]]), der durch weitere Transformationsschritte zu ausführbarem Code wird. |
|||
:Beim Übersetzen durch einen Compiler werden grundsätzlich zwei Varianten unterschieden: Die [[AOT-Compiler|„Ahead-of-time-Kompilierung“]] (der Programmcode wird nur einmalig in einen ausführbaren Code übersetzt und mehrfach zur Ausführung verwendet) und die [[JIT-Compiler|„Just-in-Time-Kompilierung“]] (der Programmtext wird direkt vor jedem Programmlauf übersetzt). |
|||
:Um den Compiler herum <!--bessere, genauere Formulierung?-->gibt es weitere Werkzeuge, die integriert oder separat spezielle Aufgaben wahrnehmen: Minimierer, Präprozessor, Precompiler, Optimierer, Parallelisierer, [[Obfuscator]]. |
|||
*'''Assembler''' zählen zur Familie der Compiler und übersetzen ein in maschinennaher Assemblersprache vorliegendes Computerprogramm in die Maschinensprache. Siehe Hauptartikel [[Assembler (Informatik)]]. |
|||
*'''Precompiler''' kommen zum Einsatz, wenn spezielle, in der Programmiersprache selbst nicht vorgesehene Syntax-Konstrukte (zum Beispiel [[SQL]]-Code) verarbeitet werden sollen. Sie erzeugen daraus Anweisungen in der gewählten Programmiersprache, die in der anschließenden Übersetzung verarbeitet werden können. Siehe Hauptartikel [[Precompiler]]. |
|||
* '''Interpreter''' sind Computerprogramme, die einen Programmcode nicht in eine ausführbare Datei übersetzen, sondern ihn – oder einen [[Zwischencode]], man nennt dies dann ein Compiler-Interpreter System<ref name="TUWien"/> oder [[Compiler#Sonderformen|„Compreter“]] – zur Laufzeit des Programms einlesen, analysieren und einzeln in Anweisungen konvertieren, die der Prozessor jeweils sofort ausführt. Siehe Hauptartikel [[Interpreter]]. |
|||
=== Hilfswerkzeuge i. Z. mit dem Kompilieren === |
|||
* In manchen Systemumgebungen wird der von einem Compiler erzeugte Maschinencode noch von einem '''Linker''' („Binder“, „Bindelader“) nachbearbeitet. Das ist ein [[Computerprogramm]], das einzelne [[Modul (Software)|Programmmodule]] zu einer ausführbaren Datei zusammenstellt (verbindet), wodurch zum Beispiel [[Unterprogramm]]en im Hauptprogramm nutzbar sind. Siehe Hauptartikel [[Linker (Computerprogramm)]]. |
|||
* Ein '''Lader''' lädt den Maschinencode eines Programms aus einer ausführbaren Datei in den [[Arbeitsspeicher]] und startet dessen Ausführung. Siehe Hauptartikel [[Lader (Programmierung)]]. |
|||
=== Komponenten des Laufzeitsystems === |
|||
Gewisse Arten/Teile von Programmcode werden nicht per Compiler oder Interpreter in äquivalente Maschinenbefehle umgesetzt, sondern von spezialisierten, als [[Unterprogramm]]e verwendete Komponenten zur Laufzeit des Programms ‚verarbeitet‘. Ein Beispiel sind [[SQL]]-Statements – die als deklarative Anweisungen (das ''Was,'' nicht das ''Wie'' beschreibend) erstellt werden und zur Laufzeit des Programms von SQL-Subfunktionen des [[DBMS]] geprüft und verarbeitet werden, um die spezifizierte Datenaktion auszuführen. |
|||
=== Sonstige den Programmcode verarbeitende Programme === |
|||
*'''[[Debugger]]''' sind Computerprogramme, die Programmierer zum Prüfen oder zum Finden und Analysieren von Fehlern verwenden können. |
|||
*'''[[Decompiler]]''' können die Anweisungen aus der [[Maschinensprache]] wieder lesbaren [[Quellcode]] in einer [[Höhere Programmiersprache|Hochsprache]] erzeugen. |
|||
* Ähnlich verfahren '''[[Disassembler]]''', die Anweisungen aus der Maschinensprache in die [[Assemblersprache]] rückübersetzen. |
|||
* [[Systemsoftware]] zur '''Verwaltung von Programmcode''' in [[Programmbibliothek]]en |
|||
== Beispiele für Szenarien zur Code-Übersetzung/-Umwandlung == |
|||
Zur Transformation (Umwandlung, Übersetzung, Konvertierung) der von Programmierern erstellten [[Anweisung (Programmierung)|Anweisungen]] in die zur physischen Ausführung im [[Prozessor]] erforderlichen Maschinenbefehle werden in den verschiedenen [[Entwicklungsumgebung]]en und Programmiersprachen unterschiedliche Verfahren angewendet. Die nachfolgenden Abschnitte zeigen dafür Beispiele. |
|||
===Szenario IBM-Großrechner mit 3GL=== |
|||
[[Datei:Compilerszenario Großrechner.png|miniatur||Ablaufbeispiel IBM-Großrechner / 3GL-Sprache]] |
|||
<!--Beispiel Cobol 1980er Jahre)-->Der Compiler übersetzt den evtl. durch einen Precompiler vorverarbeiteten [[Quellcode]] eines Programms und erzeugt dabei in prozessorspezifischem [[Objektcode]] ein ‚Objektmodul‘. Dieses wird mit dem [[Linker (Computerprogramm)|'Linkage Editor']] verarbeitet, wobei die Objektmodule evtl. aufgerufener [[Unterprogramm]]e und sprachspezifische Systemmodule, optionsabhängig [[Linker (Computerprogramm)#Statisches Linken|statisch oder dynamisch]] „hinzugebunden“ werden. Ergebnis ist ein [[Lademodul]], das zur Ausführung durch ein EXEC-Kommando in den [[Job Control Language|Job-Steueranweisungen]] oder (bei dynamisch gebundenen Unterprogrammen) erst bei deren erstem Aufruf vom [[Lader (Programmierung)|Lader]] des Betriebssystems in den Hauptspeicher geladen und gestartet wird. |
|||
Analog zu diesem Schema werden auch [[Assemblersprache|Assemblerprogramme]] übersetzt: Statt dem 3GL-Compiler kommt ein [[Assembler (Informatik)|Assembler]] zum Erzeugen des Objektcodes zum Einsatz. |
|||
<!--===Szenario Interpreter aus Quellcode=== |
|||
...offen, noch texten - bis dahin ausblenden. |
|||
===Szenario Interpreter mit Zwischencode=== |
|||
...offen, noch texten - bis dahin ausblenden. |
|||
--> |
|||
===Szenario MS Access (IDE) === |
|||
[[Datei:Compilerszenario_Access.png|miniatur||Kompilierung nur bei VBA-Code, sonst Interpretertechnik]] |
|||
Bei Anwendungen, die zum Beispiel mit [[Microsoft Access|MS Access]] (einer [[Integrierte Entwicklungsumgebung|'IDE']]) erstellt wurden, werden die programmierten Anweisungen wie folgt zur Ausführung gebracht: Vom [[Softwareentwickler]] wird vorwiegend [[Deklarative Programmierung|deklarativ]] nur spezifiziert, ''was'' entstehen soll (z. B. Formulare, Reports, [[SQL]]-Datenzugriffe, Makros etc.), also keine Befehle im imperativen Sinn. Daraus erzeugen die (Grafik-) Editoren beim Programmieren „Objektproperties“ oder ein SQL-Codegenerator SQL-Kommandos. Zum Ablauf der so entwickelten Anwendung wird die Datenbanksoftware als [[Laufzeitumgebung]] nach objekt-/ereignisorientierten Prizinpien ausgeführt, wobei diese die programmierten [[Spezifikation]]en beim Eintritt bestimmter Ereignisse bestimmungsgemäß verarbeitet – und diese damit konkret ‚ausführt‘. Nach ähnlichem Prinzip arbeiten auch [[Reportgenerator]]en wenn sie Berichte erzeugen.<br /> |
|||
''Ausnahme VBA:'' Falls in der Anwendung [[Visual Basic for Applications|VBA-Anweisungen]] [[Implementierung|implementiert]] wurden, werden diese bei der ersten Ausführung der Anwendung automatisch und einmalig kompiliert, wobei ein optimierter [[Zwischencode]] entsteht, hier „P-Code“ genannt. Dieser wird in der MDB gespeichert und über einen Interpreter 'Befehl für Befehl' ausgeführt.<ref>Microsoft Support [http://support.microsoft.com/kb/209176/de]</ref><br /> |
|||
Alle Daten der Anwendung werden in einer [[Datei]] mit der Dateiendung [[Microsoft Access Database|MDB]] gespeichert. Diese ist somit gleichzeitig eine [[Ausführbare Datei]] und sie enthält alle Anweisungen aus allen Stufen der ‚Programmierung‘, also Daten-, Formular- und Berichtsdefinitionen, Datenzugriffe, VBA-Befehle, Makros und auch den ggf. erzeugten P-Code. Optional können in der MDB auch die [[Daten|Anwendungsdaten]] selbst gespeichert werden. |
|||
''Fazit:'' Alle definierten Anweisungen und Festlegungen werden ausnahmslos durch Teilkomponenten von MS Access verarbeitet. Sie kommen durch entsprechend modifizierte Maschinenbefehle der Access-Ablaufumgebung zur Ausführung; aus VBA-Zwischencode erzeugt ein Interpreter die entsprechenden Befehle. |
|||
<!--====Szenario Internet-Browser==== |
|||
''Anmerkung:'' Ausgeführt wird optional zB Java-Code. Sonst noch was?<br /> |
|||
... offen --> |
|||
== Einzelnachweise == |
|||
<references /> |
|||
[[Kategorie:Programmiersprache]] |
|||
[[Kategorie:Programmierwerkzeug| ]] |
Version vom 8. Februar 2015, 21:15 Uhr
Als Programmcode bezeichnet man die Menge der Anweisungen eines Computerprogramms. In folgenden Arten von Programmcode wird unterschieden:
- Quelltext ist die für Menschen lesbare Form eines Computerprogramms.
- Zwischencode wird beim Kompiliervorgang erzeugt und anschließend interpretiert oder in andere formale Sprachen, z.B. Maschinencode, übersetzt.
- Maschinencode kann von der Maschine direkt ausgeführt werden, ist für Menschen jedoch nicht oder nur schwer lesbar.