Discussion:
Private package Implementation.
(trop ancien pour répondre)
Blady
2019-11-11 17:41:26 UTC
Permalink
Bonjour,

Dans le manuel Ada, chapitre A.18.28 The Generic Package
Containers.Unbounded_Synchronized_Queues:

package Ada.Containers.Unbounded_Synchronized_Queues is
pragma Preelaborate(Unbounded_Synchronized_Queues);

package Implementation is
... -- not specified by the language
end Implementation;

...

Est-ce que Implementation qui semble indispensable mais ne concerne pas
l'utilisateur ne pourrait-il pas être privé ?

private package Implementation is
... -- not specified by the language
end Implementation;

Quel est votre avis ?

De même : A.18.29 The Generic Package
Containers.Bounded_Synchronized_Queues, A.18.30 The Generic Package
Containers.Unbounded_Priority_Queues et A.18.31 The Generic Package
Containers.Bounded_Priority_Queues.

Merci, Pascal.
J-P. Rosen
2019-11-12 06:36:32 UTC
Permalink
Post by Blady
Dans le manuel Ada, chapitre A.18.28 The Generic Package
package Ada.Containers.Unbounded_Synchronized_Queues is
   pragma Preelaborate(Unbounded_Synchronized_Queues);
   package Implementation is
      ... -- not specified by the language
   end Implementation;
...
Est-ce que Implementation qui semble indispensable mais ne concerne pas
l'utilisateur ne pourrait-il pas être privé ?
   private package Implementation is
      ... -- not specified by the language
   end Implementation;
Quel est votre avis ?
Le manuel annoté (AARM) dit:

Discussion: Nested package Implementation can be used to declare the
types needed to implement the protected type Queue. This nested package
is necessary as types cannot be declared in the private part of a
protected type, and the types have to be declared within the generic
unit in order to depend on the types imported with package
Queue_Interfaces. Clients should never depend on the contents of nested
package Implementation.


NB: quand on commence à se pencher sur les points obscurs/épineux du
langage, le manuel annoté est une ressource passionnante...
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Blady
2019-11-15 07:13:04 UTC
Permalink
Post by J-P. Rosen
Post by Blady
Dans le manuel Ada, chapitre A.18.28 The Generic Package
package Ada.Containers.Unbounded_Synchronized_Queues is
   pragma Preelaborate(Unbounded_Synchronized_Queues);
   package Implementation is
      ... -- not specified by the language
   end Implementation;
...
Est-ce que Implementation qui semble indispensable mais ne concerne pas
l'utilisateur ne pourrait-il pas être privé ?
   private package Implementation is
      ... -- not specified by the language
   end Implementation;
Quel est votre avis ?
...
Clients should never depend on the contents of nested
package Implementation.
Pourquoi ne pas ajouter private alors ?

Merci Pascal.
J-P. Rosen
2019-11-15 10:41:37 UTC
Permalink
Post by Blady
Post by J-P. Rosen
Post by Blady
Dans le manuel Ada, chapitre A.18.28 The Generic Package
package Ada.Containers.Unbounded_Synchronized_Queues is
    pragma Preelaborate(Unbounded_Synchronized_Queues);
    package Implementation is
       ... -- not specified by the language
    end Implementation;
...
Est-ce que Implementation qui semble indispensable mais ne concerne pas
l'utilisateur ne pourrait-il pas être privé ?
    private package Implementation is
       ... -- not specified by the language
    end Implementation;
Quel est votre avis ?
...
Clients should never depend on the contents of nested
package Implementation.
Pourquoi ne pas ajouter private alors ?
Comment ça, rajouter private? Tu veux dire, mettre le paquetage
Implementation en partie privée?

Ce n'est pas possible, car l'idée est d'y mettre des déclarations
nécessaires à la partie privée du type protégé Queue, qui doit être visible.

Note 1: dans un type protégé, on ne peut pas déclarer n'importe quoi, en
particulier on ne peut pas déclarer de type interne. C'est comme dans un
record, ce n'est pas comme dans un paquetage.

Note 2: Tant que le paquetage Implementation ne déclare que des types,
c'est assez anodin si jamais l'utilisateur extérieur les utilise. Il ne
faudrait évidemment pas y mettre des sous-programmes avec un gros
commentaire "NE PAS APPELER" ;-)
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Blady
2019-11-15 20:32:39 UTC
Permalink
Post by J-P. Rosen
Post by Blady
Post by J-P. Rosen
Post by Blady
Dans le manuel Ada, chapitre A.18.28 The Generic Package
package Ada.Containers.Unbounded_Synchronized_Queues is
    pragma Preelaborate(Unbounded_Synchronized_Queues);
    package Implementation is
       ... -- not specified by the language
    end Implementation;
...
Est-ce que Implementation qui semble indispensable mais ne concerne pas
l'utilisateur ne pourrait-il pas être privé ?
    private package Implementation is
       ... -- not specified by the language
    end Implementation;
Quel est votre avis ?
...
Clients should never depend on the contents of nested
package Implementation.
Pourquoi ne pas ajouter private alors ?
Comment ça, rajouter private? Tu veux dire, mettre le paquetage
Implementation en partie privée?
Ce n'est pas possible, car l'idée est d'y mettre des déclarations
nécessaires à la partie privée du type protégé Queue, qui doit être visible.
Note 1: dans un type protégé, on ne peut pas déclarer n'importe quoi, en
particulier on ne peut pas déclarer de type interne. C'est comme dans un
record, ce n'est pas comme dans un paquetage.
Note 2: Tant que le paquetage Implementation ne déclare que des types,
c'est assez anodin si jamais l'utilisateur extérieur les utilise. Il ne
faudrait évidemment pas y mettre des sous-programmes avec un gros
commentaire "NE PAS APPELER" ;-)
Je voulais dire ajouter juste le mot clé private devant la déclaration
actuelle ce qui donnerait :

package Ada.Containers.Unbounded_Synchronized_Queues is
pragma Preelaborate(Unbounded_Synchronized_Queues);

private package Implementation is
... -- not specified by the language
end Implementation;

....

Comme ça pas de possibilité d’appeler le contenu de Implementation par
le programme client. Est-ce correct ?

Merci, Pascal.
Jeffrey R. Carter
2019-11-15 22:23:12 UTC
Permalink
Post by Blady
package Ada.Containers.Unbounded_Synchronized_Queues is
   pragma Preelaborate(Unbounded_Synchronized_Queues);
   private package Implementation is
      ... -- not specified by the language
   end Implementation;
....
Comme ça pas de possibilité d’appeler le contenu de Implementation par le
programme client. Est-ce correct ?
Seulement les packages qui sont des "compilation units" peut etre private.
--
Jeff Carter
"When danger reared its ugly head, he bravely
turned his tail and fled."
Monty Python and the Holy Grail
60
Blady
2019-11-16 09:15:44 UTC
Permalink
Post by Jeffrey R. Carter
Post by Blady
package Ada.Containers.Unbounded_Synchronized_Queues is
    pragma Preelaborate(Unbounded_Synchronized_Queues);
    private package Implementation is
       ... -- not specified by the language
    end Implementation;
....
Comme ça pas de possibilité d’appeler le contenu de Implementation par
le programme client. Est-ce correct ?
Seulement les packages qui sont des "compilation units" peut etre private.
Bonjour Jeff et Jean-Pierre,

Pourtant GNAT ne s'en plaint pas et n'autorise pas de fait l'accès à T1 :

47. package OP is
48.
49. private package IP is -- private added
50. type T1 is private;
51. private
52. type T1 is new Integer;
53. end IP;
54.
55. protected type PT is
56. entry E;
57. private
58. V : IP.T1;
59. end PT;
60. end OP;
61.
62. package body OP is
63. protected body PT is
64. entry E when True is
65. begin
66. null;
67. end E;
68. end PT;
69. end OP;
70.
71. D : OP.IP.T1;

test32.adb:71:10: error: "IP" is not a visible entity of "OP"

Est-ce un défaut de GNAT ?

Ainsi, ne faudrait-il pas l'autoriser dans le langage ?

Ou sinon augmenter les possibilités de déclarations dans un PO voir une
discussion précédente.

Merci, Pascal.
Jeffrey R. Carter
2019-11-16 19:07:26 UTC
Permalink
47.    package OP is
48.
49.    private -- OP <<===============================
package IP is -- private added
50.          type T1 is private;
51.       private
52.          type T1 is new Integer;
53.       end IP;
54.
55.       protected type PT is
56.          entry E;
57.       private
58.          V : IP.T1;
59.       end PT;
60.    end OP;
61.
62.    package body OP is
63.       protected body PT is
64.          entry E when True is
65.          begin
66.             null;
67.          end E;
68.       end PT;
69.    end OP;
70.
71.    D : OP.IP.T1;
test32.adb:71:10: error: "IP" is not a visible entity of "OP"
Ce n'est pas "private package IP". C'est "package IP' dans la partie privee d'OP.
--
Jeff Carter
"Death awaits you all, with nasty, big, pointy teeth!"
Monty Python & the Holy Grail
20
Blady
2019-11-17 09:08:11 UTC
Permalink
47.    package OP is
48.
49.    private -- OP  <<===============================
            package IP is -- private added
50.          type T1 is private;
51.       private
52.          type T1 is new Integer;
53.       end IP;
54.
55.       protected type PT is
56.          entry E;
57.       private
58.          V : IP.T1;
59.       end PT;
60.    end OP;
61.
62.    package body OP is
63.       protected body PT is
64.          entry E when True is
65.          begin
66.             null;
67.          end E;
68.       end PT;
69.    end OP;
70.
71.    D : OP.IP.T1;
test32.adb:71:10: error: "IP" is not a visible entity of "OP"
Ce n'est pas "private package IP". C'est "package IP' dans la partie privee d'OP.
Arghhhh oui cela change tout! Merci Jeff pour cet éclairage particulier,
Pascal.

J-P. Rosen
2019-11-15 22:57:03 UTC
Permalink
Post by Blady
Je voulais dire ajouter juste le mot clé private devant la déclaration
package Ada.Containers.Unbounded_Synchronized_Queues is
   pragma Preelaborate(Unbounded_Synchronized_Queues);
   private package Implementation is
      ... -- not specified by the language
   end Implementation;
....
Comme ça pas de possibilité d’appeler le contenu de Implementation par
le programme client. Est-ce correct ?
Ben non. Cette syntaxe n'existe pas pour un sous-paquetage. Seule une
unité de bibliothèque (non contenue dans quelque chose d'autre) peut
être private.
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Continuer la lecture sur narkive:
Loading...