InhaltWeiter

7. Programmiersprachen

Während jede Programmiersprache für die Forschung auf dem Gebiet der Künstlichen Intelligenz/ des Künstlichen Lebens eingesetzt werden kann, sind hier mehr die besonders prädestinierten, wenn nicht gar extra dafür geschaffenen Programmiersprachen gemeint.

Allegro CL

Dies ist die freie Linux Version der Lisp-Entwicklungsumgebung von Franz Inc. Man kann es sich herunterladen oder per Post kostenlos schicken lassen (man muß nicht einmal die Versandkosten bezahlen). Es wird im allgemeinen als eine der besseren Lisp-Plattformen angesehen.

APRIL

APRIL ist eine symbolische Programmiersprache, die für den Entwurf mobiler, verteilter und agentenbasierter Systeme besonders in einer Internet-Umgebung entwickelt wurde. Sie hat solch moderne Merkmale wie z. B. eine Makro- Subsprache, asynchrones Senden und Empfangen von Nachrichten, Code-Mobilität, Mustervergleich, Funktionen höherer Ordnung und strenge Typen. Die Sprache wurde zu Bytecode compiliert und kann dann von der APRIL-Laufzeitengine interpretiert werden. APRIL benötigt ein vorinstalliertes InterAgent Communications Model (ICM), damit es installiert werden kann. [ICM findet man auf der selben Seite. -- d. Hrsg.]

Ciao Prolog

Ciao ist ein komplettes Prologsystem, das mit einem neuartigen modularen Design aufwartet, welches sowohl die Beschränkung als auch die Erweiterung der Sprache gestattet. Es kann auf die Stufe von ISO-Prolog gestellt werden. Ciao- Erweiterungen enthalten in der aktuellen Version Merkmalsterme (Datensätze), Funktionen höherer Ordnung, Constraints, Objekte, persistente Prädikate, eine gute Basis für verteilte Ausführung (Agenten) und Konkurrenz. Die Bibliotheken unterstützen auch WWW-Programmierung, Sockets und externe Schnittstellen (C, Java, TCL/Tk, Relationale Datenbanken usw.). Eine Emacs-basierte Umgebung, ein separater Compiler und eine Toplevel-Shell werden mitgeliefert.

DHARMI

DHARMI ist eine hochgradig räumliche, Bastlerspielzeug-ähnliche Sprache, deren Komponenten transparent administriert werden können durch einen Habitat genannten Hintergrundprozeß. Wie der Name schon unterstellt, wurde die Sprache entwickelt, um Prototypen zu modellieren und »lebende« Daten zu handhaben. Dies wird erreicht durch eine Verwaschung der Grenzen zwischen Quellcode, Programm und Daten.

ECoLisp

ECoLisp (Embeddable Common Lisp) ist eine Implementierung von Common Lisp, die entworfen wurde, um in auf C basierende Anwendungen eingebettet werden zu können. ECL verwendet die Standardaufrufkonventionen für C aus Lisp-Funktionen, was es C-Programmen ermöglicht, Lisp-Funktionen aufzurufen und auch umgekehrt C- Funktionen aus Lisp. Es wird keine zusätzliche externe Schnittstelle benötigt: die Daten können zwischen C und Lisp ohne Konvertierung ausgetauscht werden. ECL basiert auf auf einer allgemeinen Laufzeitunterstützung (Common Runtime Support - CRS), die grundlegende Möglichkeiten zur Speicherverwaltung unterstützt, zum dynamischen Laden und der Ausgabe binärer Bilder. Desweiteren unterstützt ECL auch mehrere Ausführungsthreads. Die CRS ist in eine Bibliothek eingebaut, die mit dem Anwendungscode gelinkt werden kann. ECL ist modular: Hauptmodule sind die Programmentwicklungswerkzeuge (Toplevel, Debugger, Trace, Stepper), der Compiler und CLOS. Eine native Implementierung von CLOS ist in ECL verfügbar: man kann ECL mit oder ohne ECL konfigurieren. Eine Laufzeitversion von ECL kann einfach aus den Modulen erstellt werden, die für die Anwendung nötig sind. Der ECL-Compiler compiliert von Lisp nach C und ruft dann den GCC-Compiler zum Erstellen der ausführbaren Dateien auf.

ESTEREL

Esterel ist sowohl eine für die Programmierung reaktiver Systeme bestimmte Programmiersprache als auch ein Compiler, der Esterel-Programme in finite Zustandsautomaten übersetzt. Insbesondere ist es passend für die Programmierung reaktiver Systeme, einschließlich Echtzeit-Systeme und Steuerautomaten.

Nur die ausführbare Datei ist für den Compiler verfügbar. :P

Gödel

Gödel ist eine deklarative Allzweck-Programmiersprache aus der Familie der Logischen Programmiersprachen. Es ist eine streng typisierte Sprache, das Typensystem basiert auf wohlgeordneter Logik mit parametrischen Polymorphismen. Es hat ein Modulsystem. Gödel unterstützt Ganzzahlen und Rationale Zahlen mit unendlicher Genauigkeit und auch Fließkommazahlen. Es kann Constraints über finite Integer-Domänen lösen und auch lineare rationale Constraints. Es unterstützt die Verarbeitung von finiten Mengen. Es hat auch flexible Berechnungsregeln und einen »Schneideoperator«, der die Ausführung konkurrenter Logischer Programmiersprachen verallgemeinert. Beachtenswert sind auch Gödels meta-logische Fähigkeiten, die eine wichtigige Unterstützung für Metaprogramme bieten, die sich mit Analyse, Transformation, Compilierung, Überprüfung, dem Test usw. beschäftigen.

CLisp (Lisp)

CLisp ist eine Common Lisp-Implementation von Bruno Haible und Michael Stoll. Sie unterstützt vorrangig das Lisp, das unter Common LISP: The Language (2nd edition) beschrieben wird und den ANSI Common Lisp-Standard. CLisp beinhaltet einen Interpreter, einen Byte-Compiler, eine große Untermenge von CLOS (Object-Orientiertes Lisp), eine fremdsprachige Nutzeroberfläche und für manche Plattformen auch einen Editor.

Die Sprache der Nutzeroberfläche (Englisch, Deutsch, Französisch) wird zur Laufzeit ausgewählt. Die Hauptpakete, die in CLisp laufen, enthalten CLX & Garnet. CLisp benötigt nur 2 MB Speicher.

CMU Common Lisp

CMU Common Lisp ist eine Public Domain-Umgebung eines »industriell starken« Common Lisp. Viele der X3j13-Änderungen sind in CMU CL eingeflossen. Wo das möglich war, ist das so transparent gemacht worden, daß man entweder CLtL1 oder das bevorzugte ANSI CL verwenden kann. Die für den Nutzer vielleicht interessantesten neuen Merkmale sind SETF-Funktionen, LOOP und das WITH-COMPILATION-UNIT-Makro.

GCL (Lisp)

GNU Common Lisp (GCL) besitzt einen Compiler und Interpreter für Common Lisp. Es wird auch als Kyoto Common Lisp bezeichnet. Es ist sehr portabel und extrem effizient über eine breite Palette von Anwendungen. Es kann gut mit kommerziellen Lisp-Versionen auf verschiedenen großen Theorembeweis- und symbolischen algebraischen Systemen mithalten. Es unterstützt die CLtL1- Spezifikation, tendiert aber mehr zur empfohlenen ANSI-Definition. GCL compiliert nach C und verwendet dann die nativen optimierenden C-Compiler (z. B. GCC). Eine Funktion mit einer festen Anzahl von Argumenten wird in eine C- Funktion mit derselben Anzahl von Argumenten transformiert. Sie liefert einen Wert zurück, so daß GCL mit solchen Aufrufen sehr effizient sein kann. GCL hat einen konservativen Garbage Collector, der dem C-Compiler große Freiräume läßt, die Lisp-Werte in beliebige Register einzuordnen.

GCL verfügt über einen Quellebenen-Debugger für den interpretierten Lisp-Code. Der Quellcode wird dabei in einem Emacs-Fenster angezeigt. Seine Profiling-Tools (basierend auf den C-Werkzeugen) zählen die Funktionsaufrufe und die Zeit, die in jede Funktion investiert wird.

GNU Prolog

GNU Prolog ist ein von Daniel Diaz entwickelter freier Prolog-Compiler mit beschränktem Lösen über finite Domänen.

GNU Prolog akzeptiert Prolog+constraint-Programme und erzeugt native ausführbare Dateien (wie gcc aus einer C-Quelle). Die resultierende ausführbare Datei ist für sich lauffähig. Die Größe dieser Datei kann ziemlich klein sein, da GNU- Prolog es vermeiden kann, den Code der meisten ungenutzten eingebauten Prädikate zu verlinken. Die Leistungsfähigkeit von GNU-Prolog ist (verglichen mit kommerziellen Systemen) sehr groß.

Neben der Compilierung zu nativem Code bietet GNU-Prolog auch einen klassischen interaktiven (Toplevel-)Interpreter mit einem Debugger. Der Prolog-Teil entspricht dem ISO-Standard für Prolog mit vielen nützlichen und praktischen Erweiterungen (globale Variablen, Betriebssystem-Schnittstelle, Sockets, ...).

GNU-Prolog enthält auch einen effizienten Constraint-Solver über finite Domänen (FD). Dies öffnet die logische Programmierung mit Constraints für den Nutzer, der damit die Mächtigkeit der Constraints mit der Deklarativität logischer Programmierung verbinden kann.

Mercury

Mercury ist eine neue, voll deklarative logische Programiersprache. Ähnlich Prolog und anderen bereits existierenden logischen Programmiersprachen ist es eine Programmiersprache auf sehr hoher Ebene, die es dem Programmierer gestattet, sich mehr auf das Problem zu konzentrieren anstatt auf Details wie z. B. die Speicherverwaltung. Im Gegensatz zu Prolog, das mehr explorativ orientiert ist, wurde Mercury von Programmierteams für die Konstruktion großer, zuverlässiger und effizienter Softwaresysteme entworfen. Also Folge davon ist es ein Unterschied, ob man mit Prolog oder in Mercury programmiert.

Mozart

Das Mozart-System stellt den Stand der Technik in zweierlei Gebieten dar: offenes verteiltes Computing und constraint-basiertes Schließen. Mozart beinhaltet Oz, eine konkurrierende objektorientierte Sprache mit Datenfluß- Synchronisation. Oz kombiniert konkurrentes und verteiltes Programmieren mit logischem constraint-basiertem Schließen. Dadurch wird es prädestiniert für den Einsatz von Multiagentensystemen. Mozart ist eine ideale Plattform sowohl für verteilte Allzweck-Anwendungen als auch für komplexere Probleme, die ausgeklügelte Optimierungs- und Schlußfolgerungs-Fähigkeiten verlangen. Wir haben Anwendungen für Zeiteinteilung und Stundenplanung, Anordnung und Konfiguration, natürlicher Sprache und Wissensrepräsentation, Multiagentensysteme und komplizierte Hilfswerkzeuge entwickelt.

SWI Prolog

SWI ist eine freie Prolog-Version in der Familie des Edinburgh-Prolog (dadurch wird es Quintus und vielen anderen Versionen sehr ähnlich). Es besitzt: eine große Bibliothek mit eingebauten Prädikaten, ein Modulsystem, Garbage collection, eine Zweiwege-Schnittstelle zu C und viele andere Merkmale. Es ist als Sprache für Lernzwecke gedacht, deswegen ist der compilierte Code nicht der schnellste. Seine Ähnlichkeit zu Quintus erlaubt eine einfache Portierung.

XPCE ist frei verfügbar als ausführbare Datei für die Linux-Version von SWI- Prolog. XPCE ist eine objektorientierte Entwicklungsoberfläche, die auf X- Windows aufsetzt.

Kali Scheme

Kali Scheme ist eine verteilte Implementation von Scheme, die eine effiziente Übertragung von Objekten höherer Ordnung gestattet, wie z. B. Abschlüsse und Fortsetzungen (Continuations). Die Integration der verteilten Kommunikationsmöglichkeiten in einer höheren Programmiersprache erzeugt eine Anzahl neuer Abstraktionen und Paradigmen für verteiltes Computing. Dazwischen sind nutzerdefinierte lastbalancierte und Migrationszustände für Threads, inkrementiell gebundene verteilte Berechnungen, Agenten und parametrisierte Client-Server-Anwendungen. Kali Scheme unterstützt Konkurrenz und Kommunikation unter Verwendung erstklassiger Prozeduren und Fortsetzungen. Es integriert Prozeduren und Fortsetzungen in ein nachrichtenbasiertes verteiltes System, das es jedem Scheme-Objekt (einschließlich Codevektoren) gestattet, in einer Nachricht gesendet und empfangen zu werden.

RScheme

RScheme ist eine objektorientierte, erweiterte Version des Scheme-Dialektes von Lisp. RScheme ist frei verbreitbar und bietet eine akzeptable Leistung trotz der außergewöhnlichen Portabilität. RScheme kann nach C compiliert werden, und dieser Zwischencode kann mit einem normalen C-Compiler in Maschinencode übersetzt werden. Standardmäßig wird allerdings ein Bytecode erzeugt, der von einer virtuellen Maschine (Laufzeitumgebung) interpretiert wird. Dies stellt sicher, daß die Compilierung schnell ist und sich die Größe in Grenzen hält. Wir empfehlen im allgemeinen die Verwendung der (standardmäßigen) Bytecode- Erstellung und nur die zeitkritischen Anwendungen in Maschinencode umzuwandeln. Dies gestattet eine gutes Verhältnis von Platz und Zeit (nähere Informationen auf unserer Webseite).

Scheme 48

Scheme 48 ist eine Scheme-Implementierung, die auf der Architektur einer virtuellen Maschine aufsetzt. Scheme 48 wurde entworfen um klar, flexibel, zuverlässig und schnelll zu sein. Es sollte einfach auf 32-bit-Umgebungen portierbar sein, die POSIX- und ANSI-C unterstützen. Zusätzlich zu den normalen eingebauten Prozeduren und einer Entwicklungsumgebung enthält die Softwarebibliothek Unterstützung für hygienische Makros (wie im Revised^4 Scheme-Bericht beschrieben), Multitasking, Datensätze, Ausnahmebehandlung, Hash- Tabellen, Felder, schwache Pointer und FORMAT. Scheme 48 implementiert und nutzt ein experimentelles Modulsystem, das von Standard ML und Scheme Xerox abgeleitet wurde. Die Entwicklungsumgebung unterstützt interaktive Änderungen an den Modulen und Schnittstellen.

SCM (Scheme)

SCM entspricht dem Revised^4 Report des Algorithmischen Sprachenschemas und der IEEE P1178-Spezifikation. SCM wurde in C geschrieben. Es verwendet die folgenden Hilfsprogramme (die alle auf der FTP-Seite verfügbar sind):

Shift

Shift ist eine Programmiersprache zur Beschreibung dynamischer Netze hybrider Automaten. Diese Systeme bestehen aus Komponenten, die erzeugt, miteinander verbunden und zerstört werden können wie sich das System gerade entwickelt. Die Komponenten zeigen ein hybrides Verhalten, das aus zeitkontinuierlichen Phasen besteht, die durch diskret eintretende Transitionen unterbrochen werden. Die Komponenten können sich unabhängig voneinander entwickeln oder über ihre Eingaben, Ausgaben und exportierten Ereignisse miteinander interagieren. Das Interaktionsnetzwerk kann sich auch selbst entwickeln.

YAP Prolog

YAP ist ein hochperformanter Prolog-Compiler, der an der LIACC/Universidade do Porto entwickelt wurde. Seine Prolog-Engine basiert auf der WAM (Warren Abstract Machine) mit verschiedenen Optimierungen für bessere Leistung. YAP folgt der Edinburgh-Tradition und ist weitgehend kompatibel mit dem DEC-10-Prolog, Quintus Prolog und besonders mit C-Prolog. Mit den neueren Versionen von YAP werden folgende Ziele verfolgt:


InhaltWeiter