IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Contraintes d'Interval et Référence à Attribut(s)


Sujet :

Ada

  1. #1
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut Contraintes d'Interval et Référence à Attribut(s)
    Une contrainte d'interval, est par exemple de la forme 0..255 et peut être utilisée dans une déclaration de type comme type T is range 0..255;. [RM95 3.5 (2)]

    Une référence à un attribut, est par exemple de la forme Integer'First, cette expression désignant la plus petite valeur du type Integer. [RM95 4.1.4]

    Il est donc possible de créer une contrainte d'interval, avec des références à attributs. Et on devrait même avoir par exemple Integer'First..Integer'Last équivalent à Integer'Range (First, Last et Range, étant tous trois des attributs valides du type Integer)

    Now and then the problem arise, as follow...

    Je déclare ceci ...
    type T is range 0..16#FFFFFFFF#;
    for T'Size use 32; -- Exige que T soit physiquement sur 32 bits.
    type U is range 0..65535;
    for U'Size use 16; -- Exige que U soit physiquement sur 16 bits.
    Jusque là, Ok...
    Je poursuis en déclarant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type V is new T range U'Range;
    Et là, le compilateur me dit qu'il attend un T en lieu et place de U. Pourtant bien sûr, rien n'oblige à ce que V ait la même contrainte d'intetval que T. Bien au contraire...

    Même chose si j'essai de déclarer ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type V is new T range U'First..U'Last;
    Mais si je déclare d'une autre manière ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type V is new T range 0..65535;
    Là, le compilateur l'accepte. Les deux formes, type V is new T range U'Range; et type V is new T range 0..65535;, devraient pourtant êtres équivalentes, je pensais. Je ne comprends pas, parce U'Range est bien 0..65535, donc la même chose... et U'First est bien 0 et U'Last est bien 65535.

    Alors pourquoi le compilateur refuse la première et la deuxième forme, mais accepte la troisième ? J'ai un peu cherché dans le RM95, mais je n'ai pas trouvé la réponse.

    Do some one know about it ?

    Merci beaucoup par avance, shoukran jazilan

    (n.b. le compilateur est GNAT sous Windows)
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  2. #2
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    Ce n'est pas un problème de syntaxe, puisque mon code
    passe en compil (GNAT)

    je pense que c'est parce j'ai tout construit avec le même
    type de base (INTEGER)

    Or vous, vous avez construit 2 types de base (T et U)
    numériques certes mais n'ayant rien en commun. Donc pour
    ADA, vous mélangez les choux et les carottes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure Nrange is
       subtype Interv is integer range 0 .. 65535;
       type Newint is new Integer range Interv'range;
       type Newint2 is new Integer range Interv'first..interv'last;
       Bibi : Newint;
       Bibi2 : Newint2;
    begin
       Bibi := 10000;
       Bibi2 := 10000;
    end Nrange;

  3. #3
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Bonsoir,

    D'accord, mais les bornes de l'interval sont toujours du type Universal Integer, dans tous les cas... c'est là où à mon avis il n'y a pas de mélange de type. Le fait d'utiliser U ou autre chose ne change rien au fait les bornes sont des Universel Integer. J'aurais put utiliser une constante, le résultat aurait été le même...

    Bon, je trouve que c'est un peu fort de la part d'Ada (vu qu'il n'y a pas de mélange de type à proprement parler), mais je note quand même.

    Merci pour l'info
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  4. #4
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Ce n'est pas parceque ton type U est construit à partir des entiers que tu peux utiliser se valeurs comme des entiers.

    Si le type de U'First est bien U (ce qui me semble évident) alors il ne fait pas parti du type T.
    Ceci n'est donc point du tout aberrant que votre syntaxe soit refusée.
    "Oui mais U et T sont faits tous les deux à partir d'entiers".
    D'accord mais ils pourraient aussi être des types record qui contiennent des matrices à 3 dimension remplies de String.
    Le compilateur doit-il vérifier récursivement la construction des types pour savoir si on a bien le droit de considérer que U'First fait aussi parti de T ?

    Quelque chose qui peut parraitre encore plus étrange, le code suivant produit une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A : array(1..5);
    B : array(1..5);
     
    A := B;
    En effet A et B ne sont pas de même type.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  5. #5
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Pour l'incompatibilté des deux tableaux A et B, c'est normal... puisque les deux types interval sont anonymes.

    Pour la question du type des bornes, j'ai bien noté... mais ça ne me parraissait pas évident à moi, au contraire de toi... Comme on construit les intervals avec des entiers, je pensais que le type des attributs des bornes étaient entier... Je le plaçais à un autre niveau d'abstraction. Je comprends quand tu dis que c'est « évident »... mais l'autre manière de voir pouvait parraître « évidente » aussi.

    Ca fait partie des choses à savoir... al'an a3rif (maintenant je sais) oilà, oilà

    En tous cas, merci encore
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

Discussions similaires

  1. Réponses: 19
    Dernier message: 12/06/2014, 10h41
  2. Contrainte sur les attributs des tables référencées
    Par prgasp77 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2010, 18h00
  3. [MCD] Contrainte d'unicité sur un attribut
    Par piloupy dans le forum PowerAMC
    Réponses: 2
    Dernier message: 22/01/2008, 16h55
  4. attribut référence sur un vector
    Par youhil dans le forum SL & STL
    Réponses: 2
    Dernier message: 28/05/2006, 20h27
  5. [XSD] grouper une contrainte sur 2 attributs
    Par MathiasM dans le forum Valider
    Réponses: 3
    Dernier message: 19/04/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo