Februar 2008 Archives

29. 02. 2008, 02.11 Uhr

AWL (Programmiersprache) — ehemals in Wikipedia, der freien Enzyklopädie

Folgende von mir angefertigte Übersetzung eines nicht mehr existenten Artikels der englischen Wikipädie ist leider gleichfalls als „irrelevant“ aus der deutschen entfernt worden. Daher sei ihr in diesem Artikel ein neuer Platz zum Leben gegönnt. Zum Thema: AWL scheint mir eine interessante Programmiersprache zu sein, oder jedenfalls zu werden. Ich bemühe mich sogar in diesen Tagen, Wochen und Monaten – halbherzig, zugegeben –, den in C++ geschriebenen zugehörigen Interpreter nach Linux zu portieren (wobei mir übrigens Hilfe sehr willkommen wäre). Ein Andermal sicher mehr hiervon.

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

Posted by Grinsekater | Permanenter Link | Kategorien: Virtuelles Sein |

21. 02. 2008, 08.01 Uhr

Hast du mal ’ne Zigarette?

Wenn du mir Feuer gibst, rauch ich sie für dich.


(Entstanden bei einer Schauspielimpro zum Genre „Western“.)

Posted by Grinsekater | Permanenter Link | Kategorien: In Szene, Dichtung und Blähung |