Ernie-Script (II/II)

Heute gibt es wieder einen Download. Dabei handelt es sich um eine Testanwendung zum Ausprobieren der neu entwickelten Skriptsprache Ernie-Script: Hier bin ich! Yeah, Baby! Ernie-Script vereint mehrere Eigenschaften verschiedener Sprachen. Im Allgemeinen folgt die Sprache der C++-Syntax. Zuweisungen ähneln aber eher denen, wie sie mit dem :=-Operator in Pascal zu finden sind. Die Konkatenation von Strings über zwei Punkte (..) mag der ein oder andere von Lua kennen. Um nur ein paar Aspekte zu nennen.

Beim Start der Anwendung öffnet sich ein Windows-Konsolen-Fenster mit etwas Text und einer Eingabeaufforderung. Wenn man jetzt zum Beispiel who; eintippt, wird der gesamte Inhalt des globalen Namensraums ausgegeben:

Allriggedy Right und Tiggedy Tight! Da sind ja bereits zwei Objekte std und math vom Typ Table. Bei denen handelt es sich um vordefinierte Funktionsbibliotheken (auf C++-Basis). Die Anweisung std.out( "Hello World!" ); ruft nun zum Beispiel die Funktion out der Bibliothek std auf. Bei dieser Anweisung handelt es sich dann auch schon um ein vollwertiges Hello-World-Skript. Neben der soeben angesprochenen Funktion beinhaltet jene “Standardbibliothek” bislang keine weiteren Features von Bedeutung. Die bisherigen Funktionen der Mathebibliothek sind die folgenden:

abs ceil floor exp log
log10 fmod sin cos tan
sinh cosh tanh asin acos
atan atan2 sqrt pow

Es besteht natürlich auch die Möglichkeit, eigene, auf Ernie-Script basierende Funktionen zu definieren. Im folgenden Beispiel wird eine Funktion zur Berechnung der Quadratwurzel definiert, dessen entscheidenden Code wir bereits bei der Vorstellung des Syntaxbaums und des Builders kennen gelernt haben:

Das Skript zur Definition von my_sqrt erstreckt sich über mehrere Zeilen. Hierfür mussten am Zeilenende jeweils drei Punkte eingefügt werden, sofern das Skriptende noch nicht erreicht war. Das ist nicht Ernie-Script-spezifisch sondern ein Feature der Testanwendung, bei der es sich schließlich nur um eine einfache Konsolenanwendung und nicht um eine volle IDE mit komfortablem Texteditor handelt. (Aus Sicht von Ernie-Script existieren Zeilenumbrüche oder Sachen dieser Art sowieso nicht.) Ein kleiner Test der Funktion my_sqrt zeigt ihr korrektes Verhalten (zumindest für die Zahl 2, hahaha).

Da die vordefinierten Bibliotheken nix weiter als normale Ernie-Script-Objekte vom Typ Table sind, können sie auch nachträglich noch geändert werden. So wird im folgenden Beispiel der Mathebibliothek eine weitere Funktion round hinzugefügt:

Geil, wie Ernie-Script nun mal ist, sind rekursive Funktionsaufrufe natürlich auch kein Problem. Als Beispiel bietet sich hierfür natürlich die Fibonacci-Funktion an, die auch direkt getestet wird. Geil:

Die Skriptsprache hat an einigen Stellen noch ein paar Macken. Insbesondere sind einige Fehlermeldungen noch nicht intuitiv genug auf entsprechende Fehler (Ernies) abgestimmt. Ferner ist der Sprachumfang noch deutlich erweiterbar. Wie ich bereits angesprochen hatte, gibt es noch keine Möglichkeit zur expliziten Deklaration von lokalen bzw. globalen Variablen — Bitoperationen sind ebenfalls noch nicht möglich. Über eine Erweiterung der möglichen Typen (bislang Void, Float, Integer, Boolean, Character, String, Table, Function und Reference) habe ich natürlich auch schon nachgedacht.

Bis die Tage!

5 Antworten zu “Ernie-Script (II/II)”

  1. Pa Nza sagt:

    Flinsch,

    sehr geil. Mir geht zwar der praktische Sinn für CeRrdG noch nicht auf, aber das werde ich noch raffen. Wann wird ERnie denn in den Lehrstoff der Uni aufgenommen?

  2. Pa Nza sagt:

    Moin Flinsch mir schein deine Wurzelfunktion gerade bei 20.000.000 in eine endlosschleife zu laufen.

  3. Flinsch (admin) sagt:

    Moin Patti, aus Performance-Gründen arbeitet Ernie-Script auf 32-Bit-Fließkommawerten (float). Die Genauigkeit liegt hier bei 7 (sicher) bis 8 (maximal) Dezimalstellen. Deine Zahl 20.000.000 ist ja bereits 8 Dezimalstellen lang, also musst du eine “gröbere” Tolleranzgrenze µ zur Berechnung der Quadratwurzel über die vorgestellte Funktion “my_sqrt” wählen (z.B. 1,0 oder 10,0 anstelle von 0,0001). Die begrenzte Genauigkeit von Fließkommazahlen ist ein bedeutendes Problem der Softwareentwicklung und nicht nur Programmierer sondern, ja, auch Anwender sollten stets wissen und verstehen, was sie da tun. Deine gewünschte Berechnung der Quadratwurzel aus 20.000.000 auf vier Nachkommastellen genau ist (auf Basis von “normalen floats”) gar nicht möglich.

    Auch 64- (double) und 80- (long double/FPU-intern) Bit-”breite” Fließkommawerte stoßen bei 15 bis 16 bzw. 19 bis 20 Dezimalstellen an ihre Grenzen. Zugegeben, die Genauigkeit von double-Werten würde ausreichen, um die Wurzel aus 20.000.000 mit einer Tolleranz von 0,0001 zu berechnen. Aber die zugrunge liegende Engine ist auf 32-Bit-Systeme ausgelegt und für die geplanten Berechnungen reicht entsprechende Genauigkeit vollkommen aus. (Mal ehrlich, kein Mensch würde sich für die Wurzel aus 20.000.000 auf vier Nachkommastellen genau jemals interessieren. Vielleicht irgendwelche Nerds von der NASA, aber die haben eh ganz andere Systeme und arbeiten sicher (noch) nicht mit Ernie-Script.)

  4. cyber-e-razor.de» Blogarchiv » Projektstatistik 10/2009 sagt:

    [...] Gegenstände) hinzu. Später auch noch Monster und geskriptete Ereignisse (basierend auf Ernie-Script). Das Ganze muss dann noch mit Grafik hinterlegt werden können, was auch keine einfache Sache sein [...]

  5. cyber-e-razor.de» Blogarchiv » Bald geht es endlich mit dem World-Editor weiter… sagt:

    [...] Lediglich für die Logik muss dann noch ausführbarer Programmcode her, der aber gerne auch in Ernie-Script verfasst werden [...]

Hinterlasse eine Antwort