Aldor

Aldor ist eine Programmiersprache, die hauptsächlich im Umfeld von Computeralgebrasystemen verwendet wird.

Geschichte

Aldor wurde seit 1985 am Thomas J. Watson Research Center unter Leitung von Stephen M. Watt entwickelt, ab Anfang der 1990er-Jahre in Kooperation mit der Numerical Algorithms Group. Anfangs wurde die Sprache als A# bezeichnet, diente zur Erweiterung von Axiom und wurde ab 1994[1] auch gemeinsam mit Axiom vertrieben. Daraus leitete sich ein weiterer zwischenzeitlicher Name, Axiom XL (Axiom Extension Language), ab.

1994 wurde der A#-Compiler erstmals der Öffentlichkeit vorgestellt.[2] Dieser Compiler übersetzte Aldor-Programme in eine Zwischensprache namens Foam, für die bereits ein Compiler existierte. Damit konnten sowohl eigenständige Programme als auch Programmbibliotheken erstellt werden. Zusätzlich konnte auch C- und LISP-Code generiert werden. Der Compiler selbst war überwiegend in C, zu einem kleinen Teil auch in A# geschrieben und war unter DOS, UNIX, OS/2 und weiteren Betriebssystemen lauffähig.

Seit 1999 kann Aldor auch zusammen mit C++ verwendet werden. Aldor-Programme können in C++ geschriebenen Code nutzen, außerdem erzeugt der Compiler auf Wunsch die nötigen Schnittstellen, um in Aldor geschriebene Teilprogramme aus einem C++-Programm heraus aufzurufen.[3]

Seit 2001 wird Aldor unabhängig von Axiom über eine eigene Webseite vertrieben. 2004 wurde eine Schnittstelle veröffentlicht, die es ermöglicht, Aldor auch mit Maple einzusetzen.[4]

An der University of Kent wurde Aldor-- entwickelt, eine funktionale Sprache, die auf einer Teilmenge der Sprache Aldor basiert.[5]

Spracheigenschaften

Die Syntax von Aldor ist durch Pascal beeinflusst. Optional wird wie bei Python die Einrückung berücksichtigt.

Aldor besitzt Merkmale sowohl imperativer und objektorientierter als auch funktionaler Sprache. Das Überladen von Funktionen und Operatoren wird unterstützt.

Typsystem

Das Typsystem ist statisch, implizierend, nicht typsicher und erlaubt die Verwendung von Typen und Funktionen als First-Class-Objekt. Wie viele andere funktionale Sprachen verwendet auch Aldor starke Typisierung. Für Computeralgebrasysteme ist starke Typisierung hingegen ungewöhnlich. Aufgrund des Mathematikbezugs der Sprache ist das Typsystem von Aldor komplexer als die Typsysteme anderer Sprachen.[6]

Aldor unterstützt auch abhängige Typisierung. Dabei handelt es sich um eine Form der Polymorphie, bei der Typen auch von Werten abhängig sein können. Möglich sind damit zum Beispiel Funktionen vom Typ (n:Integer) → Vector(n) → Double. Eine solche Funktion könnte avg sein, die eine Zahl n und einen Vektor mit n Elementen erhält und daraus den Durchschnitt der Elemente des Vektors berechnet.

Die abhängige Typisierung ist dadurch eingeschränkt, dass eine Auswertung der Werte während der Typprüfung nicht stattfindet. Das führt dazu, dass etwa Vector (2) und Vector (1+1) unterschiedliche Typen sind.[7] Abhängige Typisierung gilt heute noch als schwierig und mit statischer Typprüfung nur mit Einschränkungen kombinierbar.[8]

Lizenz

Aldor ist unter der Apache-Lizenz veröffentlicht und damit freie Software.

Beispiel

Hallo-Welt-Programm
#include "aldor"
#include "aldorio"

stdout << "Hello, world!" << newline;
99 Bottles of Beer
#include "aldor"
#include "aldorio"

import from Integer, String;

bob(n: Integer): String == {
    b: String := " bottle";

    if n ~= 1 then b := b + "s";
    b + " of beer";
}

main(): () == {
    n: Integer := 99;
    otw: String := " on the wall";

    -- refrain
    while n > 0 repeat {
        stdout << n << bob(n) << otw << ", " << n << bob(n) << "." << newline;
        stdout << "Take one down and pass it around, ";
        n := n - 1;
        if n > 0 then stdout << n;
        else stdout << "no more";
        stdout << bob(n) << otw << "." << newline;
        stdout << newline;
    }

    -- last verse
    stdout << "No more" << bob(n) << otw << ", no more" << bob(n) << "." << newline;
    stdout << "Go to the store and buy some more, ";
    n: Integer := 99;
    stdout << n << bob(n) << otw << "." << newline;
}

main();

Literatur

Weblinks

Einzelnachweise

  1. Michael Kaplan: Computeralgebra. Springer, Berlin/Heidelberg 2005, Seite 329
  2. Stephen M. Watt, Peter A. Broadbery, Samuel S. Dooley, Pietro Iglio, Scott C. Morrison, Jonathan M. Steinbach und Robert S. Sutor: A First Report on the A# Compiler (PDF; 194 kB). International Symposium on Symbolic and Algebraic Computation 1994
  3. Yannis Chicha, Florence Defaix und Stephen Watt: Interoperability of Languages with Generics, using Aldor, C++ and Java (PDF; 108 kB). Frisco Workshop 1999
  4. Cosmin Oancea und Stephen M. Watt: A Framework for Using Aldor Libraries with Maple (PDF; 83 kB). Actas de los Encuentros de Algebra Computacional y Aplicaciones 2004
  5. Simon Thompson und Leonid Timochouk: The Aldor-- Language. Computing Laboratory, University of Kent at Canterbury
  6. Erik Poll und Simon Thompson: Integrating Computer Algebra and Reasoning through the Type System of Aldor (PDF; 337 kB). 3rd International Workshop on Frontiers of Combining Systems 2000
  7. Erik Poll und Simon Thompson: Adding the axioms to Axiom: Towards a system of automated reasoning in Aldor. Computing Laboratory, University of Kent 1998
  8. Peter Pepper und Petra Hofstedt: Funktionale Programmierung. Springer, Berlin/Heidelberg 2006, Seite 152