Abstract
Denne masteroppgaven ser på programmeringsspråket Boo med spesiell
vekt på det dets mekanismer for metaprogrammering og for å kunne
utvide språket selv med nye mekanismer. Boo er et objektorientert
språk med en Python-liknede syntaks, og er basert på
.NET-rammeverket. Det har dessuten spesielt interessante mekanismer
for metaprogrammering: metametoder, makroer og syntaktiske
attributter, som behandles og utføres under kompileringen og som har
tilgang til kompilatorens datastrukturer (det abstrakte
syntakstreet).
Denne oppgaven vurderer hvor kraftige disse metamekanismene er og
spesielt i hvilken grad de er egnet til å implementere en
modulariseringsmekanisme kalt Package Templates (PT). Denne
tilrettelegger for gjenbruk av samlinger av klasser (kalt templater)
ved at templater må "instansieres" under kompilering før de kan brukes
i et program. I en instansiering kan de tilpasses forskjellige
bruksområder gjennom blant annet omnavning, utvidelser og sammenslåing
av klasser fra forskjellige instansieringer.
Oppgaven beskriver en implementasjon, kalt BooPT, der Boo sine
metaprogrammeringsmekanismer benyttes til å lage en enkel variant av
PT for Boo, og konkluderer med at disse er både fleksible og velegnede
til en slik implementasjon.
This master thesis studies the Boo programming language with special
emphasis on its facilities for metaprogramming and the ability to
extend the language. Boo is an object-oriented programming language,
with a syntax similar to Python, and is based on the .NET
framework. In particular it has some interesting metaprogramming
mechanisms: meta methods, macros and syntactical attributes, which are
processed and executed during compilation with access to compiler data
structures (the abstract syntax tree).
This thesis evaluates these mechanisms, primarily with respect to how
well they are suited to implement a type of modularization called
Package Templates (PT). This is a mechanism that facilitates reuse of
collections of related classes (called templates), which requires that
templates are "instantiated" at compile-time before the classes can be
used in a program. When templates are instantiated the resulting
classes can be adapted for various purposes through renaming,
additions, merging, and other means.
The thesis describes an implementation, called BooPT, where the Boo
metaprogramming mechanisms are used to create a basic variant of PT
for Boo, and it concludes that these are both flexible and well fit
for this purpose.