From: "Alejandro R. Mosteo" <alejandro@mosteo.com>
Subject: package organization (is this doable?)
Date: Fri, 29 Jun 2018 17:45:28 +0200
Date: 2018-06-29T17:45:28+02:00 [thread overview]
Message-ID: <ph5k6p$ena$1@dont-email.me> (raw)
So the problem: I'm binding a C library with several types/features that
I'm splitting into several Ada packages. These packages must talk to each
other sometimes in terms of auxiliary types that I want to hide from the
user.
Even if I hide these types in a private package, or in the common parent
private part, I cannot think of a way of exposing some subprograms in one
package to the other, without also exposing them to users.
Example:
package Lib; -- Root package
package Lib.Feat_1; -- Some feature
package Lib.Feat_2; -- Another feature
private package Lib.Impl; -- Things I want to keep secret, conceptually
they're in the private part of Lib IIUC.
Am I right that it is impossible for Feat_1 and Feat_2 to communicate
using something that's private in Lib or Lib.Impl? That would mean
exposing those private types in their respective public parts, which is a
no go.
Right now I'm moving the things I don't want the user to see to a further
child, e.g.:
Lib.Feat_1.Impl;
Lib.Feat_2.Impl;
There, implementation type names/subprograms are visible but the idea is
that users never need these packages. And they can call each other. The
thing is, I feel like I'm missing some way of organizing things to make
what I want possible (that some types are never visible to the user). It
feels like a diamond problem in that I need a child of two packages
simultaneously (that could be entirely private).
Thanks,
Álex.
next reply other threads:[~2018-06-29 15:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-29 15:45 Alejandro R. Mosteo [this message]
2018-06-29 16:34 ` package organization (is this doable?) Simon Wright
2018-06-29 18:47 ` Alejandro R. Mosteo
2018-06-29 19:37 ` Simon Wright
2018-07-02 8:23 ` Alejandro R. Mosteo
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox