Februar 2008 Archives
29. 02. 2008, 02.11 Uhr
AWL (Programmiersprache) — ehemals in Wikipedia, der freien Enzyklopädie
| AWL | |
|---|---|
| {{{Logo}}} |
|
| Basisdaten | |
| Paradigmen: | funktional, prozedural, objektorientiert |
| Erscheinungsjahr: | 2006 |
| Designer: | |
| Entwickler: | D. G. Gaev |
| Aktuelle Version: | 0.5.6 () |
| Typisierung: | typenlos |
| wichtige Implementierungen: | |
| Dialekte: | |
| Einflüsse: | LISP, Scheme, Perl, Ruby, APL |
| Beeinflusste: | |
| Betriebssystem: | Microsoft Windows |
| Lizenz: | |
| Website: | russisch: www.awl-project.narod.ru, englisch: www.awl-project.narod.ru/index-en.htm |
AWL (engl. Alternative Web Language, zu deutsch etwa „Alternative Internetprogrammiersprache") ist eine neue, experimentelle Programmiersprache mit vielen Einsatzmöglichkeiten. Sie soll nicht nur als Skriptsprache und zur Anwendungsprogrammierung dienen, sondern auch viele Internettechniken ersetzen können: Durch Standard-Spracherweiterungen und Bibliotheken ist AWL für Textauszeichnung (wie HTML) ebenso geeignet wie für Datenstrukturierung (XML), Formatvorlagen und Makros (CSS), eingebettete Vektorgraphiken (SVG) und die Programmierung des Verhaltens von Netzseiten (JScript/JavaScript).
Kurzbeschreibung
Man kann AWL eine ,,Mehrparadigmensprache" nennen, da es funktionale, prozedurale und objektorientierte Elemente bietet. Zu den wichtigsten Vorläufern von AWL gehören LISP, Scheme, Perl und Ruby, sogar APL (mehrdimensionale Datenfelder) und SNOBOL. Wie in LISP und vielen modernen funktionalen Sprachen sind Listen das wichtigste Mittel zur Datenstrukturierung. Der primäre Auswertungsmechanismus sind Funktoren, welche die Semantik von eingebauten Funktionen, Operatoren und den Anweisungenen traditioneller Programmiersprachen miteinander verbinden. AWL ist eine Interpretersprache, allerdings werden die Programme vorkompiliert und alle Namensbindungen finden zur Kompilierzeit statt, was den Programmlauf ziemlich effizient macht. Als schwach typisierte Sprache kommt AWL ohne Deklarationen aus. (Jedoch haben die Argumente der meisten eingebauten Funktionen streng definierte Typen; für die zur Laufzeit auf explizite Anweisung Konvertierungen zur Verfügung stehen.)
Die Syntax ist vielfältig: Es gibt viele ein- und zweistellige Operatoren auf Skalaren (Zahlen und Zeichenketten) und Listen, die intern größtenteils in Aufrufe eingebauter Funktoren übersetzt werden. Beispielsweise wird der Ausdruck
X*Y + Y*Z + Z*X;
intern durch
add(add(mul(X, Y), mul(Y, Z)), mul(Z, X));
repräsentiert.
Konditionalausdrücke wie
A < B? (B - A) : (A - B);
ersetzen einfach:
if(lt(A, B), sub(B, A), sub(A, B));
Und so weiter.
Es gibt in AWL keine Schlüsselwörter, bloß die Namen der Standard-Funktoren. Insofern ist AWL eine vollkommen internationale Sprache, die sich einfach lokalisiseren lässt, indem man den Funktoren andere Namen gibt.
Die Definition neuer Funktoren ist eine der Hauptmethoden zur Spracherweiterung. Hier zum Beispiel eine Definition der Fakultät:
! fact(n) = n ? n*fact(n-1) : 1;
Und hier die Ackermannfunktion:
! ack(m n) = m ? (ack(m-1, n ? ack(m, n-1) : 1)) : n+1;
Ein etwas komplizierteres Beispiel, die Lösung des Türme-von-Hanoi-Problems:
! hanoi_solve(N) = {
! move_disks(n from to via) =
n ? {
count = move_disks(n-1, [from via to]);
<: ["\t#" n ": " from " => " to "\n"];
++ count;
count + move_disks(n-1, [via to from])
} : 0;
<: ["\nTotal: " N " disks...\n\n"];
count = move_disks(N, ['A' 'B' 'C']);
<: ["\nProblem solved in: " count " steps.\n"]
};
Eine weitere Möglichkeit zur Datenstrukturierung sind Objekte. Jedes AWL-Objekt ist Instanz einer bestimmten Klasse. Klassendefinitionen haben viel mit Funktordefinitionen gemein:
!! Vector3D (x y z) {
! length = sqr(x*x + y*y + z*z),
! product (A B) = Vector3D(A.y*B.z – B.y*A.z, A.z*B.x – B.z*A.x, A.x*B.y- B.x*A.y)
};
Wie aus diesem Beispiel hervorgeht, ist ein Klassenname selbst eine Art Funktor und bietet somit eine Standardmethode zur Erschaffung neuer Klasseninstanzen. Weniger simple Klassendefinitionen können Basisklassen (einzelne; Mehrfachvererbung wird vom Entwickler erwogen), Konstruktoren und Destruktoren, sowie virtuelle Funktoren enthalten. Eine ungewöhnliche Eigenschaft von AWL ist die temporäre Bindung an Klasseninstanzen, deretwegen Ausdrücke wie
myvector.(x+y+z);
völlig korrekt sind.
An weiteren Datenstrukturen gibt es mehrdimensionale Datenfelder, Streuwerttabellen mit beliebigen Mengen von Schlüsseln und Werten, sowie Reguläre Ausdrücke.
Weblinks