public inbox for gsl-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Brian Gough <bjg@gnu.org>
To: Gerard Jungman <jungman@lanl.gov>
Cc: gsl-discuss@sourceware.org
Subject: Re: some general questions
Date: Tue, 06 Oct 2009 16:21:00 -0000	[thread overview]
Message-ID: <87ljjojys0.wl%bjg@network-theory.co.uk> (raw)
In-Reply-To: <1254783975.28192.103.camel@manticore.lanl.gov>

At Mon, 05 Oct 2009 17:06:15 -0600,
Gerard Jungman wrote:
>  Q1. Regarding header files: Why are the struct declarations inside
>      __BEGIN__DECLS / __END_DECLS pairs? I think they could be outside.
>      I have in mind some ideas for better interaction with C++, which
>      we can discuss later. In any case, if they can go outside (and
>      I'm pretty sure they can), then they should. There's nothing
>      "extern C" about a struct declaration.

I'm 99% sure you are right.  Other than slight inelegance, is there
any specific problem with them being inside? Presumably it does not
prevent them being used in C++.

>  Q2. How is the global variable gsl_check_range supposed to work?
>      It doesn't seem to be used in any way. Is it just cruft?

It is used in the non-inline version of the inline functions, so that
checking can still be controlled if the compiler uses the static
versions of the functions for some reason.  See build.h which is
included in files defining the static versions of the functions.

>  Q3. Why do we still have the 'const' qualifiers on by-value parameters
>      in some header files? I remember it had something to do with the
>      behaviour of a brain-damaged compiler (microsoft?) ten years ago.
>      But that was ten years ago. Let's clean that up. What does
>      the standard say?

On some functions we wanted to declare a variable const just for
safety in the implementation of the function (this is not strictly
necessary of course).  The only way to do that is to put const on the
argument in the definition -- and there are a number of compilers
which complain if it is not on the prototype as well.

I believe some compilers do actually handle the case of a const scalar
argument more efficiently by keeping it in a register (in fact I think
gcc does this now in some cases), so one could argue that we should do
that in more cases.

>  Q4. Why are the dependencies for including "source" files in the
>      templatized world broken? Updating a "templatized" source
>      file does not force a recompile; obviously it should.

In configure.ac we have

    AM_INIT_AUTOMAKE([gnu no-dependencies])

We didn't use them originally because they weren't very reliable in
old versions of Automake.  We could turn them back on now if you want.

>  Q5. Can we extend the "templatizing" scheme to generate
>      declarations too? Of course, if it obscures the
>      header files, then it is not acceptable.

The problem would be that it would make them unreadable to the user
(they would have to figure out how the macros work to read the
prototypes). Also it might hinder any automated tools which look at
the headers (e.g. for auto-completion of function names etc).

What we could do is adopt a more standardised way of generating the
header files, rather than using an undocumented perl script.  That
would mean using m4 or something like that. 

>  Q6. More a statement than a question: We should be more explicit
>      about the levelization of the design. This means expressing
>      the dependence of components clearly. For example, matrix
>      depends on vector, yet there is nothing in the build or in
>      the structure of the library which makes this clear.
>      Everything depends on error handling. Some things depend on
>      ieee. Some things are almost standing alone. We currently
>      have no meaningful notion of sub-libraries or component
>      dependency.

A starting point would be to generate a dependency graph using one of
the automated tools for this - for example, GNU cflow.

>      Simple observations, for people who don't get it:
> 
>       * There are too many "things" in the root directory,
>         both files and directories.

I have no problem if you want to move some of these into a
subdirectory, e.g. examples/ or sys/ etc

  reply	other threads:[~2009-10-06 16:21 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-05 10:12 containers tentative design summary Gerard Jungman
2009-10-05 14:50 ` James Bergstra
2009-10-05 23:00   ` Gerard Jungman
2009-10-05 23:45     ` James Bergstra
2009-10-06 19:59       ` Gerard Jungman
     [not found]     ` <645d17210910060537s762d6323pfd2bec8590ad28e9@mail.gmail.com>
2009-10-06 20:02       ` Gerard Jungman
2009-10-23 21:28     ` Brian Gough
2009-10-27 23:06       ` Gerard Jungman
     [not found]         ` <7f1eaee30910271628h70785125m68e47c7a7b5c25b7@mail.gmail.com>
2009-10-27 23:49           ` Gerard Jungman
2009-10-29 18:06         ` Brian Gough
2009-10-29 20:41           ` Gerard Jungman
2009-10-29 21:40             ` James Bergstra
2009-10-30 16:54               ` Brian Gough
2009-10-30 16:54             ` Brian Gough
2009-10-05 23:04   ` some general questions Gerard Jungman
2009-10-06 16:21     ` Brian Gough [this message]
2009-10-06 20:32       ` Gerard Jungman
2009-10-10 14:45         ` Tuomo Keskitalo
2009-10-24 11:16           ` Brian Gough
2009-10-14 20:00         ` Brian Gough
2009-10-15 18:39           ` Tuomo Keskitalo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ljjojys0.wl%bjg@network-theory.co.uk \
    --to=bjg@gnu.org \
    --cc=gsl-discuss@sourceware.org \
    --cc=jungman@lanl.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).