Page 1 sur 1

Variables dynamiques et process fils...

Publié : lun. 14/mai/2007 14:31
par pastor
Bonjour,

Est-ce que les variables "dynamique" existent en Purebasic ?

Je m'explique, en PHP nous pouvons faire :

$var1 = "var2" (stockage de la chaine "var2" dans la variable var1)
$var2 = "Voici un texte" (stockage de la chaine "Voici un texte" dans la variable var2)

echo $var1 (Affiche le contenu de var1, en l'occurence le nom de la variable "var2")
echo $$var1 (Affiche le contenu de la variable var2 "Voici un texte")

Même exemple en shell unix :

$var1 = "var2" (stockage de la chaine "var2" dans la variable var1)
$var2 = "Voici un texte" (stockage de la chaine "Voici un texte" dans la variable var2)

echo $var1 (Affiche le contenu de var1, en l'occurence le nom de la variable "var2")
eval echo \$$var1 (Affiche le contenu de la variable var2 "Voici un texte")

Cordialement,

Laurent

Publié : lun. 14/mai/2007 16:27
par Dr. Dri
non ce n'est pas possible

Dri

Publié : lun. 14/mai/2007 18:09
par Backup
Dr. Dri a écrit :non ce n'est pas possible

Dri
et c'est bien dommage, ça me parait puissant comme truc !! :D
peut etre a suggerer a Fred :D

Publié : lun. 14/mai/2007 18:22
par Dr. Dri
Le problème c'est que PHP est un langage interprêté, donc les variables sont toujours désignées par leur nom. Dans un programme compilé on a plus que des adresses...

Dri

Publié : lun. 14/mai/2007 18:46
par Backup
Dr. Dri a écrit :Le problème c'est que PHP est un langage interprêté, donc les variables sont toujours désignées par leur nom. Dans un programme compilé on a plus que des adresses...

Dri
Ce serai possible, s'il y avait une phase de Preprocessing ! avant compilation (par passage par un Optcode comme en GFA ):D

Publié : lun. 14/mai/2007 20:02
par minirop
Dobro a écrit :
Dr. Dri a écrit :Le problème c'est que PHP est un langage interprêté, donc les variables sont toujours désignées par leur nom. Dans un programme compilé on a plus que des adresses...

Dri
Ce serai possible, s'il y avait une phase de Preprocessing ! avant compilation (par passage par un Optcode comme en GFA ):D
non car çà serait statique, si tu change la valeur de $var çà modifiera toujours $var2 (et pas l'autre).

Il faudrait une fonction qui garde en mémoire l'adresse de la variable dans un truc style hash-table.

Publié : lun. 14/mai/2007 20:21
par Backup
minirop a écrit :
Dobro a écrit :
Dr. Dri a écrit :Le problème c'est que PHP est un langage interprêté, donc les variables sont toujours désignées par leur nom. Dans un programme compilé on a plus que des adresses...

Dri
Ce serai possible, s'il y avait une phase de Preprocessing ! avant compilation (par passage par un Optcode comme en GFA ):D
non car çà serait statique, si tu change la valeur de $var çà modifiera toujours $var2 (et pas l'autre).

Il faudrait une fonction qui garde en mémoire l'adresse de la variable dans un truc style hash-table.
ha oui! :D

Publié : mar. 15/mai/2007 15:17
par pastor
Merci bien pour vos réponses, c'est dommage que ca ne puisse pas le faire, car c'est vraiment pratique et très puissant.

Ca permet au programme de créer, modifier et supprimer lui-même des variables selon ses besoins.

Dans le même ordre d'idée, est-ce que les fonctions eval de php ou du shell Unix existent sous Purebasic ?

Voici un bout de doc eval en PHP :

Code : Tout sélectionner

eval() évalue la chaîne code_str comme un script PHP. Parmi les utilisations possibles, cette fonction permet de stocker du code dans une base de données, pour utilisation ultérieure. 

<?php
$string = 'tasse';
$name = 'café';
$str = 'Ceci est une $string avec mon $name dedans.<br />';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?> 
L'exemple ci-dessus va afficher :

Ceci est une $string avec mon $name dedans.
Ceci est une tasse avec mon café dedans.

Si ca n'existe pas, ce que je redoute, ca serait vraiment dommage, dans ce cas de figure, peut-on lancer un sous-shell ou un thread enfant (bref un process fils) en Purebasic ? Ce qui reviendrait au même...

Laurent

Publié : mar. 15/mai/2007 15:33
par cha0s
on peut faire une lib pour sa mais sa serait dificil a utiliser.

Publié : mar. 15/mai/2007 17:52
par Patrick88

Code : Tout sélectionner

$string = 'tasse';
$name = 'café';
$str = 'Ceci est une $string avec mon $name dedans.<br />';
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
devient

Code : Tout sélectionner

string.s = "tasse"
name.s = "café"
strs.s = "Ceci est une "+string+" avec mon "+name+" dedans."
debug strs
<string> et <name> peuvent être des champs chargés depuis un fichier
ou des datas...

je comprends pas où est le problème....

pat

Publié : mer. 16/mai/2007 9:29
par pastor
Patrick,

En faite, mon exemple simplifié à l'extrême était fait pour expliciter mon propos. Il montre une double évaluation de la variable, qui peut même être triple ou plus...

Ton exemple est bon, pour répondre à ce besoin très simple, mais il ne fait qu'une simple évaluation.

De manière plus puissante la fonction eval permet par exemple de stocker une portion de code dans une variable puis de l'éxécuter dynamiquement.

Le code peut aussi être stocké dans une base de données, il peut ensuite être lu, adapté et exécuté ensuite selon le contexte.

Ca nous donne un programme auto-adaptatif...

Il faudrait pour cela, que le programme que l'on a écrit puisse faire une compilation "à la volée" et une exécution dans un processus fils.

Et finalement, ca rendrait Purebasic interprétable (ou scriptable) si on lui fait lire et exécuter un fichier txt.

Je verrais bien Purebasic, qui est finalement (je m'en rend compte à l'usage) un language très puissant et évolué, capable de faire ce genre de chose. Ca démultiplierait par ce faite ses possibilités.

Laurent

Publié : mer. 16/mai/2007 10:06
par Backup
pastor a écrit :Patrick,

En faite, mon exemple simplifié à l'extrême était fait pour expliciter mon propos. Il montre une double évaluation de la variable, qui peut même être triple ou plus...

Ton exemple est bon, pour répondre à ce besoin très simple, mais il ne fait qu'une simple évaluation.

De manière plus puissante la fonction eval permet par exemple de stocker une portion de code dans une variable puis de l'exécuter dynamiquement.

Le code peut aussi être stocké dans une base de données, il peut ensuite être lu, adapté et exécuté ensuite selon le contexte.

Ca nous donne un programme auto-adaptatif...

Il faudrait pour cela, que le programme que l'on a écrit puisse faire une compilation "à la volée" et une exécution dans un processus fils.

Et finalement, ca rendrait Purebasic interprétable (ou scriptable) si on lui fait lire et exécuter un fichier txt.

Je verrais bien Purebasic, qui est finalement (je m'en rend compte à l'usage) un language très puissant et évolué, capable de faire ce genre de chose. Ca démultiplierait par ce faite ses possibilités.

Laurent
ce que tu montre c'est que PHP est un language "surcouche" (des base de données et des protocoles internet)
en purebasic on utilise pour faire ce que tu dit des procedures et autre sous-programme a l'aide de conditions (if,Case ect..)

le but n'étant pas le même :D

je pense que tout ce qui est fait en PHP pourrait (en se cassant les méninges) être fait en purebasic

alors que l'inverse n'est pas vrais ! :D

d'un autre coté le PHP est fait pour l'internet, alors que le purebasic, lui est fait pour des applications autonomes , bref, la divergence est la surtout :D

Publié : mer. 16/mai/2007 10:55
par Patrick88
dobro a créé une fonction eval() pour son puregolo...

pat