In meiner aktuellen Entwicklerversion vom N Compiler ist es möglich Unterfunktionen in Funktionen einzubinden. Die Unterfunktion muss eine Tilde ~ im Namen haben.

Damit ist es möglich Funktionen die zusammen gehören besser kenntlich zu machen. Man sieht auf den ersten Blick, dass die Funktion eine Unterfunktion ist. Ich finde das ganz praktisch. Ich musste dafür den Parser nur wenig verändern.

Hier ein kleines Beispiel:

//  subfunc.nanoc - sub functions example
//
//  Sub functions are "private functions" inside functions.
//  Here is an example program.
//  Inside a sub functions name there must be always the ~ char!
//
//  I did implement this in N with minimal code.
//
//  Take a look at the assembly output of the N compiler, file subfunc.na.

func main ()
    int null = 0; int one = 1;

    int x = 23; int y = 42; int z;

    @multiply (x, y);
    get (z);

    print z; printn one;
    exit null;
funcend

func multiply (int x, int y)
    int one = 1;
    int z;

    multiply~message ();

    @multiply~do (x, y);
    get (z);
    return (z);

//  sub functions of multiply
//  ~ in name is needed to mark this as a sub function

func multiply~do (int x, int y)
    int z;

    z = x * y;
    return (z);
funcend
func multiply~message ()
    int one = 1;
    print "multiply...";
    printn one;
funcend
funcend

Das GitHub Repository ist auf dem aktuellen Stand. Man kann also die VM selbst compilieren und das ausprobieren. Neu ist das man bei der VM den JIT-Compiler mit dem -j Flag einschalten muss. Ich habe auch noch ein paar Fehler behoben. Siehe ChangeLog!

Neu: In meiner Entwicklerversion kann man jetzt auch Konstanten bei den eingebauten Standardfunktionen verwenden:

fopen (file, „foobar“, „w“);

Das ist schon mal ganz praktisch finde ich! :)

Hier ist das Archiv für die ältere Version: NanoVM 3.4.3-2 Release mit Binaries für Windows, Android, Linux (x86_64, Raspberry Pi) und Psion 5MX (Kludged Linux).

Ich verwende KDevelop (Kate) zum Schreiben der N Programme. Hier ist ein Syntax Highlighter für KDevelop: NanoVM Syntax Highlighter