Luna ermöglicht die dynamische Verwendung von Speicherobjekten im Arbeitsspeicher. Zu den Speicherobjekten im Arbeitsspeicher zählen Strings und MemoryBlocks.
Siehe hierzu: Speicherverwaltung
Um zu erkennen, ob Daten der aktiven Speicherobjekte nicht beschädigt sind, ist in Luna eine entsprechende Überwachungsfunktionalität über Exceptions implementiert. Mittels dieser Überwachung können Fehler wie Speicherüberläufe, Zugriffe über Objektgrenzen hinaus und Speichermangel erkannt werden.
Siehe hierzu: Exceptions
Mittels der Exceptions OutOfBoundsMemory und NilObjectException werden Zugriffe über Speichergrenzen oder nicht erzeugte Speicherobjekte erkannt.
Wir erzeugen einen MemoryBlock und schreiben Daten hinein. Wird nun durch einen Programmierfehler versucht außerhalb des MemoryBlocks Daten in den Speicher zu schreiben, löst dies die Exception OutOfBoundsMemory aus. Da ohne Implementierung der Exceptions die Überwachungsfunktionen aus Performancegründen entfallen, kann dies zum Beschädigen der internen Speicherstruktur und damit zu sich kaskadierenden schweren Programmfehlern führen. Die Exception ermöglicht hier das Finden solcher Speicherverletzungen.
const F_CPU=20000000 avr.device = atmega328p avr.clock = F_CPU avr.stack = 32 uart.baud = 19200 uart.recv.enable uart.send.enable dim i as byte dim m as MemoryBlock print 12;"out of bounds exception example" print 'Speicherblock allozieren mit 16 Bytes Speicherplatz m.new(16) 'prüfen ob der Speicherblock alloziert werden konnte if m<>nil then 'Schreiben in den Speicher über eine Schleife. Außerhalb der 'Speicherkapazität des allozierten MemoryBlocks wird die 'Exception ausgelöst. for i=0 to 20 print "schreibe byte ";str(i); m.ByteValue(i)=i print " - ok" next else print "Fehler: Speicherblock konnte nicht alloziert werden" end if do loop Exception OutOfBoundsMemory ' Fehlermeldung ausgeben Print "*** Exception OutOfBoundsMemory ***" EndException