afficher >><< masquer ]
SAMPI - Editeur structuré
1. Le Problème et la Proposition
2. Le Langage Primitif de Représentation Textuelle
2.1. Présentation de la Syntaxe Concrète
2.2. Notations
2.3. Exemple de structuration des données
2.4. Exemple de structuration des traitements
2.5. Exemple de structurations connexes
3. Le Langage Complété pour la Structuration des Textes
3.1. Présentation de la Syntaxe Complétée
3.2. Etude quantitative de l'évolution des programmes
3.3. L'édition syntaxique
3.4. étude de cas : le langage LTR3 et l'atelier ENTREPRISE
4. L'Enrichissement du Langage par de Nouveaux Concepts
4.1. Présentation de la Syntaxe Abstraite
4.2. Les difficultés
4.3. Compléter la Syntaxe
5. La Formalisation des Solutions Techniques
5.1. L'évaluation fonctionnelle
5.2. La structuration par les objets
5.3. Modèle sémantique comparé de l'évaluateur
5.4. Comparaison critique
5.5. Construction de la Syntaxe Abstraite
6. Les Comparaisons avec d'autres Approches
7. Les Perspectives
8. Les Editeurs
8.0. brisé sur la barrière de la complexité (une fois de plus)
8.1. L'éditeur ligne : Manuel de l'utilisateur
8.2. L'éditeur page : Guide de l'utilisateur
9. Les Aspects d'Implantation
9.1. Contexte d'évaluation
9.1.0. Introduction
9.1.1. Modularité
9.1.2. Encapsulation
9.1.3. Paramètre
9.1.4. Emploi par référence
9.1.44.1. Exemples
9.1.44.2. Contre-exemple
9.1.44.3. Contre-contre-exemple
9.1.5. Exemples d'application
9.1.6. Héritage de propriétés
9.1.7. Polymorphisme
9.1.8. Manipulation symbolique
9.1.9. Le contexte d'évaluation
9.2. La Syntaxe Abstraite : Manuel du concepteur
9.3. L'éditeur page : Guide de l'implanteur
Références
Rubrique Perl-Javascript

Emploi par référence

1. Exemples

2. Contre-exemple

3. Contre-contre-exemple

3. Contre-contre-exemple

Premier contre-contre-exemple

On pourrait décider, quand un texte est trouvé, de conserver tout le contexte dans lequel il a été trouvé.

Dans l'exemple précédent, la recherche du texte p aurait retourné le contexte complet :

Contre-exemple d'emploi par référence

Mais on introduirait alors d'autres effets de bord.

Par exemple, on définit les textes k et X :

def k = "K0"

def X
   def a = (use k)
   def b = (use a
              (def k = "K1"))

C'est pourtant la définition de k "la plus externe" ("K0") qui sera prise.

En effet, on évalue b dans l'environnement global :

Premier contre-contre-exemple d'emploi par référence

On évalue la représentation de b :

Premier contre-contre-exemple d'emploi par référence

On évalue l'environnement local d'utilisation :

Premier contre-contre-exemple d'emploi par référence

On indique ici le contexte dans lequel on trouve le texte a :

Premier contre-contre-exemple d'emploi par référence

On évalue alors la représentation de a dans ce contexte :

Premier contre-contre-exemple d'emploi par référence

(use k) s'évalue alors en : "K0" et non en : "K1".

L'inconvénient majeur que l'on peut voir ici est qu'on ne peut plus avoir de vision locale des textes. Une vision locale de l'exemple est la suivante :

def a = (use k)
def b = (use a
           (def k = "K1"))

Les déclarations regroupées des textes a et b admettent une interprétation simple : k est un paramètre de a instancié par b, ce qui se révèle être faux quand on sait que dans les environnements supérieurs on a déjà défini un texte k.

Deuxième contre-contre-exemple

On peut souhaiter effectivement réaliser un effet de bord. Par exemple :

def a
   def x = "X0"
   def m = (use x)

def c = (use m
           (def x = "X1")
           (ref a))

On peut remarquer ici encore que le cas présenté est assez particulier :

Si on garantit l'ordre de recherche – indispensable dans l'exemple – on peut alors masquer des déclarations par des redéfinitions. Dans tous les cas, puisque l'on définit un environnement local qui n'est pas une simple expression de chemin, on sait qu'on se place dans une situation où pourront se produire des effets de bord non voulus.

Remarque

Il serait toujours loisible d'assurer un contrôle de visibilité des identificateurs : il suffit en effet de vérifier qu'à un même niveau on n'a pas deux définitions du même identificateur. On pourrait donc prévoir l'envoi d'un message de mise en garde, qui permettrait à l'utilisateur d'avoir connaissance des zones sensibles.

Par exemple, dans le (contre-)exemple précédent, sachant qu'on a trouvé la définition de x dans d, on n'a à rechercher une éventuelle autre définition de x que dans la zone grisée :

Impact de la mise en garde dans l'emploi par référence