Valamennyi programozási nyelv lehetõvé teszi közvetlenül vagy közvetve az értékek manipulálását . Általában a változók révén történik , amelyek asszociációnak (hivatkozásnak is nevezzük a kapcsolatot) egy szimbólum és egy érték vagy értékek egymásutánja között a szimbólum teszi lehetővé a programozó számára, hogy azonosítsa és manipulálja ezeket az értékeket.
A változó beírása abból áll, hogy a szimbolikus változóhoz társít egy "típusú" adatot, lehetővé téve a számítógép számára, hogy megtudja, ez numerikus, szöveges stb.-E, és ennek megfelelően osztja ki a memória területét. , és esetleg annak ellenőrzése, hogy az ezen változóra programozott műveletek (matematikai műveletek, szövegszerkesztés stb.) összhangban vannak-e a típusával.
A dinamikus gépelés lehetővé teszi a számítógép számára, hogy a gép végrehajtása közben "menet közben" végezze a gépelést, ellentétben a statikusan tipizált nyelvekkel, ahol az elemzés típusa az áramlási irányban történik (általában a programból történő fordítás során). Függetlenül attól, hogy ezt az elemzést végrehajtják-e, a tipizálási módszer vagy explicit típusú kommentárokat kényszeríthet a program kifejezéseire, vagy típus-következtetési mechanizmussal rendelkezik. Vegye figyelembe, hogy a legtöbb dinamikusan tipizált nyelv rendelkezik ezzel a mechanizmussal.
A dinamikus gépelés nagyon kényelmes megoldás lehet a programok gyors fejlesztése szempontjából, különösen akkor, ha a manipulált objektumok típusa nem feltétlenül előzetesen ismert, vagy amikor a programozó kényelmesen meg akarja engedni a változó típusának megváltoztatását. Szükség van egy meta-objektum protokoll - vagy MOP - fejlesztésére is, ahol a statikus gépelés tilos .
Például C vagy C ++ nyelven a következő programrészlet:
int a; a = 5; int b = a + 1;meghatározza az 'a' jelű változót, amelynek egész száma (' int'), majd hozzárendeli az 5. értéket. Ezután meghatározzuk és egyidejűleg inicializáljuk a kifejezés eredményével egy azonos típusú b változót a + 1. A C ++ statikusan tipizált nyelv . A modern C ++ - ban (a C ++ 11 után ) a kulcsszó autolehetővé teszi, hogy ne deklaráljuk bizonyos változók típusát. Ezután a fordítónak a kontextus elemzésével kell következtetnie a változó típusára.
int a = 1; auto b = a + 1;A Common Lisp- ben ezt fogjuk írni:
(let ((a 5)) ...)Itt egy lexikai változó létrehozása a típus megadása nélkül történik. Az adatok típusa nem társul a változót jelző szimbólummal, hanem magában az adatokban van kódolva. Így a „let” hatókörében lekérdezhetjük az a változó típusát (ez a reflexivitás alkalmazása ):
(let ((a 5)) (when (numberp a) (print "a est un nombre")) ...)Ezenkívül a végrehajtás során az „a” más típusú objektumot is fogadhat, ha a program megengedi:
(let ((a 5) (setf a "je suis une chaîne") ...)A dinamikus gépelés által megengedett nagy rugalmasságot általában a következők fizetik:
Drága algoritmikus műveletekhez az olyan szkriptnyelvek, mint a Python , a Tcl vagy a Ruby, képesek kapcsolódni olyan alacsony szintű nyelvű könyvtárakkal, mint a C nyelv . Ezenkívül egyes nyelvek (különösen a Common Lisp ) megengedik a típus opcionális statikus deklarálását annak érdekében, hogy bizonyítsák a gépelés következetességét a fordítás idején és eltávolítsák az indirekciókat.
Amikor egy függvény futás közben nem megfelelő típusú adatokat fogad (típushiba futás közben), akkor egy kivétel lép fel .