CLU (Programmiersprache)

Programmiersprache
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 16. Mai 2010 um 07:04 Uhr durch Omikronn (Diskussion | Beiträge) (Artikel neu geschrieben, Quellen: ftp://ftp.lcs.mit.edu/pub/pclu/clu-history.PS, https://secure.wikimedia.org/wikipedia/en/wiki/CLU_%28programming_language%29). Sie kann sich erheblich von der aktuellen Version unterscheiden.

CLU ist eine Programmiersprache die zwischen 1974 und 1975 am Massachusetts Institute of Technology von Barbara Liskov und ihren Studenten entwickelt wurde. CLU war laut Liskov die erste implementierte Programmiersprache, die eine direkte sprachliche Unterstützung für Datenabstraktion bot, welches ein Schlüsselelement in der Entwicklung der objektorientierten Programmiersprachen war. Viele Funktionen von objektorientierten Sprachen wie z.B. die Vererbung wurden aus Designgründen absichtlich nicht implementiert, andereseits unterstützt CLU Sprachelemente wie Exception Handling, Iteratoren und parametrisierte Typen.

QS-Informatik
Beteilige dich an der Diskussion!
Dieser Artikel wurde wegen inhaltlicher Mängel auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+)


Begründung: Ausbauen --

Die Idee zur Datenabstraktion kam im Zuge von Arbeiten zur Programmiermethodologie auf. Das Primäre Ziel des Projekts, welches zur Entwicklung von CLU führte, war es die Forschung zur Programmiermethodologie voranzutreiben. Gemäss eigenen Angaben sahen die Entwickler der Sprache ihr Ziel nicht in der Verbreitung derselben sondern eher in der Verbreitung der Konzepte zur Softwareentwicklung die in CLU umgesetzt wurden. Ihren Erfolg bemassen sie im Einfluss den ihre Publikationen auf der Entwicklung zukünftiger Programmiersprachen und ihrer Anwendung in der Praxis haben sollten. CLU erhielt somit einen symbolischen Charakter. Die Entwicklung von CLU wurde von der DARPA und der National Science Foundation unterstützt.

CLU war nicht auf sogenante Low Level Programmierung ausgelegt, die man z.B. bei der Entwicklung von Betriebssystemen und ihren Komponenten anwendet. Die Sprache sollte erfahrene Programmierer ansprechen und obwohl sie nicht als Lernsprache zu akademischen Zwecken wie Pascal gedacht war, lässt sie sich auch als solche nutzen. CLU favorisiert die Lesbarkeit sowie die Verständlichkeit von Softwaresystemen gegenüber der einfachheit funktionierenden Code schreiben zu können. Es war technisch gesehen als Werkzeug zur Entwicklung im grossen Stil gedacht, der Schwerpunkt wurde auf der Entwicklung von grossen Softwaresystemen gelegt, die mehrere Entwickler benötigten und deren Umfang mehrere tausend bis hunderttausend Zeilen Code beinhalten sollte.

Entwicklung der Sprache

CLU wurde ursprünglich von 4 Personen entwickelt: Barbara Liskov sowie die Studenten Russ Atkinson, Craig Schaffert und Alan Snyder. Steve Zilles war stark in den ersten Arbeiten zu CLU involviert, ab 1974 verstärkte er seine Aktivitäten auf die Spezifikationen von abstrakten Typen und fungierte zum Schluss mehr als interessierter Schaulustiger und Kritiker des Designprozesses. Mit der Zeit kamen weitere Studenten hinzu, unter anderem Bob Scheifler und Eliot Moss. Die Entwicklung war stark auf Teamarbeit ausgerichtet, es ist somit nicht möglich einzelne Sprachelemente einzelnen Entwicklern zuzuordnen. Die Implementation erfolgte paralell zum Design der Sprache, es wurde nie zugelassen, dass die Implementation das Design der Sprachelemente bestimmte. Die Fertigstellung von Sprachelementen wurde solange verzögert bis das Design derjenigen fertiggestellt war.

Es wurden verschiedenene Programmiersprachen studiert um abzuklären welche von ihnen eventuell als Basis für CLU in Frage käme. Die Entwickler kamen zum Schluss, dass keine der Sprachen geeignet wäre, da keine von ihnen Datenabstraktion unterstützt. Die Entwickler wollten wissen wohin diese Idee sie bringen würde, ohne sich darüber sorgen zu müssen, wie es mit vorher existierenden Eigenschaften aufeinander wirken könnte. Dennoch wurden verschiedene Sprachelemente von vorhandenen Programmiersprachen übernommen. Das semantische Modell lehnt sich größtenteils an Lisp an; die Syntax wurde von ALGOL übernommen.

Cluster

Eines der wichtigsten Elemente von CLU ist das Konzept des Clusters.Dieses entspricht einem Objekt in einer objektorientierten Sprache wie C++ und weist ungefähr dieselbe Syntax auf.

Als Beispiel sei hier eine Implementation für komplexe Zahlen angeführt:


    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Obwohl das Konzept der Clusters ein dazumals fortschrittliches Werkzeug zur Strukturierung von Programmcode darstellte, existiert keinerlei Mechanismus um die Cluster selbst zu strukturieren. Das bedeutet, dass Clusternamen Global sind und keine Gruppierung sowie Verschachtelung von Cluster möglich sind. CLU unterstützt keine implizite Typkonvertierung, in einem Cluster wechseln die expliziten Konvertierungen mit den Befehlen up und down zwischen dem abstrakten Typ und der Representation. Des weiteren wird ein universeller Datentyp "any", sowie eine Prozedur "force[]" zur Verfügung gestellt. Die Prozedur überprüft ob ein Objekt einen bestimmten Typ besitzt. Objekte können die Eigenschaften "mutable" und "immutable" aufweisen, letztere werden als sogenannte native Datentypen wie z.B. Integer definiert.

Weitere Sprachelemente

Ein weiteres wichtiges Element von CLU sind die Iteratoren, welche Objekte einer Kollektion eines nach dem anderen zurückgeben. Iteratoren stellen "Black Boxen" dar, die unabhägig von den Daten auf denen sie angewandt werden eine API zur verfügung stellen. Somit würden z.B. die Iteratoren für komplexe Zahlen und diejenigen für integer Arrays identisch sein. Iteratoren sind mittlerweile ein weit verbreitetes Sprachelement in vielen modernen Programmiersprachen. CLU unterstützt ebenfalls Exception handling. Auf vielen Versuchen in anderen Programmiersprachen basierend werden Exceptions mit "signal" aufgeworfen und mit "except" abgefangen. Da der Fokus auf das Typdesign gelegt wurde, existiert auch keine Möglichkeit Aufzählungstypen zu erstellen. Ein letztes Sprachelement welches von CLU unterstützt wird, ist die mehrfache Zuweisung mit welcher mehr als eine Variable auf der linken Seite des Zuweisungsoperators stehen kann. z.B. würde x,y = y,x Werte zwischen den Variablen x und y austauschen. In derselben Art und Weise können Funktionen mehrere Werte wie z.B. x,y,z = f(t) zurückliefern.

Einfluss auf andere Programmiersprachen

  • Python und Ruby übernahmen verschieden Konzepte von CLU wie z.B. die "yield" Anweisung und die mehrfache Zuweisung.
  • CLU und Ada waren die massgeblichen Vorbilder für Templates in C++.
  • Die Mechanismen des Exception handling von CLU beeinflusste modernere Programmiersprachen wie C++ und Java.
  • Alle Objekte von CLU existieren im heap, die Speicherverwaltung läuft automatisch ab, dies beeinflusste Java in direkter Form.
  • Python und C# bieten das Konzept der Generatoren an, welche zuerst als Iteratoren in CLU auftauchten.
  • Lua übernahm die mehrfache Zuweisung sowie das mehrfache zurückgeben von Funktionswerten von CLU.

Quellen