Le 19/01/2022 à 22:24, Thomas a écrit :
> en Ada 83 un sous-type pouvait déjà être dynamique ?
oui bien sûr, le principe a toujours été:
type => statique
Sous-type => dynamique
>> et une règle de compilation ne peut pas
>> dépendre de quelque chose qui n'est connu qu'à l'exécution.
>
> je ne comprend pas ce que tu dis, puisque le comportement attendu est de
> lever Constraint_Error à l'exécution.
??? Je ne sais pas où tu as vu ça... D'ailleurs, en 8.5.1 il n'y a même
pas de paragraphe "dynamic semantic".
Ce qui est important, c'est 8.5.1(6/2) qui dit clairement que tout ce
qu'on peut mettre dans la déclaration de surnom est ignoré, ce qui
compte c'est ce qui est dit dans la déclaration de l'objet d'origine.
>> A partir d'Ada 95, on a introduit la notion de "statically matching
>> subtypes", mais il a été estimé que cela compliquerait trop les choses
>> de l'appliquer aux rename,
>
> (peut-être que je comprendrai avec les questions précédentes)
>
>> et de toute façon ça ne pouvait pas marcher
>> dans tous les cas sans casser la compatibilité.
Ce que je veux dire, c'est que l'idéal aurait été que les définitions de
sous-type de la déclaration et de l'objet renommé correspondent, sous
peine d'erreur à la compilation. Mais en Ada83 ce n'était pas possible
puisqu'il n'y avait jamais de correspondance statique entre des
sous-types. Ada95 a introduit la notion de "statically matching
subtypes", mais l'utiliser pour un rename aurait conduit à interdire
tous les renames d'un objet dont le sous-type était dynamique => trop
incompatible.
>>> de même que l'interdiction du mot "constant", qui ne devrait pas
>>> forcément vérifier si l'objet pointé en est une, mais au moins que toute
>>> utilisation du surnom respecte ça.
Effectivement, on aurait pu imaginer un rename avec le mot "constant"
qui fournirait une vue constante d'une variable (comme un paramètre
"in"). Ca n'a pas été fait, et honnètement je ne sais pas ce qu'Ichbiah
avait en tête comme cas d'utilisation du rename. Mais je peux te dire
que ça complique énormément les outils d'analyse de code ;-)
[...]
> ce dont je parlais c'était plutôt ça :
>
> V : Integer := 0;
> C : constant Integer renames V;
>
> d'après mon expérience, c'est totalement interdit d'écrire ça,
> et d'après ce que j'ai compris du langage, c'est autorisé mais sans
> aucune conséquence (c'est pire).
Non, ce n'est pas dans la syntaxe du rename.
>
> en fait, ce qui me paraitrait logique, c'est que :
> - le surnom doive obligatoirement être marqué "constant" si l'objet
> pointé l'est, mais pas réciproquement,
C'est logique, mais on ne peut plus le rajouter maintenant, vu qu'on a
des rename de constantes qui n'utilisent pas le mot "constant"
> - l'usage autorisé du surnom dépende du marquage du surnom, pas de
> l'objet pointé.
>
Ca pourrait être rajouté au langage. On (l'ARG) est en train de mettre
en route un système pour centraliser les demandes des utilisateurs. Tu
pourras toujours le proposer quand ce sera annoncé...