Suche diesen Artikel in der aktuellen Wikipedia

[Home]Programmiersprache

HomePage | RecentChanges | Preferences

Eine Programmiersprache ist eine künstliche Schriftsprache zur Kommunikation zwischen Mensch und Computersystem. Diese vermittelt dem Computersystem durch von einem Menschen geschriebenen Text genaue Angaben zu einer Kette von internen Verarbeitungsschritten, deren Daten, Struktur und deren Verlauf in Abhängigkeit von internen oder externen Ereignissen.

Da der digitale Computer intern nur Werte von 0 und 1 verarbeitet, ist es sehr unhandlich und mühsam, die vielen Formen von Informationsverarbeitung in reinen Werten von Null und Eins anzugeben (zu kodieren). Daher hat sich schnell ein Übersetzungsmechanismus etabliert, der häufig verwendete Zahlen und Zeichen und häufig verwendete grundlegende Operationen in abkürzender symbolischer Schriftsprache angibt. Eine weitere technische Einrichtung übersetzt dann diese Angaben in interne Daten, einfachste Datenänderungsbefehle und Kontrollanweisungen, die der Computer dann schließlich ausführt.

Wird ein Programmtext als Ganzes in Maschinencode übersetzt, spricht man in bezug auf den Übersetzungsmechanismus von einem Compiler?. Der Compiler ist selbst ein Programm, welches als Dateninput den menschenlesbaren Programmtext bekommt und als Ergebnisoutput den maschinelesbaren Code (Objektcode, EXE-Datei) liefert.

Wird ein Programmtext hingegen jeweils Schritt für Schritt übersetzt und jeweils ein übersetzter Schritt sofort ausgeführt, spricht man von einem Interpreter. Interpretierte Programme laufen meist langsamer als compilierte Programme.

Eine Ansammlung der in einer Programmiersprache aufgeschriebenen Anweisungen nennt man allgemein Programm?, Code? oder Quelltext?. (Quelltext betont besonders die Menschenlesbarkeit). Dieser wird meist von professionellen Programmierern verfasst und seine Herstellung ist ein technischer Schaffensprozess.

Elemente einer Programmiersprache

Jede Programmiersprache hält Vereinbarungen bzgl. Syntax, Vokabular und Bedeutung bereit für:

Daten und Datenstrukturen. Um die üblichen Arten von Informationen im Computer abbilden zu können, müssen Möglichkeiten zur Definition von Daten oder Datenstrukturen bereitstehen. Dies sind entweder vordefinierte Einheiten für einzelne Zahlen (Byte?, Integer?, Word?, etc.) und Zeichen (Char?) oder auch zusammengesetzte für Daten, Wörter, Text, sensorische Information und so weiter. Zumeist besteht auch die Möglichkeit zusammengesetzte Objekte oder Strukturen aufzubauen und als neuen Typ zu vereinbaren (etwa Arrays, Listen, Stacks, ganze Dateien).

Befehle und Befehlsstrukturen. Konzeptionell ist ein programmierbarer Rechner weit mehr als eine Sammlung von Daten und auch keine starre Rechenmaschine. Vielmehr wird angegeben wie der Computer mit variablen internen oder externen Daten zu verfahren hat. Elementare Anweisungen geben über Schlüsselwörter (reserved words) an, WANN WAS WIE geändert werden soll. Jede Sprache enthält eine WENN-DANN-artige Anweisung, die letztlich die Universalität bereitstellt, um allgemein auf vielfältigste Fälle reagierende Programme schreiben zu können. Weitere typische Befehle sind Kontrollstrukturen (Sprünge, Fallunterscheidungen, Schleifen). Gruppen von Anweisungen werden zusammengefasst und auch zusammen behandelbar gemacht.

Bezugnahmemechanismen und Wiederverwendung. Der Kern der Bezugnahme ist die Benennung von Speicherplatz als sog. Variable. Weitere Bezugnahmen sind Zeiger auf solche Variablen oder Variablengruppen. Auch Befehlsgruppen werden im Programm per Namensaufruf als Prozedur oder Funktionsaufruf verfügbar gemacht. Auf diese Weise wird durch Symbole einerseits eine große Variabilität erreicht und durch Referenz auf vorhandene Programm- oder Datenteile andererseits ein hohes Maß an Wiederverwendbarkeit erreicht. Viele anwendungsbezogene Sprachen integrieren typische Aufgaben als aufrufbare Befehle.

Designphilosophie. Für die obengenannten Zwecke hat jede Sprache meist eine besondere Philosophie entwickelt. Es wird der eine oder andere Aspekt besonders betont. Mehr Datenstrukturen oder Freiheit in der Notation oder Raffinesse, was Zeigerstrukturen angeht.

Die meisten Sprachen sind Sprachen, die gute Funktionalität bieten aber auch ein hohes Maß an Disziplin bezüglich Fehlerfreiheit fordern. Programmiersprachen sind nicht fehlertolerant; was durch Hilfen aber abgemildert ist. Einige wenige Sprachen bieten große gestalterische Freiheiten bis hin zum sich selbstverändernden Programm: dazu gehört Maschinensprache und auch LISP.

Die Entwicklung von Programmiersprachen selbst ist eine Aufgabe der Informatik. Die syntaktische Definition einer Sprache wird meist in [Backus-Naur Form]? angegeben, einer formalen Notation.

Geschichte

Anfänge. Erste Arbeiten stammen bereits von [Lady Ada, Countess of Lovelace]? (1815-1852)(Assistentin von [Charles Babbage]?), die als erste das Prinzip der variablen Programmierbarkeit erkannte. Dies entwickelte sich erst spürbar weiter mit Entwicklung der ersten elektronischen Rechenmaschinen und der Verwendung der [booleschen Algebra]?. Meilensteine sind ab ca. 1940 die Entwicklung von Konrad Zuses Plankalkül, die Konzeption der [Von-Neumann Maschine]? und die ersten Sprachen in Amerika: FORTRAN?(1954, John Backus), COBOL? (1959, Grace Hopper?), LISP (1959, McCarthy?) und weitere (s.Tabelle). Inzwischen ist eine riesige Zahl von Sprachen entstanden und es gibt einen evolutionären Prozess mit gegenseitiger Adaptierung. Eine wichtige Rolle spielen dabei auch die Standardisierungs-Organisationen (ISO?). Die vorgenannten Sprachen existieren bis heute.

Zeittafel

1840~ --'Erstes Programm' (Ada Lovelace)
1947 -- Plankalkül (Konrad Zuse)
1954 -- FORTRAN? (John Backus)
1959 -- LISP (McCarthy?)
1959 -- COBOL? (Grace Hopper)
1960 -- BASIC? (Kemmeny, Kurtz)
1967 -- MUMPS? (Barnett)
1971 -- PASCAL? (Niklas Wirth, Kathleen Jensen)
1972 -- C? (Dennis Ritchie, Ken Thompson)
1975 -- PROLOG? (Colmerauer et. al.)
1980 -- ADA? (Wirth?)
1995 -- Delphi (=Visuelle IDE Pascal basiert) (Inprise Inc.)

siehe /Zeittafel II, Entwicklung der Programmiersprachen (ausführlich)

Die Entwicklung hat dahin geführt, dass die Universalisten am weitesten verbreitet sind, d.h. diejenigen Sprachen (wie C?,[[C++]]), die weitestgehend alle wichtigen Aspekte integriert haben. Hierzu gehören auch neuere Konzeptionen der objektorientierten Programmierung, die Daten-, Prozedur- und Referenzaspekte in dem einzigen Konzept des Objekts vereinigt.

Aktuelle Entwicklungen. Neuere integrierte, visuelle Entwicklungsumgebungen haben deutliche Fortschritte gebracht, was Aufwand an Zeit, Kosten (und Nerven) angeht. Bedienoberflächen lassen sich meist interaktiv gestalten und Codefragmente sind per Klick direkt erreichbar. Weitere Arbeitserleichterungen sind vorgefertigte Komponenten und Softwarebibliotheken mit wiederverwendbarem Code. Dazu kann objekt-orientierte Methodik auch die Komplexität von Programmen erheblich reduzieren. Diese Techniken markieren gleichzeitig den Übergang von einer eher 'handwerklichen' Kunst zu einem mehr industriell organisierten Prozess.

Besondere Ausprägungen

Maschinensprache: Der direkt auf einem Prozessor ausführbare Code. Sein Umfang ist architekturabhängig.

Assemblersprachen: Assemblersprachen gehören immer direkt zu ihrer entsprechenden Maschinensprache. Die Maschinenbefehle werden jedoch in einer lesbaren Form geschrieben. Weiter wird mittels Symbolen adressiert, die absoluten Adressen werden vom Assembler errechnet. Auch können symbolische Konstanten benutzt werden.

Datenstrukturen: LISP verwendet als konzeptionelle Hauptstruktur Listen. Auch das Programm ist eine Liste von Befehlen, die andere Listen verändern. FORTH? verwendet als konzeptionelle Hauptstruktur Stacks und Stackoperationen.

Logische Sprachen: PROLOG? orientiert sich in bezug auf Daten- und Evaluationsmechanismus an mathematischer Logik.

Prozedurale Sprachen: BASIC?, C?, COBOL?, FORTRAN?, PASCAL?, PL/1? sind Vertreter der prozeduralen Familie, in der Anweisungen hintereinander abgearbeitet werden.

Objektorientierte Sprachen: Smalltalk?, Eiffel?, Modula-3, [[C++]], Java? und Oberon? (?) sind objektorientierte Sprachen. Die Datenstrukturen befinden sich bei ihnen in Objektklassen, zu denen auch der jeweilige (auf die Datenstruktur zugreifende) Code (Methoden) gehört. Dadurch wird eine hohe Lokalität erreicht. Objektklassen lassen sich mittels Vererbung erweitern.

Funktionale Sprachen: APL? ?. LISP, ML?, Scheme?, Sather?, Haskell?

regelbasierte Sprachen: Bei regelbasierten Sprachen wie OPS-5? werden Regeln gegen eine Datenmenge auf ihre Instanziierbarkeit geprüft. Aus allen Regelinstanziierungen wird eine (mehrere, alle) ausgewählt und die zur Regel gehörenden Anweisungen werden ausgeführt.

Anwendungsbezogene Sprachen und Systeme: Datenbanksysteme: dBase?, SQL?


Liste der Programmiersprachen

Ada?
Algol?
APL?
Assembler? (Maschinensprache)
awk? (awk, gawk, mawk, nawk)
BASIC? (True BASIC, VB (Visual Basic), VBA (VB for Applications), VBScript, ...)
BCPL?
C? (C, Visual C)
[[C++]] (C++, Visual C++)
COBOL?
Delphi
Eiffel?
FORTH?
FORTRAN?
Haskell?
Java?
JavaScript?
lex? (flex)
LISP
Logo?
Miranda?
ML?
Modula? (Modula, Modula-2, Modula-3)
MUMPS?
Mycin? (E-Mycin)
Oberon?
Pascal?
perl?
PHP?
PL/I?
Prolog?
Python?
RPG?
Ruby?
Sather?
Scheme?
Simula?
Smalltalk?
SQL?
Tcl?
yacc? (Bison)
Visual xx (Visuelle Versionen einzelner Sprachen)

vielleicht könnte man hier jeweils eine Standardaufgabe in jeder Sprache lösen.
Finde das Maximum dreier gegebener/einzugebender Zahlen
Stelle "Hello World" dar


Alternativen

Programmiersprachen sind nicht die einzige Möglichkeit komplexe Abläufe für den Computer aufzubereiten. Andere Konzeptionen sind etwa Datenbanken? und Tabellenkalkulation?, oder im hardwarenahen Bereich [Speicherprogrammierbare Steuerung]?en.


Programmieren

Programmieren? ist eine anspruchsvolle Tätigkeit und erfordert Disziplin, Ausdauer, abstraktes Denkvermögen, Kreativität und hohe Lernbereitschaft. Unterschiedlichste Aufgaben müssen in die Symbole der Programmiersprache transferiert werden. Das Programmieren als dieses reine Codieren ist nur ein Teil der Tätigkeit eines guten Programmierers, der zum gesamten Softwareentwicklungsprozess? beitragen können sollte: Analyse?, Entwurf?, Prototyping?, Realisation?, Testung?, Einführung?, Dokumentation?, Konsolidierung?. Nicht unerheblichen Aufwand nimmt auch das sog. Debuggen? ein, dt. Fehlersuche.

Berufe: Softwareentwickler, Anwendungsentwickler, Systemprogrammierer, Organisationsprogrammmierer,..


Ausblick

Ausblick: [Künstliche Intelligenz]?


siehe auch Datenbanksysteme?, Software?, Softwareengineering, Algorithmus? siehe auch Informatik

Websites: [Virtual Museum of Computing] (Linksammlung)


HomePage | RecentChanges | Preferences
This page is read-only | View other revisions
Last edited August 17, 2001 2:13 am by 216.60.221.xxx (diff)
Search: