sneglehus Helle Markmann
Specialization Classes

Pesto -- et deklarativt sprog til partiel evaluering af objektorienterede sprog

Ovenstående er titlen på mit speciale, som jeg forventer at aflevere til maj 2003.

Pesto er, som titlen på mit speciale antyder, et deklarativt sprog. Det vil sige at man ikke kan skrive programmer, der kan alt muligt. Det er et sprog til at erklære noget om noget andet. Det var måske ikke særlig klart formuleret, men det er nu også svært, når man ellers bruger et helt speciale på det. Jeg vil forsøge at give en kort forklaring af hvad det er jeg går og roder med.

Men lad os starte fra bunden. Det, som Pesto skal bruges til er Partiel Evaluering, som, kort sagt, er en måde at optimere programmer på. Et klassisk eksempel er følgende: vi har et program, der beregner eksponentialfunktionen, x^y, det vil sige x ganget med sig selv y gange. Det beregnes ofte med en for-løkke:

resultat := 1;
for (i = 0; i < y; i := i+1)
   resultat := resultat * x;

Hvis vi nu ved at denne funktion næsten altid bruges hvor y = 3, vil det være mere effektivt at skrive:

resultat := x * x * x;

Ovenstående er nu specialiseret med hensyn til at y er 3. Og det er præcis det, partiel evaluering gør. Specialiserer et program med hensyn til en programkontekst.

Specialization Classes er en måde at fortæller det program, der skal specialiserer, hvad det er for nogle omgivelser, det er skal specialiseres med hensyn til (her y = 3). Hvis ovenstående funktion var en javametode kunne det se således ud:

public class Power {
   int x;
   int y;

   public Power(int x, int y) {
      this.x = x;
      this.y = y;
   }

   public int raise(int base) {
      int result = 1;
      for (int i = 0; i < y; i++) {
         result = result * base;
      }
      return result;
   }
}

Den specialiseringsklasse, der skal sige, hvad der skal specialiseres, vil være:

specclass Cube specializes Power {
   y == 3;
   public int raise();
}

Det var meget kort fortalt. Måske kommer der til at stå mere her, hvis der overhovedet er nogen, der er interesserede. Ellers kan man starte med at læse, hvad jeg har skrevet om Pesto allerede. Jeg skrev to rapporter da jeg var i Frankrig. Den gang hed Pesto Specialization Classes, da det byggede på et allerede defineret sprog. Den første rapport er et overblik over hvad der er lavet af arbejde på området, en såkaldt bibliogrphie. Den findes her i PostScript og PDF. Desuden skrev jeg en endelig rapport, en såkaldt DEA-rapport PostScript og PDF. Desuden er sproget blevet brugt i flere videnskabelige artikler: [Lawall99, Schultz99, Schultz00, Schultz02]

Interesserede kan her se grammatikken for Pesto skrevet i Barcus-Nauer Form (BNF) PostScript og PDF.


[Lawall99] J. L. Lawall og G. Muller. Efficient Incremental Checkpointing of Java Programs. IRISA-99-1264, 1999.
[Schultz99] U. P. Schultz, J. L. Lawall, C. Consel og G. Muller. Towards Automatic Specialization of Java Programs. I R. Guerraoui (red.), Proceedings of the European Conference on Object-oriented Programming (ECOOP 99), bind 1628 af Lecture Notes in Computer Science, side 367 390, Lisabon, Portugal, juni 1999. Springer-Verlag.
[Schultz00] U. P. Schultz, J. L. Lawall, C. Consel og G. Muller. Specialization Patterns. I The 15th IEEE International Conference on Automated Software Engineering, side 197 206, Grenoble, Frankrig, september 2000.
[Schultz02] U. P. Schultz, J. L. Lawall og C. Consel. Automatic Program Specialization for Java. DAIMI-PB 551, 2002.