

                             P r o f i l e
                          ===================


                      © 1988 by Fridtjof Siebert
                             Nobileweg 67
                           7000 Stuttgart 40
                          Tel.: (0)711/822509



Was?

  Dieses Programm ermöglicht es, das Laufzeitverhalten eines Modula-II
  Programm zu überprüfen. Es erweitert ein Modula-II Programm um
  Informationen über die Anzahl von Schleifendurchläufen und
  Prozeduraufrufen. Außerdem wird der Wertebereich numerischer Variablen
  bestimmt, und festgestellt, ob die Variablen im Programm überhaupt
  jemals Werte zugewiesen bekommen. Die Informationen, die Profile aus
  einem Programm holt, werden als Bemerkungen in einen neu erzeugten
  Quelltext eingefügt.


Weshalb?

  Profile entstand beim Lösen der 3. Aufgabe der 2. Runde des 7.
  Bundeswettbewerbs Informatik. Da ich es für ein nützliches Programm
  halte, habe ich mich entschlossen, es auch anderen Modula-II
  Programmierern zugänglich zu machen.


Wie?

  Um ein Programm untersuchen zu lassen, muß zunächst der Profiler
  gestartet werden. Ihm kann dann der Name des Quelltextes angegeben
  werden.

  Aus diesem Text erzeugt er einen neuen Quelltext, der unter dem Namen des
  Originaltextes, wobei vor dem Punkt "Pro" eingefügt wird, gespeichert
  wird. Es wird also z.B. aus "Test.mod" "TestPro.mod".

  Der erzeugte Text muß nun compiliert, gelinkt und ausgeführt werden.
  Solange wartet Profile auf die RETURN-Taste. Nachdem das untersuchte
  Programm beendet ist, muß diese Taste gedrückt werden. Das Programm hat
  in das T:-Directory (T: muß z.B. mit "assign t: ram:" vorher erzeugt
  worden sein!) die Datei ProfileData geschrieben, die Informationen über
  Schleifendurchläufe, Prozeduraufrufe und Variablenbereiche enthält.

  Profile erzeugt nun den neuen Programmtext. Dieser enthält hinter allen
  Variablendeklaration, Schleifenköpfen und hinter den BEGINs von
  Prozeduren Bemerkungen, die Auskunft über Wertebereich, Anzahl der
  Durchläufe und Aufrufe geben.


Einschränkungen:

  Leider konnte ich aus Zeit- und Lustmangel das Programm nicht so
  schreiben, daß jedes Modula-Programm untersucht werden kann. Folgende
  Bedingungen müssen die bearbeiteten Programme erfüllen:

  - es dürfen keine lokalen Module verwendet werden.

  - Profile verarbeitet keine Importe. Damit dennoch einfache Ein- und
    Ausgabeprozeduren, wie z.B. WriteString, ReadInt etc., benutzt werden
    können, werden alle importierten Objekte als Prozeduren mit beliebig
    vielen Parametern eines beliebigen Typs angesehen. Um Programme, die
    importierte Objekte benutzen, dennoch verarbeiten zu können, reicht es
    oft, wenn die Teile, in denen die importierten Sachen verwendet werden,
    vor dem Starten von Profile mit "(*" und "*)" in eine Bemerkung
    umgewandelt werden. Vor der Compilation der Datei XXXPro.mod können die
    Bemerkungen in dieser wieder entfernt werden.

  - bei zu großen Konstanten (größer als 2 hoch 31) können Bereichsfehler
    auftreten, die der Parser nicht abfängt.

  - die Prozeduren für REAL-Zahlen habe ich nicht getestet, daher treten
    bei deren Verwendung wahrscheinlich Fehler auf.

  - variante Records sind nicht erlaubt.

  - Vorwärstdeklaration von Prozeduren sind nicht erlaubt.

  - Unterbereichstypen sind nicht immer kompatibel zu ihrem ursprünglichen
    Typ. Bei Verwendung von Unterbereichstypen werden unberechtigt
    Fehlermeldungen ausgegeben.

  Es tut mir natürlich Leid, daß ich all diese Einschränkungen
  zurückgelassen habe. Ich habe jedoch noch viele andere Dinge zu tun und
  bin nicht dazu gekommen, dies zu verbessern.


Beispiel:


  Um Profile zu demonstrieren, habe ich folgendes kleines Testprogramm
  geschrieben:

    MODULE Test;

    VAR
      v,x: INTEGER;

    PROCEDURE Add(VAR a: INTEGER; b: INTEGER): INTEGER;

    VAR c: INTEGER;

    BEGIN
      c := a + b;
      RETURN c;
    END Add;

    BEGIN
      v := 0;
      WHILE v<100 DO
        v := Add(v,5);
      END;
    END Test.

  Der von Profile erzeugte Text Test.pro sieht dann folgendermaßen aus:

    MODULE Test;

    VAR
      v,x: INTEGER;
    (* x: Variable nicht benutzt! *)
    (* v: min = 0, max = 100 *)

    PROCEDURE Add(VAR a: INTEGER; b: INTEGER): INTEGER;
    (* a: min = 0, max = 95 *)
    (* b: min = 5, max = 5 *)

    VAR c: INTEGER;
    (* c: min = 5, max = 100 *)

    BEGIN
     (* 20 Aufrufe *)
      c := a + b;
      RETURN c;
    END Add;

    BEGIN
      v := 0;
      WHILE v<100 DO
     (* 20 Durchläufe *)
        v := Add(v,5);
      END;
    END Test.

  Es ist also ein sehr übersichtliches und praktisches Ergebnis entstanden.
  Da die Zusatztinformationen in Kommentarzeilen eingefügt wurden, kann das
  Ergebnis nochmals compiliert werden.

  Der Dialog mit dem Profiler sieht folgendermaßen aus:

    M2-Profiler -- © 1989 by Fridtjof Siebert.
    in> Test.mod
     - Test.mod
     + TestPro.mod
     -> Bitte TestPro.mod compilieren und starten!
        Danach RETURN drücken!
     + Test.pro
    in>
    tschüß!

Paket:

  Folgende Dateien müssen in diesem Directory enthalten sein:

    Profile (dir):
      .info                              47
      Demos (dir):
        Prim3.mod.info                    534
        Prim1.info                        818
        Prim3.mod                         558
        .info                              94
        Prim1.mod                         275
        Prim1                           12068
        Prim2                           12468
        Prim3                           12292
        Prim2.pro                        1332
        Prim3.pro.info                    534
        Prim3.info                        818
        Prim2.mod.info                    534
        Prim2.pro.info                    534
        Prim2.info                        818
        Prim1.mod.info                    534
        Prim1.pro.info                    534
        Prim2.mod                        1126
        Prim3.pro                         760
        Prim1.pro                         407
      Demos:47038  /19       All:47038  /19
      Profile.info                     1270
      Demos.info                        947
      Profile                         81344
      Profile.LiesMich.info             710
      Profile.LiesMich                 7209
    Profile:91527  /6        All:138565 /25

Copyright:

  Profile ist NICHT Public Domain, sondern FREEWARE. Es darf frei kopiert
  und an andere weitergegeben werden, dies jedoch nur, mit folgenden
  Einschränkungen:

    - Das Paket darf nur vollständig weitergegeben werden. Fehlt eine
      Datei, ist das Kopieren illegal.

    - Es ist nicht erlaubt, Änderungen irgendwelcher Art im Programm oder
      den dazu gehörenden Dateien zu machen und diese weiter zu verbreiten.

    - Disketten, auf denen dieses Programm vertrieben wird, dürfen
      höchstens 8 DM kosten. Einen höheren Preis sehe ich als eine
      kommerzielle Nutzung an. Dafür ist diese Programm nicht freigegen.

  Wer das Programm nützlich findet, oder irgendwelche Vorschläge für
  Verbesserungen oder Kritik hat, schreibe mir bitte.


--- Fridtjof.


