Seite 1 von 1

Variablen-Initialisierung in Triangle

Verfasst: 18. Feb 2013 12:17
von d_glenz
Hallo,

mir ist bei den kleineren Examples im Triangle-Bundle folgender Code aufgefallen (bar.tri):

Code: Alles auswählen

let
  var x : Integer;
  const n ~ 42;
  const m ~ n + 1
in
  x := x + n * m;
Interessanterweise wird in diesem vorgegebenen Progrämmchen keine Variablen-Initialisierung von x vorgenommen. Dem Triangle-Compiler fällt das auch nicht weiter auf.

Was ich mich jetzt frage, ist, wo man die Überprüfung auf fehlende Initialisierung in Triangle durchführt. Wie man nämlich im AST (s. unten) sieht, steht bei ganz normaler Traversierung die Zuweisung (SimpleVname) vor der Auswertung des Ausdrucks. Beim Ausführen wird aber ja x auf der rechten Seite uninitialisiert verwendet.

Kann die kontextuelle Analyse also wissen, ob hier ein Fehler auftritt?
bar.tri.png
bar.tri.png (14.14 KiB) 382 mal betrachtet
Viele Dank für eure Hilfe

Re: Variablen-Initialisierung in Triangle

Verfasst: 18. Feb 2013 13:09
von tanne
wenn ich es richtig in erinnerung habe, initialisiert die TAM automatisch mit dem wert 0

Re: Variablen-Initialisierung in Triangle

Verfasst: 18. Feb 2013 13:30
von d_glenz
Also der disassemblierte Code sieht ja so aus:

Code: Alles auswählen

 0:  PUSH        1
 1:  LOADL       42
 2:  LOADL       1
 3:  CALL        add     
 4:  LOAD  (1)   0[SB]
 5:  LOADL       42
 6:  CALL        add     
 7:  LOAD  (1)   1[SB]
 8:  CALL        mult    
 9:  STORE (1)   0[SB]
10:  POP   (0)   2
11:  HALT  
Und in der Spezifikation von PUSH steht ja: "Push d words (uninitialised) onto the stack", der Speicherbereich wird also nicht durch das Programm auf null gesetzt, sondern höchstens von der TAM.
Mir ist das Ganze nämlich auch nur aufgefallen, als ich die TAM nach Programmabschluss mal habe weiterlaufen lassen. Da ist dann beim zweiten Ausführen dieses Programms ein viel zu hoher Wert herausgekommen.

Soll es den Compiler also gar nicht interessieren, ob die Initialisierung gemacht oder verpennt wird? Führt das nicht zu unvorhersehbarem Verhalten?

Re: Variablen-Initialisierung in Triangle

Verfasst: 18. Feb 2013 13:46
von mmi1991
Das ist in C doch nicht anders :)