Hi,

Neil Jerram <[EMAIL PROTECTED]> writes:

> [EMAIL PROTECTED] (Ludovic Courtès) writes:
>
>> If we change the ABI, we should increase `LIBGUILE_INTERFACE_CURRENT'
>> and set `AGE' to zero because it's not going to be
>> backward-compatible---and we can't do that only for IA64,
>> unfortunately...
>
> Agreed, but I'm not sure the ABI is really changing...

Hmm, indeed, `scm_i_thread' is publicly visible but no public macro or
inline function uses it, so it's probably safe to change it (maybe we
should have an "internal.h" header for such things?).

> Overall, then, I think we're OK to regard this as _not_ an ABI change.

Yes, you're right.

> I disagree that it is "normal" always to put `extern' on function
> prototypes.  It isn't needed (as I'm sure you know), and I'm sure I
> could find lots of examples of projects that don't do it.

Right, that's admittedly more a matter of taste (indeed, `extern' is
equivalent to no storage-class specifier per Paragraph 5, Section 6.2.2
of C99).

> I haven't checked again just now, but I think I've seen other cases
> where SCM_API is used on a prototype of a function that I would not
> regard as a supported libguile API.  I dislike this, because the name
> SCM_API clearly implies that the prototype concerned is an API!  I
> definitely don't think that we should create more cases like this.

I'm not a Windows expert, but I think the `SCM_API' is needed in some
cases, for instance for internal `scm_i_' functions that may be called
indirectly by user programs, e.g., through macros or inline functions.

So I suppose `SCM_API' is not needed Windows-wise for `scm_ia64_longjmp'
since it's only meant to be called from within libguile.

> FWIW, my preferred position would be that something is only a
> supported API if it is documented in the manual.  It should then
> follow that SCM_API can only be used on something that is documented
> in the manual (including anything that is needed for the expansions of
> documented macros).

Agreed.

I've been thinking about leveraging GCC's `visibility' attribute to
enforce this.

Thanks,
Ludovic.



Reply via email to