PRINCIPE
Code et datas
Dans les langages traditionnels, le code et les datas sont séparés. Or,
dans des applications complexes (comme par exemple l´animation d´acteurs
autonomes), il n´est plus possible d´exercer un contrôle
exhaustif au moyen d´un programme unique se déroulant linéairement. Il est
plus facile de laisser à ces acteurs le soin de décider eux-mêmes du
détail de leurs comportements, le contrôle se limitant à donner des
directives générales.
Pour cela on considère que chaque acteur est en fait un programme
accédant à la base de données et à des mémoires locales. Tout se passe
comme si plusieurs programmes se déroulaient en parallèle et pouvaient
dialoguer entre eux et avec le "superviseur" (en l´occurrence l´animateur
qui devient alors un metteur en scène).
Implémentation dans anyflo
Le langage anyflo est un interpréteur, écrit en C, mais n´ayant pas
les limitations des langages compilés définissant des structures fixes:
En effet tout y est défini dynamiquement: datas, types et même le code
qui peut être généré
dynamiquement
en cours d´exécution.
FONCTIONS LOCALES
Définition de fonctions locales
La commande local(0)vol(id)="f" ajoute, dans le volume id, une
fonction locale copie de la fonction f().
Une façon commode de procéder est d´écrire une fonction, par exemple toto,
et de faire: local(0)vol(id)="toto".
Le texte, et le code compilé, d´une copie de la fonction toto deviennent des
propriétés du volume id.
Une même fonction peut donc être chargée dans différents objets et s´y
exécuter de façon non synchrone.
Accès à une fonction locale
local(id_loc)obj(id_obj) référence la fonction locale id_loc de l´objet id_obj.
Exemples:
1) $(local(2)vol(1)): Imprime le texte de la 2ème fonction locale
du volume 1.
2) local("toto")vol(1)="b": Remplace la fonction locale toto du volume 1 par la fonction b.
3) edit local vol(1): Édite les noms des fonctions locales du volume 1.
4) $(local(2)vol(1)): Imprime le texte de la fonction locale 2 du volume 1.
5) w=local("toto")vol(1): Met dans w le texte de la fonction locale
toto du volume 1.
Exécution de fonctions locales
Exécution par défaut
Si yes local est actif, la 1ère fonction locale d´un volume est
exécutée avant l´affichage de celui-ci
Appels internes
Une fonction locale d´un objet peut en appeler une autre de ce même
objet par simple invocation de son nom (et il ne peut pas y avoir
d´ambiguite avec d´autres fonctions portant le même nom situées au dehors
de cet objet).
Appels externes
Il est possible d´exécuter n´importe quelle fonction locale de
n´importe quel objet, soit depuis un autre objet, soit depuis le programme
principal par:
exec local(n)vol(id);
exécute la fonction locale numéro n du
volume id sans paramètres.
exec local("toto")vol(id);
exécute la fonction locale toto du volume
id sans paramètres.
exec local(n)vol(id)var(x)var(y)var(z);
exécute la fonction locale
numéro n du volume id en lui passant les paramètres x, y, z.
VARIABLES
Variables externes
Comme toute fonction, une fonction locale peut avoir accès aux variables
externes qui sont connues partout.
Declaration:
extern nom_de_la_variable;
Variables statiques
Comme toute fonction, une fonction locale peut posséder des variables
statiques qui sont des varaibles permanentes mais connues à l´intérieur de
cette fonction.
Déclarations:
static x,y,z;
Définit les varaibles statiques x, y, z.
static x=(1,2,3);
Définit la variable statique x
Global variables
Des variables globales, c´est à dire propres à un objet et connues par
toutes les fonctions locales (et inconnues à l´extérieur), peuvent être définies
par la déclaration:
global g;
global g=1;
: en l´initialisant à 1.
EXEMPLE
demo1_local() lance l´exécution de la fonction demo1_local().
Cette fonction encapsule un même programme dans plusieurs cubes qui se comportent différamment.
Elle définit aussi une vue adaptative.