Suppression des types "quotés" inexistants
La gestion des types "quotés" a été revue.
En effet, les révisions précédentes permettaient de "quoter" n'importe quel type de données.
Or, il faut faire une distinction entre les données "vivaces" des objets actifs en mémoire et les éléments abstraits.
Ainsi, si on écrit '(function {display "Hello!"}) qu'a t-on quoté ?...
On a quoté l'expression (function {display "Hello!"}) qui est une représentation abstraite de la fonction qui sera "vivace" dans la mémoire de l'ordinateur lorsque ce code aura été évalué.
On comprend donc mieux la notion de "quotation". Il s'agit d'une forme particulière de sérialisation.
Rappelons que la sérialisation consiste à transcrire un objet "vivace" en une forme "abstraite" que l'on pourra dé-sérialiser pour obtenir un nouvel objet "vivace" conforme au premier. Le deuxième objet est un clone du premier. Mais ce qu'il faut bien retenir, c'est que l'objet résultant de la sérialisation n'est pas "vivace", il s'agit d'une forme abstraite.
Cela dit, il est possible de sérialiser dans une multitude de formats (XML, properties, binaire, etc...). Lorsqu'on quote un objet "vivace", on doit donc obtenir une forme sérialisée de l'objet qui permet lorsqu'on la dé-sérialise d'obtenir une copie conforme au premier.
La quotation est donc une forme de sérialisation qui respecte un format établi : le langage lui-même. Ainsi, on peut sérialiser un objet dans une multitude de formats, mais on ne peut peut quoter que dans un seul et unique format, le code d'un programme Abstrasy.
Bien sûr, pour que ce code ne soit pas immédiatement évalué, l'opérateur syntaxique 'quote' indique que l'expression doit être prise tel quel sans l'évaluer (jusqu'à un 'unquote' qui force l'évaluation).
Les types suivants n'existent donc pas sous forme quotée:
- nothing
- scope
- namespace
- external
- function
- pattern
- interface
Tous sont "quoté" sous la forme d'une expression.
Ceci est très important car il est maintenant possible d'améliorer encore d'avantage la généricité du langage et la métaprogrammation.
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