[ Prev ] [ Index ] [ Next ]

Dynamic binding

Created Tuesday 20 May 2008

WARNING: Deprecated. See instead Dispatched Objects

Table des types distribuée

table distribuée: entre tous les modules ⇒ présente en un seul exemplaire ⇒ fournie par le programme principal ⇒ un symbole commun, par exemple lisaac_type_table ⇒ à expansion dynamique : utilise la mémoire dynamique : malloc(), free()

Proposition de structure:

struct {
	long long typehash;
	const char *typeid; // '\0' terminated
	// ... (@ des slots)
} **lisaac_type_table;

Chaque objet non Expanded (les objets Expanded sont forcément Strict ... et donc leur type est connu à la compilation) contiendra un pointeur vers leur type dans cette table. Le type des objets peut donc ainsi être facilement comparé pisqu'il suffit de faire une comparaison de pointeurs.

(essai) ./lisaac-dynamic-binding.odg

On peut imaginer un prototype :

Section Header
+ name := STATIC_TYPE
Section Mapping
+ static_type  :TYPE;
+ dynamic_type :DYNAMIC_TYPE;
+ plus_slot_1;
+ plus_slot_2;
  ...

et : Section Header

+ name := DYNAMIC_TYPE;
Section Inherit
+ type :Expanded STATIC_TYPE;

Un objet sera de type STATIC_TYPE lorsqu'il sera passé sur une interface implémentant cette ABI. Il sera possible de déterminer son type dynamique avec le pointeur dynamic_type.


Backlinks: :Computer:Lisaac:Specs