Grundprinzipien



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