A Modula3 programozási nyelv

Sablonok

Szintaxis

A nyelvben lehetőség van generic-ek írására. A modularitás jellege miatt csak modul tehető generikussá, illetve annak interfész része.

Paraméterek

A generic-nek paraméterek adhatók, méghozzá csak interfészekkel paraméterezhetünk. Ezeket már a GENERIC INTERFACE-ben fel kell tüntetni és a GENERIC MODULE leírásában is szerepelniük kell.

Példányosítás

Csak explicit módon lehet példányosítani, egy speciális formájú interfész ill. modul készítésével. Ezeknek a szintaktikája a következő:

GENERIC INTERFACE GI(A1, ..., An); <body> END GI. GENERIC MODULE GM(A1, ..., An); <body>; BEGIN ... END GM.

Ezeket az Ia, ..., In konkrét interfészekkel a következőképpen példányosíthatjuk:

INTERFACE GIInst = GI(Ia, ..., In) END GIInst MODULE GMInst EXPORTS GIInst = GM(Ia, ..., In) END GMInst

Ezzel létrejön egy GIInst nevű interfész és egy GMInst nevű modul, amiket ugyanágy használhatunk, mint a "sima" társaikat.

Analógia

A GENERIC példányosításának jelentését a következő konstrukciókkal lehet leírni:

1.

GENERIC INTERFACE G( F1, ... Fn ); Dekl.; END G;
Ahol F1...Fn a generic formális paraméterei, G a neve. Ekkor a példányosítás:
INTERFACE C = G( A1, ... , An ) END I;
Ahol A1...An az aktuális paraméterek interfészek. Ez megegyezik az alábbi, hagyományos módon megadott interfésszel:

INTERFACE C; IMPORT A1 AS F1, ... An AS Fn; Dekl.; END C;

2.

GENERIC MODULE G( F1, ... Fn ); Törzs; END G;
Példányosítás:
MODULE C = G( A1, ... , An ) END C;
Ez megegyezik az alábbi, hagyományos módon megadott modullal:
MODULE C; IMPORT A1 AS F1, ... An AS Fn; Törzs; END C;
Az így átírt kód természetesen nem helyettesítheti az eredetit, hiszen hiányzik belőle a paraméterezés lehetősége. Egy adott paraméter sorozatra viszont ekvivalens eredményt ad.