1. Metaebene
- Klarheit: Die Sprache soll klar (d. h. einfach und nichtkryptisch) und arm an Konstrukten sein.
- Angemessenheit: Problematische Konstrukte dürfen nicht unscheinbar sein
- Alternativlosigkeit: Alle Alternativen zu dem, wie es ist, sind deutlich schlechter
- Attraktivität: Eine Programmiersprache ist für Menschen, nicht für Computer (Sonst würde man Maschinensprache verwenden). Es muß Spaß machen, Programme in "Reni" zu schreiben, zu lesen und zu warten.
- Universalität: "Reni" ist geeignet für alle Bereiche der Programmierung. Von der Anwendungsprogrammierung über die Numerik bis zur Treiberprogrammierung, aber auch zur formalen Beschreibung von Algorithmen.
- Minimalistisch: Es gibt kein Sprachfeature, dass auch durch eine Bibliotheksfunktion erreicht werden könnte.
- Fair: Alle Sprachfeature sollten auch für die "Reni"-Programmiererin zur Verfügung stehen.
2. Sprachebene
- Streng getypt: Es gibt einen Compiler, der prüft, ob mit den Objekten nur das gemacht wird, was zur Compilerzeit definiert ist.
- Streng generisch: Eine Deklaration sieht auf den ersten Blick so aus, wie in einer schwach getypten Sprache. Tatsächlich handelt es sich aber um eine Menge von streng getypten Deklarationen.
- Groß- und Kleinschreibung ist relevant
- Es gibt Zeilenendenkommentare, geklammerte Kommentare und getaggte Kommentare
- Objektorientiert: Es gibt Strukturen mit Funktionen, Vererbung, Polymorphie, Konstruktoren, Destruktoren und Kopiervorschriften.
- schwach Funktional: Der Lambda-Kalkül hat eine zentrale Bedeutung, aber es gibt auch Wertzuweisungen
- Es gibt Getter, Setter und implizite Funktionen ("Properties"),
- Makros: Es gibt sie, aber die Makrosprache ist auch "Reni". Die Typsicherheit ist gewährleistet.
- Strukturen, Folgen von Anweisungen und Parameterlisten werden durch die selbe Konstruktion repräsentiert
3. Compilerbau-Ebene
- Der Compiler gliedert sich in Scanner, Parser, Syntaxtreevisitor und Codegenerator.
- Der Scanner ist so simpel, dass sich LEX nicht lohnt.
- Der Parser wird ausschließlich durch eine Prioritätstabelle gesteuert.
- Der Syntaxtreevisitor ist das Herzstück des Compilers. Stark vereinfacht betrachtet, wird dabei durch den Syntaxbaum gewandert und dabei der Codegenerator angesteuert.
- Der Codegenerator erzeugt momentan Pseudocode, der C#-compilierbar ist.
- Fehlerbehandlung ist momentan noch komplett offen.
Keine Kommentare:
Kommentar veröffentlichen