Nouveau type primaire SCOPE

Registered by Luc Bruninx

Il s'agit d'une version légère de NAMESPACE (anciennement OBJECT) qui n'implémente que l'encapsulation (ou la portée) de variables.

Cela implique que le constructeur public Node(Heap) ne retourne plus un Node.TYPE_OBJECT mais bien un Node.TYPE_SCOPE. Les scopes remplacent avantageusement les objects pour ce qui est des fermetures de fonctions (en pratique, il n'y a pas grand chose qui change à ce niveau - en d'autres termes, les scopes existent au même titre que les expressions paresseuses, puisque l'évaluation d'une expression paresseuse délimite une nouvelle portée (un nouveau scope)).

Ce qui change, c'est qu'à présent les scopes sont des données au même titre que les autres éléments du langage.

En outre, le qualifiant 'private' n'a plus de raison d'être car, il est maintenant possible de définir des variables liée à un namespace sans pour autant les ajouter à l'interface d'un objet, puis de partager le namespace entre plusieurs méthodes en tant que fermeture:

    (class 'Objet{
        (scope 'Private{
            (define 'x 0)
        })
        (function ':set!{(args 'a)(set! x a)} with Private)
        (function ':get{return x} with Private)
    })

Les formes acceptées sont les suivantes:
        + (scope 'Symbole {...})
        + (define 'Symbole (scope {...}))
        - Il ne faut pas autoriser la récupération du scope assigné à une fonction, car il est alors possible d'accéder à d'éventuelles variables privées. La privatisation des variables n'est correctement implémentée qu'en fermant l'accès aux niveau de la portées.

    - Dépréciation des prédicats private? et hidden? qui n'ont plus de raison d'être.
        Ceci permet d'optimiser Heap et de modifier le comportement de l'assignation du contexte
        d'évaluation des méthodes sur l'objet appelant et non celui d'origine (paternité)

    + Le type namespace est equipolent. Il est possible de déterminer si deux namespaces ont le même contenu (valeurs et symboles identiques).

    + Le test identitaire est également possible. Il s'agit d'une donnée composite transmise par référence.

    + Un scope est une structure finale même si son contenu peut être mutable. Le scope est similaire sur ce point à une paire. C'est la structure de la donnée qui est finale (le contenant), et non le contenu (la valeur).

    + Un scope est sérializable dans la mesure où ses éléments internes le sont également.

Blueprint information

Status:
Complete
Approver:
Luc Bruninx
Priority:
Essential
Drafter:
Luc Bruninx
Direction:
Approved
Assignee:
Luc Bruninx
Definition:
Approved
Series goal:
Accepted for 1.0
Implementation:
Implemented
Milestone target:
None
Started by
Luc Bruninx
Completed by
Luc Bruninx

Related branches

Sprints

Whiteboard

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.