A Dylan programozási nyelv

Modulok és könyvtárak



Modulok és könyvtárak

A modulok és a könyvtárak tagolják a Dylan programot. A modulok reprezentálják a namespace-eket és vezérlik a hozáférést az objektumokhoz és a függvényekhez. A könyvtárak tartalmazzák a modulokat és a Dylan program fordítási egységei.

Egyszerű modulok

A modulok importálnak szimbólumokat más modulokból, és exportálnak szimbólumokat más modulok számára. A modulok közötti függőségnek irányított, körmentes gráfnak kell lennie. Két modul nem használhatja egymást, és nem lehetnek körbe függőségek.

A modulok csak változókat exportálhatnak. Minthogy az osztálynevek és a generikus függvények tárolódhatnak változókban, ez valójában nem megkötés.

A következő példa a vehilce osztály, és annak alosztályainak, valamint metódusainak a definíciója:

// === Vehilce osztály === define class vehicle (object) slot serial-number :: integer, required-init-keyword: sn:; slot owner :: string, init-keyword: owner:, // optional init-value: "Northern Motors"; end class vehicle; // === a vehilce osztály tax metódusa === define generic tax(v :: vehicle) => tax-in-dollars :: float; define method tax(v :: vehicle) => tax-in-dollars :: float; 100.00; end; // === Két új alosztálya a vehicle-nak === define class car (vehicle) end; define class truck (vehicle) slot capacity, required-init-keyword: tons:; end; // === két új tax metódus == define method tax( c :: car ) => tax-in-dollars :: float; 50.00; end method; define method tax( t :: truck ) => tax-in-dollars :: float; // standard vehicle tax plus $10/ton next-method( ) + t.capacity * 10.00; end method;

Most pedig egy egyszerű modul, ami a vehilce osztályt tartalmazza:

define module Vehicles use Dylan; export , serial-number, owner, owner-setter, tax, , , capacity; end module;

A normál modulokhoz hasonlóan, ez használja a Dylan modult, ami tartalmazza az összes standard beépített függvényt és osztályt. A Vehilce modul exportálja mind a három vehilce osztályt, a tax generikus függvényt, néhány lekérdező függvényt és egy beállító függvényt.

A slot-okhoz való hozzáférést az exportált lekérdező és beállító függvények szabályozzák. Ha egy slot-ot publikussá kívánunk tenni, mindkettőt exportálni kell. Csak olvashatóvát tételhez csak a lekérdező fügvényeket exportáljuk. Prívát láthatóság esetén pedig egyiket sem. A fenti példában a serial-number slot csak olvasható, míg az owner publikus.

Amikor néhány modul hozzáad egy metódust egy generikus függvényhez, a változás érinti az összes modult, amelyek használják azt a függvényt. Az új metódus tulajdonképpen hozzáadódik a generikus függvényt reprezentáló változóhoz. Ha ezt a változó korábban exportálva lett, minden kilens hozzáférhet az új értékhez.

Import lehetőségek

A Dylan nagyon precíz szabályozásra ad lehetőséget, hogy milyen szimbólumok lesznek importálva más modulokból. Például az egyedi szimbólumok importálhatóak a nevükkel. Bármikor átnevezhetőek, vagy egyszerre adható prefix egy modul összes szimbólumához. Néhány vagy az összes azonnal újraexportálható.

A Dylan importálási rendszere számos előnnyel bír. Ritkák a névütközések, a programozóknek nem szükséges függvény prototípusokat definiálnia. Nincs szükség külön header fájlokra. A modulok különböző hozzáféréseket biztosítanak ugyanahoz objektumhoz - az egyik modul exportálja a teljes hozzáférést, míg egy másik modul importálja, újradefiniálja és újraexportálja.

Könyvtárak

Könyvtárak modulokat tartalmaznak. Például a Dylan könyvtár tartalmazza a Dylan modult, az Extensions modult, és még néhány további implementáció függő modult. A könyvtár és a modul megoszthat egy adotto nevet. Hasonló névvel rendelkező modulok többnek látszanak mint egy könyvtár.

Alapértelmezésben a Dylan környezet biztosít egy Dylan-User nevű könyvtárat, a kényelmes programozáshoz. Ezt tipikusan a rövid, egy könyvtáras programok használják, amik csak a Dylan könyvtárban lévő modulokon alapszanak.

Továbbá minden modul tartalmaz egy implicit modult, mint a Dylan-User, ami importálja az összes modult a Dylan könyvtárból. Ez használható az egy modulos programokban.

A vehilce könyvtár például az alábbi módon definiálható a Dylan-User modulban:

define library Vehicles use Dylan; // Ez a könyvtár! export // Ezek a modulok. Vehicles, // (lásd feljebb) Traffic-Simulation, Crash-Testing, Inspection; end library Vehicles;

Ez a könyvtár beimportálható egy másik könyvtárba:

define library Vehicle-Application use Dylan; use My-GUI-Classes; use Vehicles; end;

Könyvtárak importálhatnak más könyvtárakat, és exportálhatnak modulokat, míg a modulok importálhatnak más modulokat és exportálhatnak változókat. Általában a modulok bármely modult importálhatják a szülő könyvtárukból, vagy ami exportálva lett egy könyvtárból, amelyet a szülő könyvtár importált. A következő modul például a Vehicle-Application könyvtárba tartozik.

define module Sample-Module // modul név forrás könyvtár use Dylan; // Dylan use Extensions; // Dylan use Menus; // My-GUI-Classes use Vehicles; // Vehicles use Inspection; // Vehicles end module;