Benutzer:Bin im Garten/A++
Die folgende Übersetzungsarbeit von en:A++ war ja dann wohl für die Tonne, da ich erst kurz vor Ende mitbekommen habe, dass der Artikel A++ (Programmiersprache) 2006 (Wikipedia:Löschkandidaten/6. Dezember 2006#A++ (Programmiersprache) (gelöscht) bereits schon mal wegen Irrelevanz gelöscht worden war. --Bin im Garten (Diskussion) 15:56, 24. Dez. 2013 (CET)
A++ (auch Aplusplus) ist eine sehr kleine und extrem minimalistische Programmiersprache die auf Lambda-Kalkül beruht. Ihr einziger Zweck ist es dem Neuling beim Erlernen von Programmiersprachen möglichst schnell und effizient das Wesentliche der Programmierung zu vermitteln. So sollen beim Lernenden in kurzer Zeit Denkmuster eingeübt werden, die ihn befähigen sich danach müheloser in die großen populären Programmiersprachen einzuarbeiten und in diesen in kurzer Zeit produktiv zu werden.
Der Name A++ ist C++ nachempfunden und soll Abstraktion + Referenz + Synthese bedeuten (kurz: ARS). A++ ist eine Minisprache, eine bewusst rudimentär gehaltene Programmiersprache, und ein Versuch aus der jüngeren Zeit (2002), um eine Lern-Programmiersprache zu schaffen, als effizientes Werkzeug für einen Einstieg und eine Grundlagenausbildung zum Programmieren.
Die in A++ umgesetzte Abstraktion + Referenz + Synthese ist eine Abstraktion aus dem Lambda-Kalkül, von dem sie die drei Basis-Operationen übernommen hat und diesen eine verallgemeinerte Bedeutung gibt. So wird eine Grundlage für die drei hauptsächlichen Programmierparadigmen geschaffen:
Als ARS-basiertes Programmieren besteht hauptsächlich aus der Anwendung von Mustern, die von Abstraktion + Referenz + Synthese abgeleitet sind und in jeder anderen Programmiersprache angewendet werden können.
Die drei Prinzipien von A++: Abstraktion plus Referenz plus Synthese - sind ihr einziger Inhalt. Diese drei Prinzipien stellen eine Verallgemeinerung der Grundoperationen des Lambda-Kalküls dar.
Geschichte
A++ ist aus dem Lambda-Kalkül von Alonzo Church entstanden.
A++ wurde 2002 mit dem Ziel entwickelt als Lerninstrument eingesetzt zu werden, und weniger als Programmiersprache zum Lösen von praktischen problemen. Die Entwickler Dr. Barry und Dr. Hamm entschlossen sich dazu, nachdem sie bei Kursen in den örtlichen mittleren Schulen ihre Technik häufig angewendet hatten.
A++ sollte ein effektives Werkzeug werden, um den Einsteiger mit den Kernthemen des Programmierens bekannt zu machen, sowie ihm Programmiermuster nahe zu bringen, die er dann auch in anderen Programmiersprachen einsetzen konnte, die reale Aufgaben lösen müssen. Das Kernthema beim Erlernender Programmierung mit A++ die logische Bewältigung des zu lösenden Problems, während der Aufwand für die Beherrschung und das Einhalten der Syntax, wie sonst beim komplexen Regelwerk von herkömmlichen Programmiersprachen, minimal ist.
Zweck
A++ ähnelt als Programmiersprache C++. Es gibt Interpreter in Scheme, Java, C, C++ und Python. Die Sprache bietet eine ideale Umgebung zum Erlernen der Programmiergrundlagen. Sie zwingt zur rigorosen Konfrontation mit dem Wesen von Programmiersprachen.
Konstitutive Prinzipien
- ARS (Basisoperationen)
- Abstraktion (etwas einen Namen geben; eine explizite Namensvergabe an jeder beliebigen Stelle in einem Programm erlaubt[Anmerkung 1])
- + Referenzen (Referenzparameter) (auf etwas mit seinem Namen Bezug nehmen)
- + Synthese (aus zwei oder mehr Dingen etwas Neues erzeugen)
- Sichtbarkeitsbereich von Variablen
- Closure[Anmerkung 2]
Unterstützte Programmierparadigmen
Folgende Programmierparadigmen weden von A++ unterstützt:
- Funktionale Programmierung (wird direkt unterstützt)
- (Schreiben von Ausdrücke, die ausgewertet werden)
- Objektorientierte Programmierung (wird direkt unterstützt)
- (Versendung von Nachrichten an Objekte)
- Imperative Programmierung (wird direkt unterstützt)
- (Scheiben von Anweisungen), einschließlich strukturierter Programmierung
- Logische Programmierung (wird nur indirekt unterstützt)
- (regelbasierte Programmierung)
Hauptmerkmale
- logische Abstraktion
- (true, false, if, not, and, or)
- numerische Abstraktion
- (natürliche Zahlen, Operationen: zerop [Anmerkung: eine LISP-Funktion, die auf das Argument Null ein true zurückgibt, ansonsten ein false]; Nachfolger [succ], Vorgänger [pred], Addition [add], Subtraktion [sub], Multiplikation [mult])
- relationale Abstraktion
- (Operationen: equalp, gtp, ltp, gep)
Anmerkungen
- ↑ Duch die explizite Namensvergabe an jeder beliebigen Stelle in einem Programm können in A++ alle drei Programmierparadigmen (funktionale, objektorientierte und imperative Programmierung) angewendet werden. Im Gegensatz dazu ist im Lambda-Kalkül ist nur eine implizite Namensvergabe im Zusammenhang mit einer Synthese von Lambda-Ausdrücken vorgesehen. Dadurch kann der Ausbau des Lambda-Kalküls immer nur in die funktionalen Programmiersprachen münden.
- ↑ Eine Funktion wird in A++ eine Closure genannt, wenn sie mit der sie umgebenden Menge der Daten und Funktionen fest verkoppelt ist. Closure hat also nichts mit Programm schließen (also beispielsweise Finalisierung und Destruktoren) zu tun. Vielmehr wird bei A++ unter Closure verstanden, dass die Lambda-Abstraktion (-Abstraktion) zum Zeitpunkt ihrer Erzeugung mit ihrem Kontext oder ihrer Umgebung verbunden wird. Das Ergebnis dieser Datenkapselung wird als Closure bezeichnet. Es handelt sich alse um eine Datenkapselung ähnlich wie in der Objektorientierte Programmierung. Außerdem wird alles, was mit zum textlichen Umfeld einer Funktion gehört automatisch in diese Verkapselung einbezogen.