Nouveau type primaire SCOPE
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
+ 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
Related bugs
Sprints
Whiteboard
Work Items
Dependency tree
* Blueprints in grey have been implemented.