Variables dynamiques et process fils...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

Variables dynamiques et process fils...

Message 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
Dernière modification par pastor le mar. 15/mai/2007 15:18, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

non ce n'est pas possible

Dri
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

Message 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
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

on peut faire une lib pour sa mais sa serait dificil a utiliser.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message 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
pastor
Messages : 54
Inscription : sam. 14/avr./2007 22:59

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

dobro a créé une fonction eval() pour son puregolo...

pat
Répondre