Tien ça faisait longtemps que je n´etait pas revenu sur ce forum
La bonne nouvelle, c´est qu´il est modere maintenant , bravo dnoob ;)
j´avais fait un petit projet de script l´an dernier, et pour les variables j´avais utilisé std::map, basé sur une hashtable, donc avec une recherche plus rapide.
Mais si tu a l´intention de creer ton propre langage de script, je te conseil de lire "Game Scripting Mastery" (en anglais). Je suis actuelement en train de le lire et je ne peut que le conseiller
.
Si ce livre est consacré au scripting (avec une explication de comment l´integrer dans un jeu, ainsi que les bases de Lua, Python et TCL), une grosse partie est consacré à la creation d´un langage de script (XtremeScript).
Je vais essayer de dire brievement comment il gere les variables.
Son langage est compilé (on passe d´un script proche du C, a un code proche de l´assembleur, pour ensuite passer en bytecode).
Du coup, sa gestion des variables est vraiment bas niveau, ce qui pourait ne pas corespondre a ta façon de gerer ça. Sa gestion des fonctions (adresse de retour, parametres), variables... tout passe par une pile. Ainsi, les variables globales sont situé en dessous de la pile (on peu lire le dessous), et les variables locales sont situé sur le dessus (juste au dessus de l´adresse de retour de la fonction).
Ainsi, à la compilation les variables n´ont plus de nom, mais juste un identifiant indiquant a quel moment il a été declaré dans la fonction
Pour essayer d´illustrer ce que je dit, je vais essayer de faire un pseudo script :
var global
func myFunction(var param)
{
var myVar1
var myVar2
myVar1 = param *10
myVar2 = param * param
global = myVar1 + myVar2
}
func main()
{
...
myFunction(2)
...
}
imaginons qu´on fasse apel a la fonction main dans le programme host.
L´etat de la pile sera à peu pres ça a la fin de la fonction "myFunction" :
4 -> valeur de myVar2
20 -> valeur de myVar1
56 -> suposons que ce soit l´adresse de retour e la fonction
2 -> le parametre
...
... // autres fonctions apelé precedements
24 -> valeur de la variable "global"
ainsi, myVar1 est situé a pile[-2], myVar2 pile[-1], et global à pile[1]. On peu d´ailleur remarquer que l´index positif part du bas de la pile, alors que l´index negatif du sommet.
du coup, une fois le script compilé, l´assembleur ne fait pas ça :
mov global myVar1
mais ça :
mov 1 -2
(plus des petit flag pour preciser que ce sont des variable et non des valeurs)
Voila, j´esper avoir été assez clair dans mes explications. Je conseil la lecture du livre pour ceux que ça interesse. D´apres l´auteur, la demarche est proche de celle qui est faite en assembleur, mais j´ai pas (ou alors tres peu) de connaissance dans ce domaine pour vous l´afirmer.