1.2 Die Geschichte der Rechenmaschinen und Computer
In diesem Buch ist von Computern die Rede, und natürlich wissen Sie ganz genau, was das ist. Wenn Sie allerdings den Versuch machen sollten, einen Computer mit allen Dimensionen seiner heutigen Möglichkeiten griffig zu definieren – wie würde diese Definition lauten? Vergangene Generationen sprachen etwa von programmgesteuerten Rechenautomaten, und gerade Fachleute scheinen noch heute lieber »Rechner« als »Computer« zu dieser Maschine zu sagen.
Aber ist Rechnen heutzutage die wichtigste Aufgabe der Computer? Es scheinen schließlich mehr Leute einen Webbrowser zu verwenden als die Tabellenkalkulation Excel, und das Bildbearbeitungsprogramm Photoshop ist erheblich populärer als spezielle Mathematiksoftware wie Mathematica oder Maple.
Trotzdem ist ein Computer ein Gerät, das Probleme durch Berechnungen löst: Er kann nur diejenigen Sachverhalte »verstehen«, die man in Form von Zahlen und mathematischen Formeln darstellen kann. Dass es sich dabei heute auch um Bilder, Töne, Animationen, 3D-Welten oder Filme handeln kann, liegt einfach an der enormen Rechengeschwindigkeit und Kapazität moderner Rechner.
Sehen Sie sich den Begriff programmgesteuerter Rechenautomat noch einmal genau an: Ein Rechenautomat ist ein Gerät, das automatisch etwas berechnet, sodass man dies nicht manuell erledigen muss. Das kann auch ein Taschenrechner oder sogar eine mechanische Rechenmaschine. Das Besondere, was ein Computer zu bieten hat, beschreibt der Begriff programmgesteuert. Ein Computerprogramm ist eine Abfolge von Rechenvorschriften, die aufeinander aufbauen können und Schritt für Schritt ausgeführt werden.
Mit anderen Worten ist ein Computer nicht nur ein Rechenautomat, sondern ein Algorithmen-Automat. Ein Algorithmus, benannt nach dem arabischen Mathematiker Mohamed Ibn Musa Al Chwarismi, ist eine Schritt-für-Schritt-Anleitung zum Lösen mathematischer Probleme. Jeder Computer versteht eine oder mehrere formale Sprachen, in denen man ihm solche Algorithmen einprogrammieren kann. Ist ein Algorithmus erst einmal im Computer gespeichert, kann er immer wieder mit anderen Daten ausgeführt werden. Betrachten Sie etwa den folgenden Algorithmus aus dem Alltagsleben, der die Internet-Nutzungskosten verschiedener Kunden eines Providers berechnet:
- Eingabe Tarif: Flatrate oder minutenbasiert?
- War es die Flatrate? Macht 19,99 €. Berechnung beendet.
- Minutenbasiert: Eingabe der Minuten
- Multipliziere die Minuten mit 0,01 €.
- Addiere die Grundgebühr von 2,49 € hinzu. Berechnung beendet.
Dieser einfache Algorithmus kann natürlich ohne Weiteres von einem Menschen abgearbeitet werden. Er wird zwar langsamer rechnen als ein heutiger Computer, aber durchaus innerhalb einer annehmbaren Zeit damit fertig werden. Andererseits kann der Computer Millionen solcher Berechnungen in der Sekunde ausführen. Zwar wird er gewisse Leistungen des menschlichen Geistes wahrscheinlich niemals erreichen, aber schneller rechnen kann er allemal.
Darüber hinaus gibt es Algorithmen, an denen wir Menschen schlichtweg verzweifeln würden – oder hätten Sie Lust, jedes einzelne Pixel eines 10 × 10 cm großen hochauflösenden Bildes anhand der Farben seiner acht umgebenden Pixel neu zu berechnen, um das Bild zu vergrößern oder zu verkleinern? Ohne Sie entmutigen zu wollen: Ein solches Bild besteht, wenn es für den Druck geeignet sein soll, aus etwa 1.392.400 Pixeln – viel Spaß beim Rechnen![Anm.: Zugrunde gelegt wurde hier die gängige Druckauflösung von 300 Pixeln/Inch, was etwa 118 Pixeln/cm entspricht (1 Inch = 2,54 cm).]
So macht der Computer sich selbst immer unentbehrlicher: Sobald Computersysteme eine gewisse Komplexität erreichen, wird eine Anwendung erfunden, die ohne sie nicht zu bearbeiten wäre. Um diese Anwendung dann schneller und effizienter ausführen zu können, entsteht die nächste Computergeneration, für die dann wieder neue Anwendungsgebiete gefunden werden. Auf diese Weise ist der Fortschritt in der Computerentwicklung nicht aufzuhalten, und was auch immer als unüberwindbare Grenze galt, wurde von cleveren Ingenieuren irgendwann überschritten. Der vorliegende Abschnitt versucht, diesen Weg ein wenig konkreter zu beschreiben.
1.2.1 Die Vorgeschichte
Seit Menschen überhaupt sesshaft in größeren Gemeinschaften zusammenleben, sind sie zum Rechnen gezwungen, um diese Gemeinschaften zu organisieren. Zu diesem Zweck wurden im Laufe der Zeit immer komplexere und ausgeklügeltere Geräte erfunden.
Das erste Rechenhilfsmittel in der Geschichte war die Rechentafel oder der Abakus. Ähnliche Geräte wurden unabhängig voneinander zum Beispiel in China und im alten Rom entwickelt. Es handelte sich um eine Tafel mit verschiebbaren Steinen, die in mehreren Spalten angeordnet waren. Das Ganze ähnelte den heutigen kugelbestückten Rechenhilfen, wie sie etwa in Grundschulen eingesetzt werden. Interessant ist, dass die Römer gar nicht erst versuchten, ihr recht umständliches Zahlensystem auf den Abakus zu übertragen, sondern ein modernes Stellenwertsystem darauf verwendeten.
Überhaupt kann die Erfindung der Stellenwertsysteme zum Schreiben von Zahlen als eine der wichtigsten Errungenschaften auf dem Weg zum Computer betrachtet werden: Die brillante Idee, den Wert einer Ziffer von ihrer Position innerhalb der ganzen Zahl abhängig zu machen, hatten die Inder; die heutigen »arabischen« Zahlen wurden in Indien erfunden und später von den Arabern – erstmals durch den bereits genannten Al Chwarismi im 9. Jahrhundert – übernommen. Die wichtigste Erfindung überhaupt ist in diesem Zusammenhang die Null. Die indischen Mathematiker notierten sie zunächst als Punkt und dann bis heute als Kreis. Ohne die Null ist es nicht möglich, den Wert einer einzelnen Ziffer zu vervielfachen: Auch wenn sie für sich allein keinen mathematischen Wert besitzt, werden Sie zugeben, dass 2.000 etwas völlig anderes bedeutet als 2.
Die Erfindung der Stellenwertsysteme war der Ausgangspunkt für die Konstruktion immer ausgefeilterer mechanischer Rechenmaschinen: Im 17. Jahrhundert konstruierte der französische Mathematiker und Philosoph Blaise Pascal eine Addiermaschine, 1722 erfand Gottfried Wilhelm Leibniz eine komplexere Maschine, die bereits sämtliche Grundrechenarten beherrschte. Solche mechanischen Rechenapparaturen arbeiteten mit einem komplexen Gefüge aus Zahnrädern und ähnlichen Bauteilen, die aus der Uhrmacherei übernommen wurden.
Erst im 19. Jahrhundert entstand die Idee zu einer Apparatur, die mit heutigen Computern vergleichbar ist. Der britische Wissenschaftler Charles Babbage hatte bereits eine klassische mechanische Rechenmaschine namens Differential Engine gebaut und plante um 1850 den Bau eines weiteren mechanischen Geräts namens Analytical Engine. Es sollte der erste frei programmierbare Rechenautomat der Welt werden. Ohne es zu ahnen, nahm Babbage einige der wichtigsten Designprinzipien des Computers vorweg: Das Gerät sollte aus einem Rechenwerk namens mill, einem Programm- und Datenspeicher und einer Ein- und Ausgabeeinheit bestehen. Auch wenn spätere Rekonstruktionen auf der Basis von Babbages Aufzeichnungen ergaben, dass die Maschine funktioniert hätte, war Babbage selbst nicht in der Lage, sie fertigzustellen, weil die damalige Mechanik keine Bauteile in ausreichender Präzision liefern konnte.
Interessant ist dagegen, dass es Grundideen einer Programmiersprache für die Analytical Engine gab. Babbage engagierte Ada Lovelace, die Tochter des berühmten Dichters Lord Byron, für die Entwicklung einer solchen Sprache. Ihr zu Ehren wurde eine in den 70er-Jahren des 20. Jahrhunderts entwickelte Programmiersprache Ada genannt.
Während die Rechenmaschinen in der zweiten Hälfte des 19. Jahrhunderts immer leistungsfähiger und komplexer wurden, beachtete dennoch niemand den Gedanken der Programmierbarkeit. Alle Rechenmaschinen bis etwa 1940, auch die elektrischen, waren auf die Berechnung einzelner eingegebener Rechenaufgaben beschränkt. Erst um diese Zeit erfand der Bauingenieur Konrad Zuse in Berlin programmierbare elektromechanische Rechenautomaten. Sein dritter Versuch, die Z3, funktionierte tatsächlich. Die Maschine arbeitete mit Relais, elektromagnetischen Schaltern aus der Telefontechnik. Sie verwendete eine binäre Fließkommaarithmetik mit einer Wortbreite von 22 Bit: 1 Bit für das Vorzeichen, 14 Bit für die Mantisse und 7 Bit für den Exponenten. Der Hauptspeicher besaß eine Kapazität von 64 Maschinenwörtern, also 64 × 22 Bit. Programmiert wurde die Maschine (und einige ihrer Nachfolger) in einer von Zuse entwickelten Sprache namens Plankalkül.
Elektrizität, Elektromechanik und Elektronik
Bereits Anfang des 20. Jahrhunderts wurden die ersten elektrischen Rechenmaschinen konstruiert. Die Rechner, die Konrad Zuse ab den 30er-Jahren baute, waren elektromechanisch. In den 40er-Jahren begann man in den USA und Großbritannien mit der Entwicklung elektronischer Rechner.
In diesem Zusammenhang ist es wichtig, den Unterschied zwischen Elektrizität, Elektromechanik und Elektronik herauszustellen:
- Ein elektrisches Gerät ist jede Maschine, bei der mechanische Bauteile durch elektrischen Strom angetrieben werden.
- Elektromechanisch werden alle Schaltelemente genannt, die durch einen Elektromagneten gesteuert werden, beispielsweise die Relais, die Zuse für seine ersten Computer verwendete. Mit anderen Worten geschieht die Steuerung des Geräts durch elektrischen Strom, allerdings indirekt durch mechanische beziehungsweise magnetische Bauteile.
- Elektronische Geräte schließlich werden allein durch elektrischen Strom gesteuert – Bauteile wie die klassische Elektronenröhre oder der neuere Transistor dienen als elektrisch gesteuerte Schalter ohne mechanische Teile.
1.2.2 Die Entwicklung der elektronischen Rechner
Computer im heutigen Sinne sind alle programmierbaren Rechner, die elektronisch arbeiten. Die elektronischen Computer lassen sich grob in vier Generationen einteilen:
- 1. Generation: Röhrenrechner
Ab den 40er-Jahren wurden Rechner auf der Basis von Elektronenröhren entwickelt. - 2. Generation: Transistorrechner
Ab den 50er-Jahren wurden die teuren, stromhungrigen und störungsanfälligen Röhren durch Transistoren ersetzt. - 3. Generation: Rechner mit integrierten Schaltkreisen
In den 60er-Jahren gelang es, durch fotolithografische Verfahren große Mengen von Transistorschaltungen auf Halbleiterplatten unterzubringen – es begann die Entwicklung der integrierten Schaltkreise (englisch: integrated circuits, abgekürzt ICs, auch Chips genannt). - 4. Generation: Rechner mit Mikroprozessor
Die frühen ICs waren fest verdrahtet – sie konnten nur eine einzelne, festgelegte Aufgabe erfüllen. Solche Chips für spezielle Anwendungszwecke gibt es noch heute. Anfang der 70er-Jahre wurden zusätzlich frei programmierbare ICs entwickelt, die man Mikroprozessoren nannte. Es dauerte allerdings noch über fünf Jahre, bis die ersten Computer mit diesen Prozessoren konstruiert wurden.Abbildung 1.1 Eine kleine Auswahl verschiedener Elektronenröhren
Röhrenrechner
Auf der Grundlage der Forschungen von John von Neumann, der das theoretische Modell eines Computers formulierte, wurden in den USA Geräte wie Harvard Mark I und Mark II oder der berühmte ENIAC gebaut. Diese erste Generation elektronischer Computer arbeitete mit Elektronenröhren als Schaltelementen. Diese mit den Glühlampen verwandten Vakuumbauteile wurden ab Ende des 19. Jahrhunderts entwickelt und dienten verschiedenen Zwecken – denken Sie beispielsweise an das Röhrenradio, in dem die Elektronenröhre als Verstärkerelement eingesetzt wird. Abbildung 1.1 zeigt eine Auswahl verschiedener Elektronenröhren, die zwischen 1927 und 1960 hergestellt wurden. Das Bild stammt übrigens aus dem virtuellen Physikmuseum der Universität Innsbruck (http://exphys.uibk.ac.at/museum/); Herr Professor Denoth stellte es mir freundlicherweise zur Verfügung. Auf der angegebenen Website finden Sie noch viele weitere interessante Bilder und Informationen zur Physikgeschichte, darunter auch weitere Röhren, die ab 1870 entwickelt wurden.
Das für die Computertechnik interessanteste Röhrenmodell war die Triode, die mit ihren drei Anschlüssen die früheste Verwirklichung eines rein elektronischen Schalters darstellt: Einer der drei Anschlüsse dient der Steuerung; wenn dort Spannung anliegt, fließt Strom durch die beiden anderen Anschlüsse.
Programmiert wurden die meisten Röhrenrechner durch Schalter und Steckverbindungen an großen Schalttafeln. Die einzige Möglichkeit, ein bestimmtes Programm für die spätere erneute Ausführung zu »speichern«, bestand darin, den Zustand der Schalttafel aufzumalen oder zu fotografieren. So dauerte es oft mehrere Stunden, den Computer in die Lage zu versetzen, komplexe Aufgaben zu erfüllen.
Erst allmählich begann man mit der Verwendung von Lochkarten zur Programm- und Dateneingabe. Die Lochkarte selbst wurde im 19. Jahrhundert erfunden, um mechanische Webstühle zu steuern. Der Ingenieur Hermann Hollerith, ein Mitbegründer der späteren IBM, setzte sie um 1900 zur Speicherung von Daten einer US-Volkszählung ein, was die Dauer der Ergebnisberechnung mithilfe von Rechenmaschinen von den erwarteten Jahren auf wenige Wochen reduzierte.
Transistorrechner
Röhrenrechner hatten einige gravierende Nachteile: Sie waren zu groß, zu stromhungrig und wegen der gewaltigen Hitzeentwicklung zu störanfällig. Aus diesen Gründen wurde bald der 1947 erfundene Transistor für die Computerentwicklung eingesetzt. Transistoren sind Halbleiterbauteile, die prinzipiell dieselben Schaltaufgaben erledigen können wie die verschiedenen Arten von Röhren, aber kleiner, billiger und weniger stromhungrig sind. Der Begriff Halbleiter, der im Zusammenhang mit Computern immer wieder genannt wird, bezeichnet übrigens ein Material, dessen elektrische Leitungsfähigkeit etwa in der Mitte zwischen den Leitern (vielen Metallen) und Isolatoren liegt. Das beliebteste chemische Element zur Fertigung von Halbleiterbauteilen ist Silizium, was der berühmten Gegend in Kalifornien, in der sich in den 60er-Jahren zahlreiche Elektronikfirmen ansiedelten, den Namen Silicon Valley eingebracht hat.
Erst durch die Einführung des Transistors gelangte die Elektronik zu ihrer vollen Blüte. Dies zeigte sich vor allem an den Transistorradios, die ab den 50er-Jahren zuhauf verkauft wurden. Auch für die entstehende Computerindustrie ergaben sich neue Impulse: Durch die Transistortechnik ließen sich kleinere, leistungsfähigere und weniger störanfällige Rechner konstruieren. Natürlich ist »klein« und »leistungsfähig« relativ. Angesichts eines heutigen PCs oder gar Notebooks waren auch die Transistorrechner monströs, mindestens jedoch so groß wie eine ganze Reihe gewaltiger Kleiderschränke.
Auch die Transistorrechner wurden anfangs vor allem durch Lochkarten gesteuert. Mitte der 60er-Jahre begann man allerdings mit der Entwicklung von Terminals für den direkten Dialog mit dem Computer. Ein Programmierer konnte über eine Tastatur Befehle eingeben und ein unmittelbares Feedback erhalten, anfangs über einen Fernschreiber-Endlosdrucker, später über einen Monitor. Die Geschichte der Steuerung von Computern wird in Kapitel 5, »Betriebssystemgrundlagen«, genauer behandelt.
Abbildung 1.2 Eine VAX von Digital Equipment mit Terminals verschiedener Generationen (Quelle: Wikipedia)
Computer mit integrierten Schaltkreisen
Der Übergang von Transistorrechnern zu Computern mit ICs verlief unspektakulär und allmählich. Bereits in den frühen 70er-Jahren waren deshalb Computer in verschiedenen Größen verfügbar: Die Großrechner oder Mainframes – vor allem von IBM produziert – bildeten die Rechenzentren von großen Behörden, Versicherungskonzernen oder Universitäten. Daneben kamen die sogenannten Kleincomputer auf (noch immer größer als die meisten Kleiderschränke); einer der führenden Hersteller war die Digital Equipment Corporation (DEC). Die Kleincomputer waren zwar nicht ganz so leistungsfähig wie Mainframes, dafür aber flexibler und sogar – mit entsprechend großen Lkws – transportfähig. Besonders wichtige Beispiele für Kleincomputer sind die Geräte der DEC-PDP-Baureihe, die untrennbar mit der Geschichte des Betriebssystems Unix verknüpft ist.
Durch die Verwendung von ICs kam eine weitere Klasse von Geräten hinzu: die sogenannten Minicomputer. Sie waren etwa so groß wie eine größere Kommode und verhältnismäßig leicht, aber durch die fortschreitende Miniaturisierung nicht viel weniger leistungsfähig als Kleincomputer. Ein herausragendes Beispiel für den Minicomputer sind spätere Ausgaben der ebenfalls von DEC stammenden VAX-Baureihe (ein älteres Modell sehen Sie in Abbildung 1.2.).
Für Klein- und Minicomputer wurden übrigens die ersten standardisierten Betriebssysteme und Anwendungsprogramme entwickelt. Dies erforderte die Entwicklung leicht kopierbarer Speichermedien. Ein wichtiger Schritt in diese Richtung war die Verwendung von Magnetbandspulen als Datenspeicher; ihr Aussehen und ihre Funktionsweise entsprachen den etwa zur selben Zeit verbreiteten Tonbändern.
Mikrocomputer
1971 wurde der erste programmierbare Mikrochip entwickelt, genannt Mikroprozessor. Allgemein wird der Intel 4004 als erster Prozessor betrachtet; später stellte sich aber heraus, dass ein anderes Unternehmen bereits einige Monate vor Intel einen ähnlichen Chip entwickelt hatte. Allerdings wussten die Intel-Entwickler nichts davon.
Der 4004 war ein 4-Bit-Mikroprozessor. Er konnte also Informationen verarbeiten, die aus einer Abfolge von vier Einsen oder Nullen bestanden. Mit dieser Wortbreite lassen sich sechzehn verschiedene Werte darstellen, zum Beispiel die Zahlen 0 bis 15. Der Prozessor verstand verschiedene Arten von grundlegenden Befehlen: Er beherrschte arithmetische Operationen, also Berechnungen in den Grundrechenarten, und konnte logische Verknüpfungen und Vergleiche durchführen und auf der Basis ihrer Ergebnisse die »Entscheidung« treffen, an einer anderen Stelle im Programm fortzufahren. Die mathematisch-logischen Grundlagen und ihre Verwirklichung durch elektronische Bauteile werden im nächsten Kapitel, »Mathematische und technische Grundlagen«, vorgestellt.
Intel unterschätzte zu Anfang die Möglichkeiten des Mikroprozessors; er wurde in Rechenmaschinen und Ampelanlagen eingebaut, aber nicht in einen Computer. Erst 1975 baute die Rechenmaschinenfirma MITS einen einfachen Mikrocomputer-Bausatz, den Altair 8800. Er war mit einer Reihe von DIP-Schaltern für die Eingabe der einzelnen Bits und einer Reihe von Leuchtdioden zur Anzeige der Ergebnisse ausgestattet. Der verwendete Mikroprozessor war der Intel 8080, der bereits 8 Bit verarbeiten konnte. Für dieses zunächst nicht besonders nützliche Gerät entwarfen Bastler Schnittstellen für Monitor und Tastatur, und ein junger Programmierenthusiast schrieb einen Interpreter (zeilenweisen Übersetzer) für die einfache Großrechner-Programmiersprache BASIC, der auf dem Gerät lief. Der Programmierer war Bill Gates. Die Entwicklung von Programmiersprachen-Paketen für die beginnende Personal- und Homecomputer-Industrie war das erste Geschäftsfeld seiner 1976 gegründeten Firma Microsoft.
Große Verdienste im Zusammenhang mit der PC-Entwicklung haben übrigens die Forscherinnen und Forscher des Xerox PARC (der Name PARC steht für »Palo Alto Research Center«). Diese Forschungseinrichtung in Kalifornien hat eine interessante Geschichte: Zu Beginn der 70er-Jahre bekamen die Manager der renommierten Papier-, Druckmaschinen- und Kopiererfirma Xerox langsam Angst, denn sie sahen angesichts der schnellen Weiterentwicklung der Computer das Schreckgespenst des »papierlosen Büros« auf sich zukommen. Natürlich weiß man es heute besser; der Papierverbrauch in den Büros hat sich seitdem vervielfacht, weil es einfach und billig ist, Dokumente mal eben auszudrucken und dann auf Papier zu kontrollieren.
Aber damals konnte das natürlich niemand ahnen. Und so beschloss die Firma Xerox: Wenn die Leute im Büro kein Papier mehr brauchen, dann müssen wir ihnen eben das liefern, was sie stattdessen dort benötigen. Dies war der Grundgedanke für die Einrichtung dieses Forscherparadieses. Einige der brillantesten Köpfe der Computertechnik und Informatik wurden eingeladen, jeweils fünf Jahre lang, mit fast unbegrenzten finanziellen Mitteln ausgestattet, zu erforschen, was immer sie wollten. So kam es, dass hier schon Mitte der 70er-Jahre Neuerungen wie eine grafische Benutzeroberfläche, die Dokumentenbearbeitung nach dem Prinzip WYSIWYG (»What You See Is What You Get«) oder ein Laserdrucker entwickelt wurden.
Im Prinzip existierte dort ein marktreifes Personal-Computer-System, dessen technische Fähigkeiten erst über 15 Jahre später zum allgemeinen Standard wurden. Der einzige Nachteil dieses Systems, des Alto, war sein außerordentlich hoher Preis von ca. 100.000 US-Dollar. Jedenfalls wurde Xerox PARC so auch die Wiege des lokalen Netzwerks: Die Vision war, dass jeder Mitarbeiter eines Unternehmens ein solches Gerät auf seinem Schreibtisch stehen hat und der Austausch von Daten ganz einfach ist. So entstand Ethernet, diejenige Form des lokalen Netzes, die heute – neben dem drahtlosen WLAN – am häufigsten genutzt wird.
Sollten Sie sich jetzt wundern, warum keine dieser bahnbrechenden Entwicklungen heute den Namen Xerox trägt, so liegt dies daran, dass die Führungsetage des Unternehmens im fernen New York deren Brillanz und zukunftsweisende Eigenschaften nicht erkannte. So wurden die Entwicklungsergebnisse der meisten Forscher von diesen mitgenommen, jahrelang in die Schublade gelegt und später oftmals zur Gründung anderer Firmen verwendet.
John Warnock etwa, eine Zeit lang Forschungsleiter von PARC, gründete die Firma Adobe und konzentrierte sich besonders auf die Bereiche WYSIWYG und den Laserdrucker. Andere Ergebnisse wurden freimütig an Fremde weitergegeben, so etwa die Geheimnisse der grafischen Oberfläche an den Apple-Mitbegründer Steve Jobs, der darin die Grundlage für den Computer der Zukunft erkannte. Zusammen mit dem Bastelgenie Steve Wozniak entwarf er den ersten verbreiteten »richtigen« Personal Computer auf Mikroprozessorbasis: Apple II hieß das 1977 entstandene Gerät, das sich in seinen verschiedenen Versionen bis 1984 Millionen Mal verkaufte. Dieser Computer definierte für fast zehn Jahre, was ein Homecomputer haben musste: einen eingebauten BASIC-Interpreter, eine fest in das Gerät integrierte Tastatur, gewöhnliche Audiokassetten und später Disketten als Datenspeicher sowie einen Anschluss für die Bildausgabe auf einem gewöhnlichen Fernseher (die privaten Anwender oder kleine Unternehmen konnten sich nicht auch noch einen Monitor leisten, zumal es diesen zu dem Zeitpunkt nur einfarbig gegeben hätte).
1981 stieg auch der Großrechner-Multi IBM in das Geschäft mit Personal Computern ein. Es war zwar untypisch für dieses Unternehmen, nicht alle Bauteile eines Computers selbst zu entwickeln, aber aus Gründen des Zeitdrucks kauften sie sich die Bestandteile ihres Geräts auf dem freien Markt zusammen. Der IBM-PC war nicht unbedingt besser als seine Vorgänger, aber allein der gute Name des Herstellers schuf das Vertrauen der Wirtschaft und der Industrie, dass PCs eine solide und zukunftsträchtige Technologie seien.
Einige Jahre war IBM Marktführer im Bereich der Personal Computer. Da jedoch immer mehr Hersteller kompatible Nachbauten auf den Markt brachten, die zunehmend billiger wurden, verlor der Konzern irgendwann den ersten Platz. Zudem zerstritten sie sich 1990 mit ihrem Betriebssystemlieferanten Microsoft. Seitdem wurde nicht mehr von IBM definiert, wie ein »richtiger PC« auszusehen hat, sondern von Intel und Microsoft – wegen der Kombination aus Intel-Prozessoren und Microsoft-Windows-Betriebssystemen wurden PCs in den 90er-Jahren mitunter als WinTel-PCs bezeichnet.
Parallel blühte in der ersten Hälfte der 80er-Jahre der Markt mit reinen Homecomputern ohne professionelle Ambitionen. Interessant war auf diesem Gebiet zunächst der ZX81 (siehe Abbildung 1.3), den der Brite Clive Sinclair entwickelt hatte. Trotz seiner bescheidenen Ausstattung mit 1 KByte Arbeitsspeicher, Schwarz-Weiß-Grafik und Folientastatur verkaufte sich das Gerät vorzüglich, weil es der erste Computer war, der weniger als 100 £ (damals etwa 400 DM, also ca. 200 €) kostete.
Der beliebteste Homecomputer der 8-Bit-Generation wurde allerdings der 1983 auf den Markt gebrachte Commodore C64. Eines der wichtigsten Verkaufsargumente war die reichhaltige Auswahl an Software, vor allem Computerspielen. In Abbildung 1.4 wird dieses Gerät gezeigt. Ein nicht ganz so beliebtes, aber durchaus konkurrenzfähiges Gerät war der Atari 800 XL; für diesen gab es zwar weniger Spiele, aber dafür war er besser programmierbar. Die Unterschiede zwischen diesen beiden Geräten waren allerdings relativ gering. Beide waren mit dem 8-Bit-Prozessor 6502 von MosTek ausgestattet, verfügten über 64 KByte RAM, eine Grafik mit 320 × 240 Pixeln und 16 Farben (Atari bei einer geringeren Auflösung sogar 256) sowie mehrstimmigen Synthesizer-Sound, der an das angeschlossene Fernsehgerät übertragen wurde. Obwohl die beiden Rechner sich also technisch sehr ähnlich waren, tobten zu jener Zeit »Systemkriege«, die sich ohne Weiteres mit den heutigen PC/Apple- oder Linux/Windows-»Glaubenskriegen« vergleichen lassen.[Anm.: Um mich selbst zu outen: Mein erster eigener Rechner war ein ZX81, dem ein Atari 800 XL folgte. Später hatte ich dann sehr lange nur noch IBM-kompatible PCs. Inzwischen sind noch ein MacBook und ein Netbook (Samsung NC10) dabei. Sämtliche in diesem Buch beschriebenen Betriebssysteme sind auf diesen Rechnern im Einsatz und kommen prima miteinander aus.]
Abbildung 1.3 Der Sinclair ZX81 (Quelle: Wikipedia)
Die nächste Generation von Homecomputern, die in der zweiten Hälfte der 80er-Jahre erschien, basierte auf dem 16-Bit-Prozessor 68000 von Motorola und seinen Nachfolgern und war mit »richtigen« Betriebssystemen mit grafischer Benutzeroberfläche ausgestattet. Wieder stritten sich Commodore und Atari um den ersten Platz; auch die verschiedenen Modelle von Commodore Amiga und Atari ST waren mit vergleichbaren Features ausgestattet. Schon früher, nämlich 1984, war der ähnlich gestaltete Apple Macintosh erschienen; allerdings war er nicht für Heimanwender konzipiert.
Bemerkenswert ist, dass Standard-PCs erst viele Jahre später mit Multimedia-Fähigkeiten ausgestattet wurden, die auch nur ansatzweise mit Geräten wie Amiga oder ST vergleichbar waren. Noch heute sind diese Rechner bei manchen Künstlern oder Musikern beliebt, und zumindest im Fall des Amigas gibt es immer wieder Gerüchte um eine Wiederbelebung durch verschiedene Firmen.
Abbildung 1.4 Commodore C64, der berühmte »Brotkasten« (Quelle: Wikipedia)
Zu Beginn der 90er-Jahre wurden die Home- und Personal Computer nach und nach mit 32-Bit-Prozessoren ausgestattet. Den Anfang machte der IBM-PC/AT mit Intels 80386-Prozessor, dem wie bei den Vorgängermodellen wieder zahlreiche kompatible Nachbauten folgten. Apple ersetzte dagegen die Motorola 680xx-Prozessoren der frühen Macs durch PowerPC-Prozessoren, was die Familie der PowerMacs einleitete. Bemerkenswerterweise wurde die Macintosh-Prozessorbasis ab 2005 nochmals gewechselt; statt PowerPC werden nun Intel-Multicore-Prozessoren eingesetzt.
Die Leistungssteigerung der PC- und Mac-Prozessoren sorgte dafür, dass diese Rechner – besonders die günstigeren IBM-kompatiblen PCs – die klassischen Homecomputer verdrängten und nach den Büros auch den Heimbereich eroberten. Dazu wurden insbesondere im Bereich der Multimedia-Fähigkeiten große Fortschritte erzielt. Ein gewisses Problem bestand allerdings darin, dass die Betriebssysteme der frühen 90er-Jahre nicht für die modernen 32-Bit-Architekturen ausgelegt waren. 1995 brachte Microsoft mit Windows 95 ein massentaugliches Kompromiss-System auf den Markt, das zwar noch immer einen MS-DOS-Unterbau besaß, aber innerhalb der grafischen Oberfläche echtes 32-Bit-Multitasking beherrschte. Erst im Jahr 2001 verabschiedete sich Microsoft mit Windows XP ganz von der MS-DOS-Vergangenheit im Heimsektor; im selben Jahr erschien die erste Version von Apples Neuentwicklung Mac OS X.
Beide Systemwelten hatten übrigens viel weniger Schwierigkeiten beim Wechsel von 32- auf die immer weiter verbreiteten 64-Bit-Architekturen, genauso wenig wie das freie, für viele Plattformen verfügbare Betriebssystem Linux. Näheres zur Geschichte der Betriebssysteme lesen Sie übrigens in Kapitel 5, »Betriebssystemgrundlagen«.
Ausblick in die nähere Zukunft
Offiziell zählen alle heutigen Computer zur vierten Generation, zu den Computern mit Mikroprozessoren. Selbst mächtige Servermaschinen oder Großrechner werden durch zahlreiche parallel betriebene Prozessoren realisiert. Eine offizielle fünfte Generation ist niemals ausgerufen worden.
Dennoch zeichnen sich zurzeit verschiedene Entwicklungen ab, die in Zukunft zu einem Wandel auf dem Computermarkt führen könnten. Die wichtigsten sind folgende:
- Es entstehen immer mehr spezielle mobile Geräte, die Teile der Funktion des universellen PCs übernehmen. Dazu gehören Mobiltelefone mit Internet- und Multimedia-Funktionen (Smartphones) wie Apples iPhone oder die zahlreichen Google-Android- und Windows-Phone-Geräte, Tablets (iPad, Samsung Galaxy Tab & Co.), PDAs oder spezielle Geräte, die wie eine Armbanduhr oder ein Gürtel getragen werden können oder in Kleidungsstücke eingebaut sind (Wearable Computers). Im gleichen Maße wird das Internet, besonders in seiner drahtlosen Form, immer wichtiger.
- Über die klassische binäre Elektronik hinaus entstehen neue Ansätze für den Bau von Computern. Dazu gehören beispielsweise DNA-basierte »Bio-Rechner« oder Computer auf der Basis von Lichtwellenleitern – diese auch als Glasfaserkabel bezeichneten Leitungen transportieren Licht statt elektrischen Stroms und kommen bereits seit Langem bei der Datenübertragung zum Einsatz (Kabelfernsehen, Netzwerke und so weiter). Ein weiteres interessantes Projekt ist der Quantencomputer: Da die Quantenmechanik besagt, dass ein Teilchen mehrere Zustände zur selben Zeit aufweisen kann, können sogenannte QBits (Quanten-Bits) codiert werden, die »1 und 0 gleichzeitig« enthalten – das Durchprobieren zahlreicher verschiedener Fälle muss nicht mehr nacheinander geschehen, sondern kann gleichzeitig erfolgen.
- Überraschend ruhig ist es dagegen in den letzten Jahren in der Öffentlichkeit um die »künstliche Intelligenz« geworden. Inzwischen hat sich die Forschung vorläufig von dem Gedanken verabschiedet, das komplexe menschliche Gehirn nachzuahmen. Stattdessen betreibt man erst einmal Grundlagenforschung und simuliert beispielsweise das Zusammenspiel weniger einzelner Nervenzellen in sogenannten neuronalen Netzen.
1.2.3 Entwicklung der Programmiersprachen
Damit ein Computer nützliche Aufgaben erledigen kann, muss er programmiert werden. Da in der kurzen Übersicht über die Computergeschichte bereits von Programmiersprachen die Rede war, folgt hier ein kurzer Abriss über deren Entwicklung.
Die Maschinensprache des Prozessors
Die einzige Sprache, die ein Mikroprozessor wirklich versteht, ist seine Maschinensprache. Sie besteht aus nichts weiter als aus Zahlen: Jeder Befehl, den der Prozessor »versteht«, besitzt einen bestimmten numerischen Code. Je nach Art des Befehls folgen auf die Befehlsnummer ein oder mehrere Argumente verschiedener Länge.
Ein Maschinenprogramm ist für Menschen so gut wie unlesbar und schon gar nicht schreibbar. Wenn Sie eine binäre Programmdatei mit einem Texteditor öffnen, werden die gespeicherten Zahlen als Zeichen interpretiert; es erscheint merkwürdiger Zeichensalat, an manchen Stellen unterbrochen von kleinen Textblöcken, wenn das Programm normalen Text enthält.
Angenommen, ein Programm enthält den folgenden (fiktiven) Befehl:
65 0 0 0 98
Bei dem Befehl 65 könnte es sich beispielsweise um die Anweisung handeln, einen bestimmten Wert auf einen Speicherstapel zu legen; der Wert wird als 32-Bit-Ganzzahl angegeben, hier 98. Im Texteditor sähe dies etwa so aus:
A b
Das große A besitzt den Zeichencode 65, das kleine b den Code 98. Die drei Null-Bytes werden in manchen Editoren als merkwürdige Sonderzeichen, in anderen als Leerzeichen angezeigt. Ein Rückschluss auf die tatsächlichen Befehle ist so gut wie unmöglich.
Wenn Sie überhaupt jemals gezwungen sein sollten, Maschinensprachdateien von Hand zu modifizieren (zum Beispiel, um ein Computerspiel zu überlisten), verwenden Sie besser einen Hex-Editor, der die einzelnen Werte nicht nur als ASCII-Zeichen, sondern zusätzlich hexadezimal darstellt. Hier könnte das Ganze folgendermaßen aussehen:
41 00 00 00 62 A b
Assembler – die »benutzerfreundliche« Maschinensprache
Um Maschinensprache halbwegs benutzbar zu machen, wurde der Assembler entwickelt. Statt die Befehle mit ihren tatsächlichen Zahlencodes zu schreiben, werden sie durch Kürzel dargestellt, die man sich mehr oder weniger gut merken kann – daher auch der Name »Mnemonics«. In der Regel werden diese Namen für die jeweiligen Assembler-Befehle unmittelbar vom Prozessorhersteller selbst festgelegt, um jegliches Chaos zu vermeiden.
Die Assembler-Sprache ist von Prozessor zu Prozessor völlig verschieden. Jede Prozessorarchitektur versteht ihre ganz eigenen Arten von Befehlen, die entsprechend unterschiedlich in Assembler umgesetzt werden.
Assembler ist sowohl der Name für diese vereinfachte Schreibweise der Maschinensprache als auch der Name für das Programm, das diese Sprache in die eigentliche Maschinensprache umsetzt (im Englischen wird die Sprache allerdings eher als assembly language bezeichnet).
Das Assembler-Programm führt gegenüber der eigentlichen Maschinensprache oft eine Reihe von Erleichterungen ein. Viele Assembler beherrschen etwa die Definition sogenannter Makros: Immer wiederkehrende Abfolgen von Befehlen erhalten einen eindeutigen Namen und können dann später unter diesem Namen aufgerufen werden.
Assembler wird heutzutage kaum noch zur Programmierung verwendet, zumindest nicht zur Erstellung vollständiger Programme. Wichtige Ausnahmen sind folgende:
- In Betriebssystemen sind einige der besonders hardwarenahen Kernroutinen im Assembler des jeweiligen Prozessors geschrieben, und zwar vor allem deswegen, damit der gesamte Rest des Systems so weit von der Hardware abstrahiert wird, dass er vollständig in einer höheren Sprache – meist C – geschrieben werden kann. Diese Vorgehensweise wurde in den 70er-Jahren bei der Implementierung von Unix entwickelt und gilt noch heute.
- Auch Gerätetreiber, die zu den wichtigsten Bestandteilen der Betriebssysteme gehören, müssen manchmal in Assembler geschrieben werden.
- Bestimmte Teile von Computerspielen werden hin und wieder in Assembler geschrieben. Spieleprogrammierern, besonders von schnellen 3D-Spielen, kommt es vor allem auf Geschwindigkeit an.
- Besonders systemnahe Computerviren (Bootsektorviren, die den Startbereich eines Datenträgers infizieren, und Programmviren, die ausführbare Programme befallen) sind meistens vollständig in Assembler geschrieben.
Die ersten höheren Programmiersprachen (Fortran, Cobol, BASIC)
Als praktischer Ersatz für die maschinenorientierten Sprachen wurden Mitte der 50er-Jahre die problem- oder benutzerorientierten Programmiersprachen eingeführt. Ihr Vorrat an möglichen Befehlen und ihre Syntax orientierten sich eher an den Bedürfnissen der Programmierer als an denen des Rechners.
Diese Programmiersprachen müssen in die Maschinensprache des konkreten Prozessors übersetzt werden. Dazu wurden zwei grundlegende Vorgehensweisen entwickelt:
- Der Compiler erzeugt ein dauerhaft lauffähiges Maschinensprachprogramm und speichert es als ausführbares Programm (Binary Executable) ab.
- Der Interpreter übersetzt den Quellcode dagegen Zeile für Zeile; der Code wird also während der Ausführung (zur Laufzeit) übersetzt. Interpretierte Sprachen werden häufig auch als Skriptsprachen bezeichnet.
Die erste Generation der höheren Programmiersprachen war sehr einfach. Beispielsweise gab es noch keine echte Programmstrukturierung. Das ursprüngliche BASIC verwendete etwa Zeilennummern, zu denen gesprungen werden konnte; Fortran benutzte spezielle Sprungmarken.
Jede dieser frühen Sprachen hatte eine spezielle Ausrichtung oder einen besonderen Verwendungszweck:
- Fortran, entwickelt in den 50er-Jahren, ist die Abkürzung für »Formula Translator«. Es handelt sich um eine besonders im Hinblick auf mathematische Bedürfnisse geschriebene Sprache. Sie wird zum Teil auch heute noch von Ingenieuren oder Mathematikern gern verwendet.
- Cobol wurde ebenfalls in den 50er-Jahren entwickelt. Der Name ist die Abkürzung für »Common
Business-oriented Language«; es handelt sich also um eine Sprache für kaufmännische
Anwendungszwecke, für Handel und Wirtschaft. Cobol ist eine ziemlich »geschwätzige«
Sprache. Es braucht relativ viele Wörter, um verhältnismäßig kurze Anweisungen auszudrücken.
Beispielsweise können Sie in fast jeder Programmiersprache folgendermaßen den Wert
der Variablen b durch 7 teilen und das Ergebnis in einer zweiten Variablen namens a speichern:
a = b / 7
In Cobol wird dagegen folgende Anweisung verwendet:
DIVIDE B BY 7 GIVING A
- BASIC wurde 1960 am Dartmouth College entwickelt. Der Name steht für »Beginner’s All-Purpose
Symbolic Instruction Code«. Es handelt sich also um eine eher einfache Sprache für
Anfänger. Die Sprache fand ab der zweiten Hälfte der 70er-Jahre, als die neu gegründete
Firma Microsoft sie zum ersten Mal für Personal Computer anpasste, eine gewaltige
Verbreitung. Fast jeder Homecomputer in den 80er-Jahren hatte irgendeine BASIC-Variante
im ROM eingebaut.
Zur Verdeutlichung sehen Sie hier ein kleines Beispielprogramm in »allgemeinem« BASIC, das fast jeder klassische BASIC-Interpreter verstehen würde:
10 PRINT "Wie heißt du?"
20 INPUT A$
30 PRINT A$; " ist ein interessanter Name."
40 PRINT "Noch mal (j/n)?"
50 INPUT J$
60 IF J$ = "j" THEN GOTO 10Die einzelnen Programmzeilen bedeuten Folgendes:
- (10) Ausgabe des Textes »Wie heißt du?«
- (20) Eingabe der Variablen A$, die durch das Dollarzeichen als String-Variable (Textinhalt) gekennzeichnet wird.
- (30) Der eingegebene Name wird ausgegeben, gefolgt von »ist ein interessanter Name.«.
- (40) Der Benutzer wird gefragt, ob er einen weiteren Durchgang wünscht.
- (50) Eingabe der Variablen J$
- (60) Hat J$ den Wert »j«, geht es weiter bei Zeile 10; das Programm wird erneut ausgeführt. Andernfalls endet das Programm, da keine weiteren Befehle mehr folgen.
Imperative oder prozedurale Programmiersprachen (Pascal, C)
Diese Programmiersprachen erlauben eine Strukturierung von Programmen, darüber hinaus ist eine gewisse Modularisierung möglich: Programme können in kleinere logische Einheiten eingeteilt werden, Prozeduren oder Funktionen genannt. Diese sind bis zu einem gewissen Grad wiederverwendbar.
Pascal wurde ab 1968 von dem Schweizer Mathematikprofessor Niklaus Wirth ausdrücklich als Lehrsprache entwickelt. Noch heute ist Pascal eine der beliebtesten Sprachen, um Schülern oder Studenten das Programmieren beizubringen, weil die Sprache zu einer klaren Programmstrukturierung zwingt.
Die Programmiersprache C wurde 1971 von Dennis Ritchie und Brian Kernighan bei AT&T entwickelt, insbesondere um eine portierbare (auf andere Rechnerplattformen übertragbare) Version des Betriebssystems Unix zu schreiben. Ursprünglich wurde C für einen ganz bestimmten Computer und dessen Besonderheiten entwickelt, den DEC PDP-7. Aus diesem Grund ist C erstaunlich nah an den Fähigkeiten von Assembler, ohne so benutzerunfreundlich zu sein wie dieses.
Hier sehen Sie zunächst ein einfaches Pascal-Programm:
PROGRAM tagesgruss;
VAR name: STRING;
zeit: INTEGER;
BEGIN
writeln ('Hallo. Gib deinen Namen ein!');
readln (name);
writeln ('Gib die Uhrzeit ein - nur Stunde!');
readln (zeit);
IF zeit < 12 THEN
writeln ('Guten Morgen ', name)
ELSE
IF zeit < 18 THEN
writeln ('Guten Tag ', name)
ELSE
writeln ('Guten Abend ', name);
END.
Das Programm begrüßt den Benutzer freundlich mit »Hallo«, und dieser wird aufgefordert, seinen Namen einzugeben. Daraufhin wartet es auf die Eingabe, die in der Variablen name gespeichert wird. Als Nächstes fragt das Programm nach der Uhrzeit oder genauer nach der Stunde.
In den verschachtelten IF-ELSE-Bedingungen wird dann je nach Tageszeit »Guten Morgen«, »Guten Tag« oder »Guten Abend« ausgegeben.
Die Programmiersprache C wird in Kapitel 9, »Grundlagen der Programmierung«, ausführlich behandelt. Trotzdem sehen Sie hier als Kontrast zu Pascal bereits ein kleines C-Beispielprogramm:
#include <stdio.h>
int main ()
{
int a, b;
printf ("Geben Sie die erste Zahl ein: ");
scanf ("%d", &a);
printf ("Geben Sie die zweite Zahl ein: ");
scanf ("%d", &b);
if (a < b)
printf ("%d ist kleiner als %d.\n", a, b);
else if (a > b)
printf ("%d ist groesser als %d.\n", a, b);
else
printf ("Zweimal die Zahl %d.\n", a);
return 0;
}
Es wird die Eingabe zweier Zahlen erwartet. Anschließend werden die beiden Zahlen verglichen; je nach Größe der beiden Zahlen wird eine entsprechende Meldung ausgegeben.
Die wichtigste Besonderheit ist, dass es kein Hauptprogramm gibt wie in Pascal, sondern nur die spezielle Funktion main(), die vom Betriebssystem aufgerufen wird. Die weiteren Eigenheiten von C werden, wie gesagt, in Kapitel 9, »Grundlagen der Programmierung«, erläutert.
Objektorientierte Programmiersprachen (Smalltalk, C++, Java, C#)
In einer objektorientierten Sprache wird in wiederverwendbaren Paketen programmiert, den sogenannten Klassen. Eine Klasse ist eine allgemeine Vorlage für die Konstruktion von Objekten. Ein Objekt ist eine Datenstruktur, die selbst Funktionen enthält, um sich auf die gewünschte Art und Weise zu »verhalten«.
Die wichtigsten Vorteile dieser Art der Programmierung sind die folgenden:
- Kapselung: Datenstrukturen außerhalb eines Objekts können nicht direkt dessen innere Daten manipulieren, sondern nur seine offiziellen Methoden (Schnittstellen nach außen) benutzen. Dies sorgt für ein klares Programmdesign und schützt vor vielen Fehlern.
- Vererbung: Klassen können ihre Eigenschaften und Methoden an »Kindklassen« abgeben, in denen nur noch die Unterschiede programmiert werden müssen. Dies beschleunigt die Softwareentwicklung und macht Programme noch einmal erheblich übersichtlicher.
Zu den wichtigsten objektorientierten Programmiersprachen gehören folgende:
- Smalltalk war die erste vollständig objektorientierte Sprache überhaupt. Sie wurde in den 70er-Jahren zur Programmierung der ersten grafischen Benutzeroberfläche entwickelt.
- C++ ist die objektorientierte Erweiterung der Programmiersprache C und wurde von Bjarne Stroustrup entwickelt. Da C++ abwärtskompatibel mit C ist, wurde die Sprache bald von C-Programmierern eingesetzt; ihre besonderen Vorteile als objektorientierte Sprache wurden aber erst langsam angenommen.
- Java besitzt vor allem die Besonderheit, dass es sich um eine plattformunabhängige Sprache handelt. Sie brauchen ein Java-Programm nur einmal zu kompilieren, es läuft innerhalb eines speziellen Programms für die verschiedenen Plattformen, der virtuellen Java-Maschine (JVM).
- C# ist eine objektorientierte Sprache von Microsoft. Es handelt sich um eine der Sprachen, mit denen Anwendungen für das .NET Framework entwickelt werden können. Zwar betont Microsoft aus Marketingerwägungen stets die Verwandtschaft mit C++, aber dennoch hat C# mehr mit Java gemeinsam als mit C++.
Logische Programmiersprachen (LISP, Prolog, Logo)
Einen völlig anderen Ansatz als die bisher behandelten Sprachen versprechen die logischen Programmiersprachen: Die Grundidee besteht darin, nicht den fertigen Algorithmus einzutippen und mit wechselnden Wertbelegungen vom Computer berechnen zu lassen, sondern das Grundproblem selbst zu formulieren und die Erzeugung einer möglichst optimalen Lösung dem Compiler zu überlassen.
Die Idee der logischen Programmierung stammt bereits aus den 60er-Jahren. Wegweisend waren die Arbeiten des Linguisten Noam Chomsky, der als Erster eine Verbindung zwischen Sprachwissenschaft und Informationstechnik herstellte. Auf dieser Grundlage entwickelten sich sogenannte Expertensysteme, die Fragen durch logische Schlussfolgerungen aus bereits bekannten Informationen beantworten können. Die logischen Programmiersprachen erwiesen sich als ideales Hilfsmittel zur Implementierung solcher Systeme.
Logische Sprachen im engeren Sinne verwenden die Prädikatenlogik zur Formulierung von Ausdrücken oder Termen; der wichtigste Vertreter ist Prolog.
Sprachen mit ähnlichem Ansatz, aber anderer Syntax werden auch als funktionale Sprachen bezeichnet; dazu gehört vor allem LISP, aber auch die Sprache Logo, die hauptsächlich entworfen wurde, um Kindern die Denkweise der Computerprogrammierung beizubringen. Als gemeinsamen Oberbegriff verwendet man manchmal die Bezeichnung deklarative Programmiersprachen.
In den letzten Jahren kommen logische und funktionale Programmiersprachen allmählich wieder in Mode, weil sich der Ansatz besonders gut zur Programmierung moderner Mehrkernprozessoren eignet. So entstanden die moderneren funktionalen Sprachen Erlang (logische Sprache, von Prolog inspiriert), Clojure (funktional, im Grunde ein moderner LISP-Dialekt) und Scala (eine sogenannte Multiparadigmen-Sprache, die neben funktionalen auch objektorientierte und imperative Aspekte enthält).
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.