Créer un substitut plus puissant que With: EndWith

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Créer un substitut plus puissant que With: EndWith

Message par Ollivier »

(largement même...)

Bonjour, With: EndWith, c'est déjà bien.

Mais souvent ça n'enlève pas tout le temps perdu à retaper ses champs de structure quand on traite avec plusieurs structures. Or, on traite la plupart du temps avec plusieurs structures, et pas des moindres quand elles sont imbriquées sur de multiples étages...

Voici un code fictif pour constater la pratique.
Le but ne serait plus de chercher à imbriquer des With: EndWith mais à traiter avec un équivalent de With: EndWith comme on traiterait avec des balises. L'ordre d'imbrication n'aurait plus d'importance.

Cette balise "With" jouerait un rôle similaire à une macro temporaire.
Elle devrait donc comporter un nom d'usage et le préfixe usuel de champ de structure.
Le nom d'usage servirait à invoquer le préfixe de champ de structure attribué.

A la manière de

Code : Tout sélectionner

With StructureChampPrefixe
On pourrait disposer de

Code : Tout sélectionner

/StructureChampPrefixeNomUsuel= StructureChampPrefixe
Et à la manière de:

Code : Tout sélectionner

EndWith
On pourrait disposer de...

Code : Tout sélectionner

/StructureChampPrefixeNomUsuel
...pour "clôturer" tout simplement.

Je montre l'exemple en utilisant le caractère "/" (barre de division). C'est une hypothèse. Je la trouve possible puisque ça ne rentre pas en conflit avec la syntaxe actuelle du langage (la division par zéro n'existant pas, la double barre " .../ /StructureChampPrefixeNom\Champ... " indiquerait une division par une variable d'un champ de structure).

Le tout serait évidemment supplémentaire à With: EndWith.

Difficile à expliquer! Mais rudement simplificateur en pratique.

Code : Tout sélectionner

; Equivalents d'un "With multiple"
/Def = *Root\Desk\DefaultWindow
/Current = *Root\Desk\Window()

With /Current

; Usage
\X = /Def\X
\Y = /Def\Y
OpenWindow(#Pb_Any, \X, \Y, etc...)

EndWith

; Clôtures
/Def
/Current
Si quelqu'un a une alternative, je suis preneur.
Ici, l'exemple n'est pas flagrant: il n'y a que 2 champs x et y.
Mais quand on se tape la douzaine de champs répartis dans des structures de plusieurs étages (ça peut très vite aller loin en profondeur), on se rend très vite compte que c'est très très pratique.
Cerise sur le gateau: le compilateur obtient directement du programmeur des repères de référence pour optimiser à bloc les accès mémoire. Résultat:
Non seulement le programmeur construit plus facilement des usines à gaz en toute simplicité.
En plus, le compilateur possèderait des directives programmeur pour digérer la complexité desdites usines à gaz et donc ne rien perdre en performance...
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Créer un substitut plus puissant que With: EndWith

Message par Ollivier »

J'ai dit une connerie?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Créer un substitut plus puissant que With: EndWith

Message par graph100 »

Pas pour moi, et d'ailleurs comme je suis en train de lire tout les posts du fofo depuis 1mois, j'approuve ici toutes tes autres demandes antérieures à ce message.
Elles me semblent pertinentes, et pratiques !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Créer un substitut plus puissant que With: EndWith

Message par Ollivier »

Graph100 a écrit :Pas pour moi, et d'ailleurs comme je suis en train de lire tout les posts du fofo depuis
1mois, j'approuve ici toutes tes autres demandes antérieures à ce message.
Elles me semblent pertinentes, et pratiques !
Ouaip... Mais là... J'ai un problème. Pour préciser ce problème, je dirais "Context error"! Je m'explique...

Quand je lis ton message, je peux imaginer:
1) qu'à ma question "j'ai dit une connerie?", tu réponds "pas pour moi".
2) qu'à ta phrase " j'approuve ici toutes tes autres demandes antérieures à ce message." si "ce message" c'est le tiens, ce sont toutes mes demandes que tu approuves.

Conclusion A: J'imagine que tu estimes que je ne dis pas de connerie et que tu approuves toutes mes demandes.

Mais...
1) Quand je lis ton même message, je peux imaginer aussi que quand tu réponds "pas pour moi", c'est au sujet tout entier que tu réponds négativement...
2) Quand je lis ta phrase "j'approuve ici toutes tes autres demandes antérieures à ce message.", et que ce message c'est le mien, ci-dessus, en tête de sujet. Si je regarde sa date, je n'ai pratiquement pas fait beaucoup de suggestion à la date antérieure à ce message-là...

Conclusion B: tu recales ma suggestion par un "Pas pour moi" et tu dis que tu préfères mes suggestions à une période où je n'en faisais pas de suggestions!


Alors, ma question, Graph100, est manichéenne:
Est-ce que tu approuves ce que j'ai dit ou bien, est-ce que tu me recales ironiquement la tronche?!?
Parce qu'entre la conclusion A et la conclusion B, même en faisant le grand écart, j'ai les deux pieds dans le vide!

That is the question, because I have not the context là... I suppose your were fatigouèche duraingue the writaingue...
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Créer un substitut plus puissant que With: EndWith

Message par Ollivier »

Pour préciser ce qui m'apporte à faire une telle suggestion, il faut d'ailleurs que je précise moi-même un détail qui me fait déclencher.

Avant, les structures étaient "statiques", fixées une bonne fois pour toute. Pour les lier entre elles ou bien d'une structure à un ensemble de structures, il fallait user des pointeurs.

Mais... Ça, c'était "avant"...
Fred est passé par là, a sorti le bouclier et l'épée et a décrété vaillamment une défonce ouverte de concept, avec ouverture non modérée des portes de la problématique :

"on va intégrer du dynamique dans ce qui était statique"

Résultat: une structure peut puissamment posséder des listes et des tableaux.
Conséquence: le programmeur n'a plus besoin de pointeur forcément et proprement dits. Par cette innovation, une autre manière de programmer est née.

On définit ses structures, on alloue un seul pointeur (la racine) et on initialise un arbre de structures dynamiques articulées par des pointeurs implicites au sein même des structures.

Résultat: simplification, structuration totale, modulation, etc...
Sauf que ces variables "hyper structurées dynamiquement" (ou "contexte") doivent être "complètement" écrites si on en traite deux ou plus, car "with" ne créée un "raccourci de frappe" que pour UN contexte, pas pour PLUSIEURS contextes.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Créer un substitut plus puissant que With: EndWith

Message par graph100 »

Effectivement, ton raisonnement se tient dans les deux cas !
Mais tu as oublié de prendre un paramètre en compte : si graph100 n'était pas content, graph100 te l'aurait fait savoir :mrgreen:

Donc, pour entrer dans le filtre manichéen par lequel tu veux m'observer, j'entendais bien sur la conclusion A.

Je n'ai mentionné l'antériorité de tes messages qu'uniquement pour ne pas te donner mon aval illimité et désordonné :lol:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Créer un substitut plus puissant que With: EndWith

Message par Ollivier »

Graph100 a écrit :Je n'ai mentionné l'antériorité de tes messages qu'uniquement pour ne pas te donner
mon aval illimité et désordonné
Ma conclusion spéculative est que tu donnes un aval limité et ordonné. Si c'est le cas, c'est judicieux en effet.
Déjà, je te remercie de t'être penché sur ces sujets et d'en apporter un avis.

Ensuite, c'est vrai que si demain, je suggère à Fred d'étendre son compilateur à la confection d'un OS, ou autre illumination aussi subite qu'irréaliste, tu pourras toujours dire:" Attention! J'ai bien dit 'date antérieure' et 'depuis 1 mois' mes approbations, pas toutes les folies qu'il a pu balancer avant et qu'il balancera après! D'ailleurs, je ne connais pas du tout ce fêlé !!!".

J'aquiesce bien évidemment la prudence de ton approbation. Si ça peut te rassurer, je ne demanderai pas l'impossible à Fred.

Mais c'est vrai que quand ça semble à portée de main, autant en faire part. Il faut savoir que son compilateur progresse et reste compatible avec du vieux matériel, compile toujours aussi vite et bien, sur ces mêmes vieilles bécanes. Donc il avait prévu quelques coups possibles plusieurs années à l'avance, ce qui n'est pas sans être exceptionnel, dans une équipe qui compte une poignée de personnes.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Créer un substitut plus puissant que With: EndWith

Message par graph100 »

Exactement !

J'apprécie ce que tu fais Ollivier :mrgreen: :mrgreen:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre