comp.lang.ada
 help / color / mirror / Atom feed
* How do I "with" Numerics without linking BLAS, LAPACK? (and more)
@ 2010-08-31  8:24 Jerry
  2010-08-31  8:39 ` J-P. Rosen
  0 siblings, 1 reply; 3+ messages in thread
From: Jerry @ 2010-08-31  8:24 UTC (permalink / raw)


This is probably going to be confusing...

I have a problem with the PLplot bindings to which I can't figure out
a decent solution.

The Ada bindings use vectors and matrices defined like this:

    type Real_Vector is array (Integer range <>) of Long_Float;
    type Real_Matrix is array (Integer range <>, Integer range <>) of
Long_Float;

These can be either defined exactly like the above in the bindings
proper or, in the case of Ada 2005, from the declarations from GNAT's
a-nlrear.ads which are effectively exactly the same. For example,
these subtypes work: (Subtyping makes distributing the declaration to
the various packages easy.)

    with Ada.Numerics.Long_Real_Arrays;
    subtype Real_Vector is Ada.Numerics.Long_Real_Arrays.Real_Vector;
    subtype Real_Matrix is Ada.Numerics.Long_Real_Arrays.Real_Matrix;

As long as the user program uses whichever of these types is specified
in the bindings, the program will work OK. But there are two problems.

(1) (Compiler is Ada 2005.) If the second method is used, the numerics
libraries BLAS and LAPACK have to be linked. This seems like an
onerous requirement simply to gain access to the vector and matrix
types and nothing actually from BLAS or LAPACK. In the past, we have
made this work with some cmake magic but some users have complained,
some having trouble linking the libraries, and personally this
approach seems like a lot of baggage. On the other hand, if the user
program actually needs to use something from those libraries, or if
the user simply wants to use the "official" types, the second method
is the only way to go because the first declaration style will result
in types that are incompatible with a-nlrear.ads.

(2) (Compiler is Ada 95.) In this case, obviously, the first set of
declarations will have to be used because the second set is specific
to Ada 2005. So the first method guarantees 95/2005 compatibility.

I can't figure out a way to make everyone happy: Maintain 95/2005
compatibility, don't require linking large libraries that aren't used,
but keeping the option to link to those libraries for those who want
them.

I have recently changed the bindings so that the first method is used
and I plan to make a note in the documentation to the effect that if
the user wants to use the "official" declarations and/or wants to link
the libraries, he/she should first do an ordinary PLplot build but
then comment/uncomment a very small number of lines in only one file
and recompile the bindings only, not the entire PLplot, thus bypassing
the Ada-specific library in PLplot. For some users, will add an extra
step to the already-difficult PLplot installation process.

If the declarations in the second method could be accessed without
requiring linking the libraries, I would consider abandoning Ada 95
compatibility, which raises the question, what fraction of new GNAT
programs are still being written in Ada 95?

I hope this is clear. Is there some way that can meet all of these
requirements?

TIA,
Jerry



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: How do I "with" Numerics without linking BLAS, LAPACK? (and more)
  2010-08-31  8:24 How do I "with" Numerics without linking BLAS, LAPACK? (and more) Jerry
@ 2010-08-31  8:39 ` J-P. Rosen
  2010-09-01  0:05   ` Jerry
  0 siblings, 1 reply; 3+ messages in thread
From: J-P. Rosen @ 2010-08-31  8:39 UTC (permalink / raw)


Le 31/08/2010 10:24, Jerry a �crit :
> This is probably going to be confusing...
> 
> I have a problem with the PLplot bindings to which I can't figure out
> a decent solution.
> 
> The Ada bindings use vectors and matrices defined like this:
> 
>     type Real_Vector is array (Integer range <>) of Long_Float;
>     type Real_Matrix is array (Integer range <>, Integer range <>) of
> Long_Float;
> 
> These can be either defined exactly like the above in the bindings
> proper or, in the case of Ada 2005, from the declarations from GNAT's
> a-nlrear.ads which are effectively exactly the same. For example,
> these subtypes work: (Subtyping makes distributing the declaration to
> the various packages easy.)
> 
>     with Ada.Numerics.Long_Real_Arrays;
>     subtype Real_Vector is Ada.Numerics.Long_Real_Arrays.Real_Vector;
>     subtype Real_Matrix is Ada.Numerics.Long_Real_Arrays.Real_Matrix;
> 
> As long as the user program uses whichever of these types is specified
> in the bindings, the program will work OK. But there are two problems.
> 
> (1) (Compiler is Ada 2005.) [...] if
> the user simply wants to use the "official" types, the second method
> is the only way to go because the first declaration style will result
> in types that are incompatible with a-nlrear.ads.
> 
Not really, since they are convertible to the types in a-nlrear.ads.
That would require a bit of extra typing when calling the functions, but
likely zero run-time overhead.

(Array conversions can be quite useful - but few people are aware of
this possibility).
-- 
---------------------------------------------------------
           J-P. Rosen (rosen@adalog.fr)
Visit Adalog's web site at http://www.adalog.fr



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: How do I "with" Numerics without linking BLAS, LAPACK? (and more)
  2010-08-31  8:39 ` J-P. Rosen
@ 2010-09-01  0:05   ` Jerry
  0 siblings, 0 replies; 3+ messages in thread
From: Jerry @ 2010-09-01  0:05 UTC (permalink / raw)


On Aug 31, 1:39 am, "J-P. Rosen" <ro...@adalog.fr> wrote:
> Le 31/08/2010 10:24, Jerry a écrit :
>
>
>
> > This is probably going to be confusing...
>
> > I have a problem with the PLplot bindings to which I can't figure out
> > a decent solution.
>
> > The Ada bindings use vectors and matrices defined like this:
>
> >     type Real_Vector is array (Integer range <>) of Long_Float;
> >     type Real_Matrix is array (Integer range <>, Integer range <>) of
> > Long_Float;
>
> > These can be either defined exactly like the above in the bindings
> > proper or, in the case of Ada 2005, from the declarations from GNAT's
> > a-nlrear.ads which are effectively exactly the same. For example,
> > these subtypes work: (Subtyping makes distributing the declaration to
> > the various packages easy.)
>
> >     with Ada.Numerics.Long_Real_Arrays;
> >     subtype Real_Vector is Ada.Numerics.Long_Real_Arrays.Real_Vector;
> >     subtype Real_Matrix is Ada.Numerics.Long_Real_Arrays.Real_Matrix;
>
> > As long as the user program uses whichever of these types is specified
> > in the bindings, the program will work OK. But there are two problems.
>
> > (1) (Compiler is Ada 2005.) [...] if
> > the user simply wants to use the "official" types, the second method
> > is the only way to go because the first declaration style will result
> > in types that are incompatible with a-nlrear.ads.
>
> Not really, since they are convertible to the types in a-nlrear.ads.
> That would require a bit of extra typing when calling the functions, but
> likely zero run-time overhead.
>
> (Array conversions can be quite useful - but few people are aware of
> this possibility).
> --
> ---------------------------------------------------------
>            J-P. Rosen (ro...@adalog.fr)
> Visit Adalog's web site athttp://www.adalog.fr

Good point. Thanks, J-P. That does give the user program another way
to live with PLplot.
Jerry



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-09-01  0:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-31  8:24 How do I "with" Numerics without linking BLAS, LAPACK? (and more) Jerry
2010-08-31  8:39 ` J-P. Rosen
2010-09-01  0:05   ` Jerry

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox