A Miranda programozási nyelv

Modul

Modul

A fő érv a modulokra bontás mellett a típus és a hozzá tartozó műveletek elkülönítése, ill. az implementáció elrejtése. Ezenfelül természetesen a modularitás áttekinthetőbbé teszi a programot, és támogatja az újrafelhasználhatóságot. Funkcionális esetben a típus megvalósítására és főleg elrejtésére az absztrakt adattípus elegendő, és jó lehetőséget biztosít. Így az a lehetőség, hogy a típust egy külön file-ba tegyük, csak az olvashatóságot és az újrafelhasználhatóságot javítja. A funkcionális nyelvekben a lokális függvény definíciók, a típusműveletek elrejthetősége (az absztrakt típus), valamint a könyvtárdirektívák az eszközei a modulok elkülönítésének.
Három direktíva (%include, %export, %free) alkotja a Miranda könyvtár kezelését, ezek szabályozzák az azonosítók szétosztását a külön-külön fordított leírások közt.

%include "file"

A %include direktíva hatására alapértelmezésben a "file" nevű leírásból a legfelső szinten definiált összes név exportálódik, kivéve azok, melyek egy %include direktíva által kerültek oda. Tehát az a file, amit %include-oltunk szintén tartalmazhat %include direktívát, tetszőleges mélységig, de a (direkt, vagy indirekt) %include direktíva körök nem engedélyezettek.

%export "tagok"

Az %export direktíva segítségével lehet változtatni a %include hatáskörét. Az %export direktívának nincs hatása a leírásra, ha az az aktuális Miranda leírásban található, csak akkor, ha ezt a leírást %include-olják. Egy leírás legfeljebb egy %export direktívát tartalmazhat, amely bárhol elhelyezkedhet a leírásban, de a kellemetlen meglepetések elkerülése végett ajánlatos a leírás elejére tenni. Minden "tag" a következők valamelyike kell hogy legyen:
  azonosító (változó vagy típus név)
  file azonosító
  <- szimbólum
  -azonosító
Ha file azonosító szerepel a %export listában, akkor annak egy olyan file nevének kell lennie, mely egy %include direktíva által került az adott leírásba. A <- szimbólum egy rövidítése az aktuális leírás legfelső szintjén definiált összes azonosítónak. Az alapértelmezése ennek a direktívának: %export <-. A -azonosító jelöléssel lehet meghatározni, hogy mely elemek ne kerüljenek bele a listába.

%free

Lehetőség van olyan definíciókat tartalmazó leírás készítésére, mely olyan információktól függ, melyek csak akkor fognak betöltődni, amikor a leírás egy %include direktíva tárgyát képezi. Ezt nevezik paraméterezett leírásnak. Ezt a %free (felsorolás) direktíva jelenléte váltja ki, ahol a "felsorolás" azon azonosítók listája, melyek a %include direktívától függnek. A leírás legfeljebb egy %free direktívát tartalmazhat, melynek fel kell sorolnia az összes paraméterező azonosítót.
Például szeretnénk mátrix-algebrát megvalósító csomagot írni anelkül, hogy tudnánk, milyen típusú elemei lesznek a mátrixoknak. Egy ilyen csomag fejléce a következőképpen nézhetne ki:

%free { element:: type
        zero, unit:: element
        mult, add, subtract, divide:: element->element
      }

%export matmult determinant eigenvalues eigenvectors ...
|| itt következne a matmult, determinant, eigenvalues stb.
|| definíciója a zero, unit, mult, add, subtract, divide
|| szabad változókat tartalmazó kifejezésekként

A csomagot használó script-ben a megfelelő %include direktívának megkötéseket kell adnia a csomagban szereplő szabad változókra. Itt egy példánya a fent vázolt mátrix csomagnak, valós számokat választva mátrixelemeknek:

%include "matrix_pack"
         { element == num; zero = 0; unit = 1
           mult = *; add = +; subtract = -; divide = /
         }

A Miranda három direktívája az %include, az %export és a %free rugalmas és típusbiztos mechanizmust kínál a programozók számára, hogy nagyobb lélegzetű programjaikat kisebb komponensekből építhessék fel.
A különálló fordítások felhasználói beavatkozás nélkül mennek végbe. Minden Miranda script-et tartalmazó file-hoz tartozik egy object code file, melyet a rendszer hoz létre. Ezek a file-ok minden esetben újrafordítódnak és újralinkelődnek ha elavulttá válnak a hozzá tartozó forráshoz képest, azaz ha bármi változást eszközölünk a forrásában. Ez a viselkedés erősen analóg az UNIX-ból ismert make működésével, azt leszámítva, hogy ez esetben nincs szükség a felhasználó által írt makefile-ra, a szükséges függőségi információkat a Miranda forrás %include direktíváiból nyeri ki a fordító.