Gambas est typé statiquement, sauf qu'il possède le type Variant, qui peut contenir n'importe quel type, ainsi que le type Object, qui peut contenir n'importe quel type d'objet.
D'autre part, le compilateur n'effectue aucune liaison de type et aucune optimisation : c'est l'interpréteur qui, à la première exécution du code, effectue les optimisations liées aux types de base, ainsi que les résolution de symboles — c'est-à-dire que Classe.Symbole est une recherche binaire dans une table de symboles à la première exécution, et un accès direct ensuite.
D'autre part nous avons :
Les méthodes, qui retournent toujours un type spécifique (le cas du type Variant et du type Object étant spécial)
Et les "sous-routines" (c'est-à-dire les fonctions intégrées au langage, de Left$() jusqu'à Pointer@()) qui doivent juste respecter la règle qu'un même type en entrée générera toujours le même type en sortie (principe d'inférence).
Enfin les méthodes de classes sont toutes "virtuelles" (dans le sens de C++), et l'héritage est entièrement dynamique (résolu par l'interpréteur).
Pour résumer, je dirais donc que Gambas à l'air d'être typé statiquement, mais qu'à l'intérieur il est pratiquement typé dynamiquement.
[^] # Re: Typage statique ou dynamique?
Posté par Benoît Minisini . En réponse à la dépêche Sortie de Gambas 3.3. Évalué à 4.
Ah ! Bonne question…
Gambas est typé statiquement, sauf qu'il possède le type
Variant, qui peut contenir n'importe quel type, ainsi que le typeObject, qui peut contenir n'importe quel type d'objet.D'autre part, le compilateur n'effectue aucune liaison de type et aucune optimisation : c'est l'interpréteur qui, à la première exécution du code, effectue les optimisations liées aux types de base, ainsi que les résolution de symboles — c'est-à-dire que
Classe.Symboleest une recherche binaire dans une table de symboles à la première exécution, et un accès direct ensuite.D'autre part nous avons :
Les méthodes, qui retournent toujours un type spécifique (le cas du type
Variantet du typeObjectétant spécial)Et les "sous-routines" (c'est-à-dire les fonctions intégrées au langage, de
Left$()jusqu'àPointer@()) qui doivent juste respecter la règle qu'un même type en entrée générera toujours le même type en sortie (principe d'inférence).Enfin les méthodes de classes sont toutes "virtuelles" (dans le sens de C++), et l'héritage est entièrement dynamique (résolu par l'interpréteur).
Pour résumer, je dirais donc que Gambas à l'air d'être typé statiquement, mais qu'à l'intérieur il est pratiquement typé dynamiquement.