Eiffel
Eiffel logo
Basisdaten
Erscheinungsjahr: 1985
Designer: Bertrand Meyer
Entwickler: Bertrand Meyer und Eiffel Software
Aktuelle Version 22.05[1] (31. Mai 2022)
Standardisierungen: Ecma, ISO/IEC
Beeinflusst von: Ada, ALGOL, Simula
Beeinflusste: Ruby
Betriebssystem: plattformunabhängig
Lizenz: GPL

Eiffel ist eine universelle, rein objektorientierte Programmiersprache und wurde 1985 von dem französischen Informatiker Bertrand Meyer und seiner Firma Interactive Software Engineering Inc. (Goleta, Kalifornien) als Alternative zu C++ entworfen. Ursprünglich war sie nur für den Gebrauch durch die eigene Firma gedacht.

Die Programmiersprache

Der Name Eiffel, eine Reverenz an Gustave Eiffel, Erbauer des Eiffelturms und einen der großen Ingenieure des 19. Jahrhunderts, dokumentiert den Anspruch, eine Programmiersprache geschaffen zu haben, mit der Softwareentwicklung gemäß den Standards des Ingenieurwesens ermöglicht wird, da sie die Erkenntnisse des Software Engineering konsequent umsetzt.

Es handelt sich im Unterschied zu C++ um einen vollständig neuen Entwurf, der auf keiner älteren Sprache aufbaut. Erklärtes Ziel der Entwicklung ist es, mit Eiffel ein Werkzeug zu schaffen, um damit umfangreiche Software aus zuverlässigen, wiederverwendbaren sowie leicht wart- und testbaren Modulen zu konstruieren. Dazu werden potenziell riskante Möglichkeiten des Programmierens (manuelle Speicherverwaltung, globale Variablen, undisziplinierte Typumwandlungen, direkte Zeigermanipulation, Goto usw.) weitgehend ausgeschlossen, Optimierungen (speziell die Ausführungsgeschwindigkeit betreffend, etwa Inline-Ersetzung) an den Compiler delegiert. Der konsequent objektorientierte Ansatz für das Design im Großen wird ergänzt durch (eher strikte) Anwendung der strukturierten Programmierung im Detail, also auf der Ebene der einzelnen Routine (in der Eiffel-Terminologie: des einzelnen „feature“).

Die Syntax ist beeinflusst von Ada und der ALGOL-Sprachfamilie (Algol, Pascal, Modula). Sie soll vor allem leicht lesbar sein.

Die Sprachdefinition von Eiffel ist Public Domain und steht unter der Kontrolle von Nonprofit International Consortium for Eiffel (NICE); diese Organisation hat das Recht, jedes Entwicklungswerkzeug bezüglich der Konformität zur Sprachdefinition zu validieren, bevor es den Namen Eiffel tragen darf.

Am 21. Juni 2005 wurde in Amsterdam in der 89. Allgemeinen Versammlung der ECMA der Standard ECMA-367 Eiffel Analysis, Design and Programming Language verabschiedet. Er ist die aktuell gültige Spezifikation der Programmiersprache, nun Standard Eiffel genannt. 2006 übernahmen ISO und IEC den Standard.[2]

Eigenschaften

Eine Spezialität von Eiffel ist die Unterstützung von Design by Contract bei der Entwicklung. Dazu stellt die Sprache differenzierte Mittel (Vor- und Nachbedingungen sowie Invarianten) bereit, um Klassen, ihre einzelnen Funktionen sowie ganze Klassenhierarchien auf systematische Weise mit (abschaltbaren) Zusicherungen (Assertions) auf Korrektheit der Abläufe und Zustände während der Laufzeit zu überwachen.

Sicherheit und Einfachheit

Aufbau eines Eiffel-Programms

Ein Eiffel-Programm besteht nur aus Klassen. Jede Klasse ist ein eigenes Modul. Bei der Kompilierung wird eine Root-Klasse festgelegt, von der eine Instanz beim Starten des Programms erzeugt wird.

Beispielprogramm in Eiffel

class HELLO                       -- Liberty-Eiffel
create
	make
feature
        make is
		do
			print("Hello World.%N")
		end
end

class HELLO                       -- ECMA-Eiffel
create
	make
feature
        make
		do
			print("Hello World.%N")
		end
end

Erläuterung

Mit class HELLO wird die Klasse HELLO angelegt. Die create-Klausel definiert die make-Methode als Konstruktor. In diesem Beispiel entspricht make der main- Methode etwa von Java. Welche Klasse die Rootklasse ist, und welche Methode dieser Klasse zuerst aufgerufen werden soll, wird im Konfigurationsfile (eiffel configuration file *.ecf) des Projekts definiert. Ohne einen Konstruktor ist es nicht möglich, eine Instanz der Klasse zu erzeugen.

Anwendungsgebiete

Als Anwendungsgebiete, für die sich Eiffel besonders anbietet, werden genannt:

Compiler

EiffelStudio Version 7.2

Der verbreitetste Compiler ist EiffelStudio von der Firma Eiffel Software des Erfinders der Sprache, Bertrand Meyer. EiffelStudio wird seit April 2006 außerdem unter der GPL lizenziert (duales Lizenzsystem).

SmartEiffel (ehemals SmallEiffel) war einst einer der verbreitetsten Open-Source-Compiler für Eiffel. Nachdem sich die Entwickler entschieden die Kompatibilität mit Eiffel aufzugeben und in eine andere Richtung zu gehen, wurde das Projekt mittlerweile eingestellt.

Im November 2013 wurde die erste offizielle Version des SmartEiffel Nachfolgers Liberty-Eiffel freigegeben, neben EiffelStudio und dem noch in Entwicklung befindlichen Gobo Eiffel Compiler (aus der Gobo Klassenbibliothek) ist dies der letzte noch aktiv entwickelte Compiler für Eiffel.[3]

Die Entwicklung der Compiler Visual Eiffel und tecomp[4] wurde eingestellt.

Eiffel konnte bis heute nicht die Verbreitung von C++ oder Java erlangen. Es steht auch keine der großen Software- oder IT-Firmen hinter Eiffel (wie das z. B. bei Java oder .NET der Fall ist).

Der Quelltext wird gewöhnlich in den Maschinencode der Zielmaschine kompiliert. Dies geschieht über den Umweg der Umwandlung der Eiffel-Quellen in C-Code, mit Ausnahme von Visual Eiffel, das direkt x86-Code für Windows und Linux generiert. Der so erzeugte Maschinencode ist je nach Anwendung vergleichbar mit entsprechendem C- bzw. C++-Code.[5]

Literatur

Einzelnachweise

  1. EiffelStudio 22.05 is available!. (abgerufen am 19. Dezember 2022).
  2. ISO/IEC 25436:2006 Eiffel: Analysis, Design and Programming Language. 2006, abgerufen am 24. Dezember 2023 (englisch).
  3. Liberty-Eiffel
  4. tecomp
  5. Diplomarbeit von Peter Haefliger an ETH Zürich (Memento des Originals vom 6. März 2016 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/se.inf.ethz.ch (PDF; 723 kB)