unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Re: SCM_LENGTH ???
       [not found] <E1CmxC0-0003DB-Gx@sc8-sf-web1.sourceforge.net>
@ 2005-01-07 17:31 ` Bruce Korb
  2005-01-07 18:07   ` Marius Vollmer
  0 siblings, 1 reply; 24+ messages in thread
From: Bruce Korb @ 2005-01-07 17:31 UTC (permalink / raw)
  Cc: mckelvey

Hi Guile folks,

I got this problem report based on Guile 1.7.1.
I do not know what Guile 1.7.1 is supposed to be, but
my stuff still works against 1.6.7.  I do hope you are
not planning to eliminate SCM_LENGTH and SCM_SUBSTRP!!
Where did 1.7.1 come from anyway???

Thanks !  Regards, - Bruce

"SourceForge.net" wrote:
> 
> Support Requests item #1097543, was opened at 2005-01-06 15:54
> Message generated for change (Comment added) made by mckelvey
> You can respond by visiting:
> https://sourceforge.net/tracker/?func=detail&atid=203593&aid=1097543&group_id=3593
> 
> Category: None
> Group: None
> Status: Open
> Priority: 5
> Submitted By: James W. McKelvey (mckelvey)
> Assigned to: Bruce Korb (bkorb)
> Summary: 5.6.5 Build Failure on Cygwin
> 
> Initial Comment:
> Link failure on symbols beginning with "SCM".
> 
> ./configure --disable-nls --disable-shared
> 
> $ uname -a
> CYGWIN_NT-5.1 jmckelvey-xp 1.5.12(0.116/4/2) 2004-11-10
> 08:34 i686 unknown unkno
> wn Cygwin
> 
> mckelvey@jmckelvey-xp ~/utilities/autogen-5.6.5
> $ cc -v
> Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.1/specs
> Configured with: /gcc/3.4/gcc-3.4.1-1/configure
> --verbose --prefix=/usr --exec-p
> refix=/usr --sysconfdir=/etc --libdir=/usr/lib
> --libexecdir=/usr/lib --mandir=/u
> sr/share/man --infodir=/usr/share/info
> --enable-languages=c,ada,c++,f77,java,obj
> c --enable-nls --without-included-gettext
> --enable-libgcj --with-system-zlib --e
> nable-interpreter --enable-threads=posix
> --enable-java-gc=boehm --enable-sjlj-ex
> ceptions --disable-version-specific-runtime-libs
> --disable-win32-registry
> Thread model: posix
> gcc version 3.4.1 (cygming special)
> 
> <snip>
> cc -g -O2 -o autogen.exe autogen-ag.o
> -Wl,-R/usr/local/lib -Wl,--export-dynamic
> ../autoopts/.libs/libopts.a /usr/lib/libguile.dll.a
> /usr/lib/libintl.dll.a /usr/lib/libiconv.dll.a
> /usr/lib/libguile-ltdl.dll.a /usr/lib/libltdl.dll.a
> /usr/lib/libgmp.dll.a -lcrypt
> autogen-ag.o(.text+0x4a26): In function `ag_scm_dne':
> /cygdrive/c/jimdata/home/utilities/autogen-5.6.5/agen5/expFormat.c:161:
> undefined reference to `_SCM_LENGTH'
> autogen-ag.o(.text+0x4a49): In function `ag_scm_dne':
> /cygdrive/c/jimdata/home/utilities/autogen-5.6.5/agen5/autogen.h:481:
> undefined reference to `_SCM_SUBSTRP'
> autogen-ag.o(.text+0x4a59):/cygdrive/c/jimdata/home/utilities/autogen-5.6.5/agen5/autogen.h:482:
> undefined reference to `_SCM_CHARS'      etc ...
> 
> ----------------------------------------------------------------------
> 
> >Comment By: James W. McKelvey (mckelvey)
> Date: 2005-01-07 08:42
> 
> Message:
> Logged In: YES
> user_id=4633
> 
> $ guile --version
> Guile 1.7.1
> 
> mckelvey@jmckelvey-xp ~
> $ guile-config link
>  -lguile -lguile-ltdl -lgmp -lcrypt -lm
> 
> mckelvey@jmckelvey-xp ~
> $ guile-config compile
> -I /nonexistent/include
> 
> Oddly, this version is later than the version available from
> Gnu. The symbols.h file is completely different from the 1.6.7
> version.
> 
> I'm running a recently upgraded Cygwin with the latest (Exp)
> stuff.
> 
> ----------------------------------------------------------------------
> 
> Comment By: Bruce Korb (bkorb)
> Date: 2005-01-06 16:22
> 
> Message:
> Logged In: YES
> user_id=19940
> 
> What version of Guile are you using.  e.g. line 161 of expFormat.c:
> 
>     if (SCM_LENGTH( prefix ) > 128 )
>         AG_ABEND( aprf( zPfxMsg, zPfxLen, 128 ));
> 
> should be defined in the libguile symbols.h header:
> 
> ./libguile/symbols.h:#define SCM_LENGTH(x) \
>   (((unsigned long) SCM_CELL_WORD_0 (x)) >> 8)
> 
> Type: "guile-config link" and "guile-config compile" and
> "guile --version" to get the interesting information.
> Thanks


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-07 17:31 ` SCM_LENGTH ??? Bruce Korb
@ 2005-01-07 18:07   ` Marius Vollmer
  2005-01-07 18:27     ` Bruce Korb
  0 siblings, 1 reply; 24+ messages in thread
From: Marius Vollmer @ 2005-01-07 18:07 UTC (permalink / raw)
  Cc: guile-user, mckelvey

Bruce Korb <bkorb@veritas.com> writes:

> I got this problem report based on Guile 1.7.1.
> I do not know what Guile 1.7.1 is supposed to be, but
> my stuff still works against 1.6.7.

1.7.1 is a 'technology preview' of the upcoming 1.8 release.  See the
announcement at http://www.gnu.org/software/guile/ (or below).

> I do hope you are not planning to eliminate SCM_LENGTH and
> SCM_SUBSTRP!!

We are!  In fact, SCM_LENGTH is already deprecated in 1.6, but not in
a very verbose way.

In 1.7, SCM_LENGTH has been removed.  You need to use
scm_c_string_length or scm_c_vector_length, as appropriate.  (Or stick
with 1.6.)

> Where did 1.7.1 come from anyway???

It came from alpha.gnu.org.  Here is the announcement again:

We are pleased to announce the release of Guile 1.7.1.  This is a
'technology preview' for the upcoming Guile 1.8.  It can be found
here:

    ftp://alpha.gnu.org/gnu/guile/guile-1.7.1.tar.gz

Its MD5 checksum is

    21c9f4061166900d2926955ade0ef5cc  guile-1.7.1.tar.gz

This version is guaranteed to contain serious bugs, and the publically
visible interfaces will almost certainly change before 1.8 is
released.  The 1.7 releases might be termed "selected snapshots".

We are releasing it anyway to start testing the new features, and to
get feedback about how difficult or tedious it is to switch from Guile
1.6 to this series.

Ideally, you should be able to just link your program with Guile 1.7.1
instead of with Guile 1.6.x.  You will get many warnings about
deprecated features, but your program should nevertheless run
correctly.  If you find that this is not the case (which is quite
likely) please do not change your program yet.  Instead, report the
problem to <bug-guile@gnu.org>.

The shared library major versions have been bumped compared to the 1.6
series, but they will not be bumped on binary incompatible changes
within the 1.7 series.


The NEWS file is quite long.  Here are the most spectacular entries in
a condensed form:

  Changes since the 1.6.x series:

  - Guile is now licensed with the GNU Lesser General Public License.

  - The manual is now licensed with the GNU Free Documentation License.

  - We now use GNU MP for bignums.

  - We now use native POSIX threads for real concurrent threads.

  - There is now support for copy-on-write substrings and
    mutation-sharing substrings.

  - We now have exact rationals, such as 1/3.

  - A new family of functions for converting between C values and
    Scheme values has been added that is future-proof and thread-safe.

  - The INUM macros like SCM_MAKINUM have been deprecated.

  - The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
    SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.

  - There is a new way to deal with non-local exits and re-entries in
    C code, which is nicer than scm_internal_dynamic_wind.

  - There are new malloc-like functions that work better than
    scm_must_malloc, etc.

and most importantly

  - call-with-current-continuation is now also available under the name
    call/cc.

See NEWS and the manual for more details.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-07 18:07   ` Marius Vollmer
@ 2005-01-07 18:27     ` Bruce Korb
  2005-01-10 17:26       ` Marius Vollmer
  0 siblings, 1 reply; 24+ messages in thread
From: Bruce Korb @ 2005-01-07 18:27 UTC (permalink / raw)
  Cc: guile-user, mckelvey

Marius Vollmer wrote:

> We are!  In fact, SCM_LENGTH is already deprecated in 1.6, but not in
> a very verbose way.

That is wrong.  A comment in an obscure document somewhere
is insufficient notice.  You must do something to get someone's
attention.  In my case, I got bumped by someone trying to install
my stuff using an *ALPHA* version of Guile.  Bad.  Very bad.

> In 1.7, SCM_LENGTH has been removed.  You need to use
> scm_c_string_length or scm_c_vector_length, as appropriate.  (Or stick
> with 1.6.)

I cannot control my clients.  They will use whatever is installed.
They could (and do) still use 1.4.  Are these scm_c_*_length functions
available in 1.6 (let alone 1.4)?   DO NOT DISCARD INTERFACES WITHOUT
A _VERY_ LONG TRANSITION and please supply a bridge:

# define SCM_LENGTH(e) \
    (gh_string_p(e) ? scm_c_string_length(e) : scm_c_vector_length(e))

and please do not say, "use configury and do it yourself".
You see, I already have software in the field that cannot
be magically retrofit with such a definition.

> > Where did 1.7.1 come from anyway???
> 
> It came from alpha.gnu.org.  Here is the announcement again:
> 
> We are pleased to announce the release of Guile 1.7.1.  This is a
> 'technology preview' for the upcoming Guile 1.8.  It can be found
> here:
...
> This version is guaranteed to contain serious bugs, and the publically
> visible interfaces will almost certainly change before 1.8 is
> released.  The 1.7 releases might be termed "selected snapshots".

A disappearing interface is certainly a bug.

> We are releasing it anyway to start testing the new features, and to
> get feedback about how difficult or tedious it is to switch from Guile
> 1.6 to this series.

It is not possible to migrate released software.
Please ensure that *ALL* legacy interfaces are maintained.
Thank you.

Regards, Bruce

P.S. please forgive my crankiness.  It's been a long week....Sorry.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-07 18:27     ` Bruce Korb
@ 2005-01-10 17:26       ` Marius Vollmer
  2005-01-10 18:03         ` Bruce Korb
  2005-01-10 20:34         ` Ken Raeburn
  0 siblings, 2 replies; 24+ messages in thread
From: Marius Vollmer @ 2005-01-10 17:26 UTC (permalink / raw)
  Cc: guile-user, mckelvey

Bruce Korb <bkorb@veritas.com> writes:

> Marius Vollmer wrote:
>
>> We are!  In fact, SCM_LENGTH is already deprecated in 1.6, but not in
>> a very verbose way.
>
> That is wrong.  A comment in an obscure document somewhere
> is insufficient notice.  You must do something to get someone's
> attention.

Yes, true.  In 1.7 it was deprecated in a verbose way, but I removed
it completely when redoing the string implementation because, well,
sometimes I just don't want to have that stuff in there any longer and
can't constrain myself properly... I have brought back SCM_LENGTH,
SCM_CHARS, and SCM_UCHARS.

The recommended way to check for deprecated features is to compile a
version of Guile with --disable-deprecated and compile/link/test
against that.

> I cannot control my clients.  They will use whatever is installed.

Which is not always going to work, period.  Programs do have
reqirements that must be honored by the clients of these programs.
The less requirements there are, the better, but it is unrealistic to
aim for zero requirements.  Requiring Guile 1.6 is very reasonable in
my view, especially since it is still maintained.  Guile 1.4 is also
still around (if not 'officially' whatever that means).

> They could (and do) still use 1.4.  Are these scm_c_*_length functions
> available in 1.6 (let alone 1.4)?

No.

> DO NOT DISCARD INTERFACES WITHOUT A _VERY_ LONG TRANSITION and
> please supply a bridge:
>
> # define SCM_LENGTH(e) \
>     (gh_string_p(e) ? scm_c_string_length(e) : scm_c_vector_length(e))

We had this in 1.7 for a long time, and yes, I should not have removed
it.  It is back now.

>> This version is guaranteed to contain serious bugs, and the publically
>> visible interfaces will almost certainly change before 1.8 is
>> released.  The 1.7 releases might be termed "selected snapshots".
>
> A disappearing interface is certainly a bug.

No, if the interface itself is buggy, I'd say removing it is a
feature. :-)

>> We are releasing it anyway to start testing the new features, and to
>> get feedback about how difficult or tedious it is to switch from Guile
>> 1.6 to this series.
>
> It is not possible to migrate released software.

You are not supposed to.  Just use 1.6 for the old releases and
require 1.8 for the new ones, if you see a benefit.

> Please ensure that *ALL* legacy interfaces are maintained.

Unfortunately, the legacy interfaces of Guile are problematic.
Traditionally, Guile has exposed lots of its internal implementation
details (such as the fact that strings, symbols, and vectors stored
their length in the same way), and because of the lack of clean
alternatives and also lack of proper documentation, people have made
use of these internals in their programs.  We try to slowly fix this
situation.

So, SCM_LENGTH is definitely deprecated and you need to stop using it
eventually.  The alternatives are hopefully much better and will stay
around much longer.

> P.S. please forgive my crankiness.  It's been a long week....Sorry.

No problem, posts like yours do make a difference.  Please keep them
coming!


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 17:26       ` Marius Vollmer
@ 2005-01-10 18:03         ` Bruce Korb
  2005-01-10 20:59           ` Greg Troxel
  2005-01-11 18:08           ` Marius Vollmer
  2005-01-10 20:34         ` Ken Raeburn
  1 sibling, 2 replies; 24+ messages in thread
From: Bruce Korb @ 2005-01-10 18:03 UTC (permalink / raw)
  Cc: guile-user, mckelvey

On Monday 10 January 2005 09:26 am, Marius Vollmer wrote:

> The recommended way to check for deprecated features is to compile a
> version of Guile with --disable-deprecated and compile/link/test
> against that.

That's a cute idea.  I like it!  I confess, I don't remember it from the last
time I went through the Guile docs.  When was that?  '99 or '98?
Have the docs changed much since then?  ;-)

> > I cannot control my clients.  They will use whatever is installed.
> 
> Which is not always going to work, period.  Programs do have
> reqirements that must be honored by the clients of these programs.
> The less requirements there are, the better, but it is unrealistic to
> aim for zero requirements.  Requiring Guile 1.6 is very reasonable in
> my view, especially since it is still maintained.

Well, 1.4 is old enough that requiring something newer isn't a problem
for me.

> > They could (and do) still use 1.4.  Are these scm_c_*_length functions
> > available in 1.6 (let alone 1.4)?
> 
> No.

However, it is a bit premature to use scm_c_*_length functions since
1.7.x is a test release series and 1.8 is not available.  :)  Thank you
for restoring the compatibility stuff!

> >> This version is guaranteed to contain serious bugs, and the publically
> >> visible interfaces will almost certainly change before 1.8 is
> >> released.  The 1.7 releases might be termed "selected snapshots".
> >
> > A disappearing interface is certainly a bug.
> 
> No, if the interface itself is buggy, I'd say removing it is a
> feature. :-)

OK.  A feature then.  Whether a feature or a bug, it breaks my released
software.  :-(

> > It is not possible to migrate released software.
> 
> You are not supposed to.  Just use 1.6 for the old releases and
> require 1.8 for the new ones, if you see a benefit.

1.4 is adequate for my needs (though I agree it is old enough to
not worry about anymore).  So, I want to build to an interface that
works for either 1.6 *or* 1.8 and I would really hope for binary
compatibility between them as well.  Once 1.6.x has been dormant
for a couple of years, *then* one can stop fretting over clients
still using the thing.

> > Please ensure that *ALL* legacy interfaces are maintained.
> 
> Unfortunately, the legacy interfaces of Guile are problematic.
> Traditionally, Guile has exposed lots of its internal implementation
> details (such as the fact that strings, symbols, and vectors stored
> their length in the same way), and because of the lack of clean
> alternatives and also lack of proper documentation, people have made
> use of these internals in their programs.  We try to slowly fix this
> situation.

To me, this still feels like grubbing around in internals and I do wish
you all were willing to supply something that approximates it.
I loathe having this in my code:

SCM
ag_scm_c_eval_string_from_file_line(
   const char* pzExpr, const char* pzFile, int line )
{
    SCM port;

    {
        static const char zEx[] = "eval-string-from-file-line";
        SCM  expr  = scm_makfrom0str( pzExpr );
        port = scm_mkstrport( SCM_INUM0, expr, SCM_OPN | SCM_RDNG, zEx );
    }

    {
        SCM file = scm_makfrom0str( pzFile );
        scm_t_port* pt = SCM_PTAB_ENTRY(port);
        pt->line_number = line - 1;
        pt->file_name   = file;
    }

    {
        SCM ans = SCM_UNSPECIFIED;

        /* Read expressions from that port; ignore the values.  */
        for (;;) {
            SCM form = scm_read( port );
            if (SCM_EOF_OBJECT_P( form ))
                break;
            ans = scm_primitive_eval_x( form );
        }

        return ans;
    }
}

> So, SCM_LENGTH is definitely deprecated and you need to stop using it
> eventually.  The alternatives are hopefully much better and will stay
> around much longer.

Excellent.  Thank you.

Regards, Bruce


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 17:26       ` Marius Vollmer
  2005-01-10 18:03         ` Bruce Korb
@ 2005-01-10 20:34         ` Ken Raeburn
  2005-01-11 16:12           ` Bruce Korb
                             ` (2 more replies)
  1 sibling, 3 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-01-10 20:34 UTC (permalink / raw)
  Cc: guile-user, bkorb, mckelvey

On Jan 10, 2005, at 12:26, Marius Vollmer wrote:
> The recommended way to check for deprecated features is to compile a
> version of Guile with --disable-deprecated and compile/link/test
> against that.

It might be a bit annoying to do in the source, but what about flagging 
deprecated symbols while still allowing their use, in the 
non-"--disable-deprecated" case?

E.g., declare a function SCM_LENGTH, which is declared in the header 
file with a macro which under recent enough versions of GCC expands to 
__attribute__((deprecated)) and on Windows to __declspec(deprecated), 
and in the source file defining the routine, on systems with the right 
compiler and assembler support, create a .gnu.warning.SCM_LENGTH (or 
.gnu.warning._SCM_LENGTH) section containing a message telling the user 
that the function will go away in a future release.  (As I understand 
it, on Windows you can even deprecate a macro by name.)

It won't work on all systems, but it should work on a lot of the 
configurations we'd care most about.  And if a macro is deprecated, the 
overhead of a function call shouldn't be a big deal, as long as the 
semantics are such that it can actually be implemented with a function 
call.

I started working out some configure tests and such to implement this 
at work, I could try to flesh them out a bit more if you like.  (I 
*think* I've got all my papers in order, but I don't know for sure if 
I've got papers in from my current employer, MIT, to cover Guile.  I 
haven't done the GNU maintainer bit in a while, could someone remind me 
where the list is?  Or check it for me?)

Ken



_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 18:03         ` Bruce Korb
@ 2005-01-10 20:59           ` Greg Troxel
  2005-01-11 18:08           ` Marius Vollmer
  1 sibling, 0 replies; 24+ messages in thread
From: Greg Troxel @ 2005-01-10 20:59 UTC (permalink / raw)
  Cc: guile-user, mckelvey, Marius Vollmer

  1.4 is adequate for my needs (though I agree it is old enough to
  not worry about anymore).  So, I want to build to an interface that
  works for either 1.6 *or* 1.8 and I would really hope for binary
  compatibility between them as well.  Once 1.6.x has been dormant
  for a couple of years, *then* one can stop fretting over clients
  still using the thing.

Note that it is now - when a 1.7 release is happening that we can say
to those running 1.4 "you really should upgrade".  Until a few months
ago NetBSD pkgsrc compiled gnucash with 1.4.   Infrastructure is slow
to migrate.

The real issue is that we want people to use guile, and thus have to
be better about backwards compat than it might seem at first glance.

For me, it's source-level compat - I have no expectation of running
the same binary with with 1.6 or 1.8 shlibs.


-- 
        Greg Troxel <gdt@ir.bbn.com>


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 20:34         ` Ken Raeburn
@ 2005-01-11 16:12           ` Bruce Korb
  2005-01-11 18:32           ` Marius Vollmer
  2005-05-14  2:52           ` deprecated symbol warnings Ken Raeburn
  2 siblings, 0 replies; 24+ messages in thread
From: Bruce Korb @ 2005-01-11 16:12 UTC (permalink / raw)
  Cc: guile-user, mckelvey, Marius Vollmer

On Monday 10 January 2005 12:34 pm, Ken Raeburn wrote:

> It won't work on all systems, but it should work on a lot of the 
> configurations we'd care most about.  And if a macro is deprecated, the 
> overhead of a function call shouldn't be a big deal, as long as the 
> semantics are such that it can actually be implemented with a function 
> call.

That would be great!  Please!  Thank you - Bruce


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 18:03         ` Bruce Korb
  2005-01-10 20:59           ` Greg Troxel
@ 2005-01-11 18:08           ` Marius Vollmer
  2005-01-11 23:40             ` Kevin Ryde
  1 sibling, 1 reply; 24+ messages in thread
From: Marius Vollmer @ 2005-01-11 18:08 UTC (permalink / raw)
  Cc: guile-user, mckelvey

Bruce Korb <bkorb@veritas.com> writes:

> On Monday 10 January 2005 09:26 am, Marius Vollmer wrote:
>
>> The recommended way to check for deprecated features is to compile a
>> version of Guile with --disable-deprecated and compile/link/test
>> against that.
>
> That's a cute idea.  I like it!  I confess, I don't remember it from the last
> time I went through the Guile docs.  When was that?  '99 or '98?
> Have the docs changed much since then?  ;-)

Yes!

>> [...]
> However, it is a bit premature to use scm_c_*_length functions since
> 1.7.x is a test release series and 1.8 is not available.

Yes, you are right.  The recommended way in 1.6 is to use
SCM_STRING_LENGTH, for example.  It _is_ annoying to have to switch
away from SCM_STRING_LENGTH in 1.8 again, I have to agree to that.
(The reason for this is that 1.8 wants you to move away from making
assumptions about the internals of strings so that we can switch more
easily to Unicode later.)

> To me, this still feels like grubbing around in internals and I do wish
> you all were willing to supply something that approximates it.
> I loathe having this in my code:

Ugh, the ports API is still this ugly...


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-10 20:34         ` Ken Raeburn
  2005-01-11 16:12           ` Bruce Korb
@ 2005-01-11 18:32           ` Marius Vollmer
  2005-05-14  2:52           ` deprecated symbol warnings Ken Raeburn
  2 siblings, 0 replies; 24+ messages in thread
From: Marius Vollmer @ 2005-01-11 18:32 UTC (permalink / raw)
  Cc: guile-user, bkorb, mckelvey

Ken Raeburn <raeburn@raeburn.org> writes:

> E.g., declare a function SCM_LENGTH, which is declared in the header
> file with a macro which under recent enough versions of GCC expands to
> __attribute__((deprecated)) and on Windows to __declspec(deprecated),
> and in the source file defining the routine, on systems with the right
> compiler and assembler support, create a .gnu.warning.SCM_LENGTH (or
> .gnu.warning._SCM_LENGTH) section containing a message telling the
> user that the function will go away in a future release.  (As I
> understand it, on Windows you can even deprecate a macro by name.)

That would be a great addition to the existing deprecation system.
Right now spit out warnings when a feature such as SCM_LENGTH is used
for the first time, but warning at compile time is nice as well.

Would you like to work on this?  (I.e., on the needed infrastructure
and on the deprecated features themselves?)

> (I *think* I've got all my papers in order, but I don't know for
> sure if I've got papers in from my current employer, MIT, to cover
> Guile.  I haven't done the GNU maintainer bit in a while, could
> someone remind me where the list is?  Or check it for me?)

The list is on fencepost: /gd/gnuorg/copyright.list.  The FSF has your
papers for Guile, but no disclaimer from MIT, as far as I can see.
You can use /gd/gnuorg/Copyright/empdisclaim.future as a template or
ask <assign@gnu.org>.  I would be happy to help you with this, of
course.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-11 18:08           ` Marius Vollmer
@ 2005-01-11 23:40             ` Kevin Ryde
  2005-01-12 10:33               ` Marius Vollmer
  0 siblings, 1 reply; 24+ messages in thread
From: Kevin Ryde @ 2005-01-11 23:40 UTC (permalink / raw)
  Cc: guile-user

Marius Vollmer <marius.vollmer@uni-dortmund.de> writes:
>
> The recommended way in 1.6 is to use
> SCM_STRING_LENGTH, for example.  It _is_ annoying to have to switch
> away from SCM_STRING_LENGTH in 1.8 again,

Speaking of SCM_STRING_LENGTH, things like that which have been macros
in the past should remain as macros, not functions, even if all it
does is a function call.

Changing from macro to function for instance broke guile-gtk.  It was
#ifdef testing for SCM_STRING_LENGTH to know to use that (in 1.6), as
opposed to SCM_LENGTH (in whatever dim dark past).


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: SCM_LENGTH ???
  2005-01-11 23:40             ` Kevin Ryde
@ 2005-01-12 10:33               ` Marius Vollmer
  0 siblings, 0 replies; 24+ messages in thread
From: Marius Vollmer @ 2005-01-12 10:33 UTC (permalink / raw)
  Cc: guile-user

Kevin Ryde <user42@zip.com.au> writes:

> Speaking of SCM_STRING_LENGTH, things like that which have been macros
> in the past should remain as macros, not functions, even if all it
> does is a function call.
>
> Changing from macro to function for instance broke guile-gtk.  It was
> #ifdef testing for SCM_STRING_LENGTH to know to use that (in 1.6), as
> opposed to SCM_LENGTH (in whatever dim dark past).

Yes, you are right!  Thanks for reminding me, I will go thru all
deprecated things and make sure that macros stay macros.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* deprecated symbol warnings
  2005-01-10 20:34         ` Ken Raeburn
  2005-01-11 16:12           ` Bruce Korb
  2005-01-11 18:32           ` Marius Vollmer
@ 2005-05-14  2:52           ` Ken Raeburn
  2005-05-14 12:40             ` Neil Jerram
  2 siblings, 1 reply; 24+ messages in thread
From: Ken Raeburn @ 2005-05-14  2:52 UTC (permalink / raw)


Some time back, I wrote:
> It might be a bit annoying to do in the source, but what about 
> flagging deprecated symbols while still allowing their use, in the 
> non-"--disable-deprecated" case?
>
> E.g., declare a function SCM_LENGTH, which is declared in the header 
> file with a macro which under recent enough versions of GCC expands to 
> __attribute__((deprecated)) and
[blah blah blah] and kind of volunteered myself to implement it.

Well, I've got a rough version up and limping, that does both 
compile-time and link-time warnings:

% make depr
gcc -I/var/raeburn/guile/guile-afs/Install/include -g   -c -o depr.o 
depr.c
depr.c: In function `main':
depr.c:6: warning: `SCM_ICDR' is deprecated (declared at 
/var/raeburn/guile/guile-afs/Install/include/libguile/deprecated.h:54)
gcc -o depr depr.o -L/var/raeburn/guile/guile-afs/Install/lib -lguile
depr.o(.text+0x15): In function `main':
/var/raeburn/guile/guile-afs/test/depr.c:6: SCM_ICDR is deprecated, 
please don't use it
%

(No warning is printed at run time.)

The warnings can be disabled while building guile (only while building 
deprecated.c, I hope) so that -Werror doesn't kill the build.

In the header files, here's how it's taking shape, roughly:

#if defined(SCM_DISABLE_DEPRECATION_WARNINGS)
# define SCM_DECL_DEPRECATED /* empty */
#elif __GNUC__ >= 3
# define SCM_DECL_DEPRECATED __attribute__((deprecated))
#elif defined _WIN32
/* TBD: How many old versions of the compiler support this?
    Will older ones complain, or ignore it?  */
# define SCM_DECL_DEPRECATED __declspec(deprecated) /* UNTESTED */
#else
# define SCM_DECL_DEPRECATED /* empty, no compile-time warnings */
#endif


/* N.B.: Application code will sometimes test whether one of these
    macros is defined, to figure out if the version of Guile in use
    predates the creation of the macro.  So at deprecation time, we
    still want the macro to be visible.  ANSI C says "#define foo foo"
    is okay, but if we get complaints about it, try switching the
    non-macro name to "foo_" or "foo_deprecated" or something; make it
    a simple concatenation so that we can make the other macros
    continue to be simple.  */

/* From eval.h: Macros for handling ilocs.  These were deprecated in 
guile
  * 1.7.0 on 2004-04-22.  */
extern SCM_DECL_DEPRECATED scm_t_bits SCM_IFRINC;
extern SCM_DECL_DEPRECATED scm_t_bits SCM_ICDR;
#define SCM_IFRINC		SCM_IFRINC
#define SCM_ICDR		SCM_ICDR

extern SCM_DECL_DEPRECATED long SCM_IFRAME(SCM n);
#define SCM_IFRAME		SCM_IFRAME


and in the source files:

#undef SCM_IFRINC
SCM_DEPRECATED (SCM_IFRINC);
scm_t_bits SCM_IFRINC = (0x00000100L);
#undef SCM_ICDR
SCM_DEPRECATED (SCM_ICDR);
scm_t_bits SCM_ICDR = (0x00080000L);

#undef SCM_IFRAME
SCM_DEPRECATED (SCM_IFRAME);
long SCM_IFRAME(SCM n)
{
   return ((long)((SCM_ICDR-SCM_IFRINC)>>8)
	  & (SCM_UNPACK (n) >> 8));
}


The link-time warnings are a bit messier.  So far, I'm working with a 
macro SCM_DEPRECATED(SYMBOLNAME) that gets used at the top level 
(outside of any functions), and on systems that support it -- that 
configure test isn't written yet, so basically it's x86-linux 
configurations -- it spits out a string into section 
.gnu.warning.SYMBOLNAME that the GNU linker will use if SYMBOLNAME is 
referenced.  It's a const char array with a synthesized name based on 
the symbol name, so if the symbol in question is a function, it'll be 
easy for the function to use that symbol in a call to 
scm_c_issue_deprecation_warning (though I don't know if I need to worry 
about i18n interactions there).  I'm actually working on a couple 
different forms, one which always causes the message to be available to 
the code, and one which only outputs the message if separate sections 
are supported; the latter would be for the case where the code doesn't 
explicitly use the message, and we'd be wasting space on a platform 
that doesn't support warning sections.

There's also another form of the macro which allows the message to be 
specified separately, so the programmer can be told which other 
functions should be used instead.

(I'm in the process of reworking some of these macros, so I don't have 
a good code sample right now.)

On Windows, actually, I'm told there are pragmas which can produce 
deprecation warnings for uses of macros, without having to mess around 
with turning them into variables.  But this scheme I'm using above 
ought to work on both GNU and Windows compilers, and is less messy than 
trying to handle each separately.  (Note that I haven't tested the 
Windows version yet.)

Comments, before I take this too much further?

Ken


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-14  2:52           ` deprecated symbol warnings Ken Raeburn
@ 2005-05-14 12:40             ` Neil Jerram
  2005-05-14 18:48               ` Ken Raeburn
  2005-05-18 19:18               ` deprecated symbol warnings and Windows Ken Raeburn
  0 siblings, 2 replies; 24+ messages in thread
From: Neil Jerram @ 2005-05-14 12:40 UTC (permalink / raw)
  Cc: guile-user

Ken Raeburn wrote:
> 
> Well, I've got a rough version up and limping, that does both 
> compile-time and link-time warnings:

This looks very useful.  I'm not an expert in this kind of thing, but 
here are some comments.

> % make depr
> gcc -I/var/raeburn/guile/guile-afs/Install/include -g   -c -o depr.o 
> depr.c
> depr.c: In function `main':
> depr.c:6: warning: `SCM_ICDR' is deprecated (declared at 
> /var/raeburn/guile/guile-afs/Install/include/libguile/deprecated.h:54)
> gcc -o depr depr.o -L/var/raeburn/guile/guile-afs/Install/lib -lguile
> depr.o(.text+0x15): In function `main':
> /var/raeburn/guile/guile-afs/test/depr.c:6: SCM_ICDR is deprecated, 
> please don't use it

Nice output.

> (No warning is printed at run time.)

Yes, that makes sense.

> The warnings can be disabled while building guile (only while building 
> deprecated.c, I hope) so that -Werror doesn't kill the build.
> 
> In the header files, here's how it's taking shape, roughly:
> 
> #if defined(SCM_DISABLE_DEPRECATION_WARNINGS)
> # define SCM_DECL_DEPRECATED /* empty */
> #elif __GNUC__ >= 3
> # define SCM_DECL_DEPRECATED __attribute__((deprecated))
> #elif defined _WIN32

Does the __declspec syntax work for all Windows compilers?  If it's 
actually specific to MSVC (which is the only compiler I'm familiar 
with), you should use _MSC_VER.  If it's for all Windows compilers, I'm 
surprised by the underscore - i.e. I'd normally use WIN32; are WIN32 and 
_WIN32 equivalent?

> /* TBD: How many old versions of the compiler support this?
>     Will older ones complain, or ignore it?  */
> # define SCM_DECL_DEPRECATED __declspec(deprecated) /* UNTESTED */
> #else
> # define SCM_DECL_DEPRECATED /* empty, no compile-time warnings */
> #endif
> 
> 
> /* N.B.: Application code will sometimes test whether one of these
>     macros is defined, to figure out if the version of Guile in use
>     predates the creation of the macro.  So at deprecation time, we
>     still want the macro to be visible.  ANSI C says "#define foo foo"
>     is okay, but if we get complaints about it, try switching the
>     non-macro name to "foo_" or "foo_deprecated" or something; make it
>     a simple concatenation so that we can make the other macros
>     continue to be simple.  */

I think we should assume in advance that we'll hit trouble with this on 
some platforms.  Otherwise it's just another hiccup to push people away 
from trying Guile out.

> 
> /* From eval.h: Macros for handling ilocs.  These were deprecated in 
> guile
>   * 1.7.0 on 2004-04-22.  */
> extern SCM_DECL_DEPRECATED scm_t_bits SCM_IFRINC;
> extern SCM_DECL_DEPRECATED scm_t_bits SCM_ICDR;
> #define SCM_IFRINC		SCM_IFRINC
> #define SCM_ICDR		SCM_ICDR
> 
> extern SCM_DECL_DEPRECATED long SCM_IFRAME(SCM n);
> #define SCM_IFRAME		SCM_IFRAME

Nice.  Slight extra overhead, but well worth it IMO for the extra function.

> The link-time warnings are a bit messier.

What is the extra benefit of link-time warnings over compile-time?  Are 
there any cases where the user will see a link-time warning without a 
corresponding compile-time one?  Would link-time warnings show up when 
linking against a 3rd party library that chose to use deprecated symbols?

> scm_c_issue_deprecation_warning (though I don't know if I need to worry 
> about i18n interactions there).

I don't believe it's yet been suggested that we would translate the 
Scheme names of primitives, so I doubt there would be a problem here. 
(Out of interest, do any other scripting languages do this?)

Regards,
	Neil


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-14 12:40             ` Neil Jerram
@ 2005-05-14 18:48               ` Ken Raeburn
  2005-05-15  3:17                 ` John W. Eaton
  2005-05-26 18:58                 ` deprecated symbol warnings Neil Jerram
  2005-05-18 19:18               ` deprecated symbol warnings and Windows Ken Raeburn
  1 sibling, 2 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-05-14 18:48 UTC (permalink / raw)
  Cc: guile-user

On May 14, 2005, at 08:40, Neil Jerram wrote:
> This looks very useful.  I'm not an expert in this kind of thing, but 
> here are some comments.

Thanks...

>> #elif defined _WIN32
>
> Does the __declspec syntax work for all Windows compilers?  If it's 
> actually specific to MSVC (which is the only compiler I'm familiar 
> with), you should use _MSC_VER.  If it's for all Windows compilers, 
> I'm surprised by the underscore - i.e. I'd normally use WIN32; are 
> WIN32 and _WIN32 equivalent?

I have no idea.  I do a small amount of work with MSVC, and the other 
compiler I'd be concerned about would be GCC, which is checked for 
first (though, actually, only for gcc 3 and later, should fix that); I 
have no idea what other Windows compilers would do, though I would 
expect for maximum interoperability they would implement or at least 
ignore the __declspec annotations.  In the code I deal with at work, we 
generally check _WIN32.

I'm hoping some Windows developer can help out here... we've got some 
at work, maybe I can ping them about it.

>> /* N.B.: Application code will sometimes test whether one of these
>>     macros is defined, to figure out if the version of Guile in use
>>     predates the creation of the macro.  So at deprecation time, we
>>     still want the macro to be visible.  ANSI C says "#define foo foo"
>>     is okay, but if we get complaints about it, try switching the
>>     non-macro name to "foo_" or "foo_deprecated" or something; make it
>>     a simple concatenation so that we can make the other macros
>>     continue to be simple.  */
>
> I think we should assume in advance that we'll hit trouble with this 
> on some platforms.  Otherwise it's just another hiccup to push people 
> away from trying Guile out.

*sigh*  I was afraid of that.  So when do we start requiring "real" 
ANSI C support? :-(

Doing this means the compile-time messages will give the wrong symbol 
names.  They'll be close to the names used by the application, but not 
the same.  Still, getting messages that are close is probably better 
than explaining to people why this strange use of the preprocessor is 
actually valid and it's their compiler that's broken.  I wonder if it's 
really a problem these days, though, a decade and a half after the spec 
was published....

> Nice.  Slight extra overhead, but well worth it IMO for the extra 
> function.

Yeah, consuming a bit more space in the library is slightly annoying, 
but the run-time performance for deprecated functions probably isn't 
anything to worry about.

>> The link-time warnings are a bit messier.
>
> What is the extra benefit of link-time warnings over compile-time?  
> Are there any cases where the user will see a link-time warning 
> without a corresponding compile-time one?

If the application refers to Guile functions without including 
libguile.h, yes.

Or if an older version of gcc is used that can generate ELF sections 
but doesn't support the "deprecated" attribute.  (I *think* "section" 
came first.)

Or if we add support for another compiler that lets us use 'asm' to 
emit warning sections or symbols or whatever the tool chain supports, 
but doesn't have a compile-time equivalent to the "deprecated" 
attribute, but we could treat that case separately.

Or...

>   Would link-time warnings show up when linking against a 3rd party 
> library that chose to use deprecated symbols?

Yes.  Hmm, at least for a static library.  I'm not sure about a shared 
library, if it would happen when the library was built, or used, or 
both.  I would assume they would be printed when the library is built, 
at least.  I'm guessing that this would probably be the most 
interesting of the cases.

Or, in the real world, if all the non-fatal compile-time warnings have 
all scrolled off the screen and the trailing bits of the "make" output 
still visible, and the only bits likely to get looked at unless 
something breaks, include only the final link step.


If it's not that interesting after all, I could drop it (as I 
indicated, it's the more complicated approach, though not terribly so) 
and just go with the compile-time warnings based on the predefined 
macros.  Turning macros into variables and/or functions is needed even 
without link-time warnings, as GCC can't attach attributes to the 
macros, only to the variable and function symbols, so it doesn't 
simplify things all that much.

>> scm_c_issue_deprecation_warning (though I don't know if I need to 
>> worry about i18n interactions there).
>
> I don't believe it's yet been suggested that we would translate the 
> Scheme names of primitives, so I doubt there would be a problem here. 
> (Out of interest, do any other scripting languages do this?)

I was thinking of the "is deprecated, please use" part.  The symbol 
names we should display as they are, but possibly the recommendation to 
change the application code should be given in Swahili or Klingon or 
whatever.  That we could do at run time, and gcc could do it at compile 
time, but I don't think we can do anything about it at link time.

Ken


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-14 18:48               ` Ken Raeburn
@ 2005-05-15  3:17                 ` John W. Eaton
  2005-05-15 10:19                   ` Neil Jerram
  2005-05-16  5:52                   ` Ken Raeburn
  2005-05-26 18:58                 ` deprecated symbol warnings Neil Jerram
  1 sibling, 2 replies; 24+ messages in thread
From: John W. Eaton @ 2005-05-15  3:17 UTC (permalink / raw)
  Cc: guile-user, Neil Jerram

On 14-May-2005, Ken Raeburn wrote:

| >> /* N.B.: Application code will sometimes test whether one of these
| >>     macros is defined, to figure out if the version of Guile in use
| >>     predates the creation of the macro.  So at deprecation time, we
| >>     still want the macro to be visible.  ANSI C says "#define foo foo"
| >>     is okay, but if we get complaints about it, try switching the
| >>     non-macro name to "foo_" or "foo_deprecated" or something; make it
| >>     a simple concatenation so that we can make the other macros
| >>     continue to be simple.  */
| >
| > I think we should assume in advance that we'll hit trouble with this 
| > on some platforms.  Otherwise it's just another hiccup to push people 
| > away from trying Guile out.
| 
| *sigh*  I was afraid of that.  So when do we start requiring "real" 
| ANSI C support? :-(

Can you point to a widely used compiler that will actually have
trouble with this?  If not, then maybe it is not worth worrying about?

| Doing this means the compile-time messages will give the wrong symbol 
| names.  They'll be close to the names used by the application, but not 
| the same.  Still, getting messages that are close is probably better 
| than explaining to people why this strange use of the preprocessor is 
| actually valid and it's their compiler that's broken.  I wonder if it's 
| really a problem these days, though, a decade and a half after the spec 
| was published....

Having the messages use the wrong names might cause a lot more
confusion than having to explain to people that their compiler is
broken.

jwe

-- 
jwe at octave dot org | Peace would shock and awe me.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-15  3:17                 ` John W. Eaton
@ 2005-05-15 10:19                   ` Neil Jerram
  2005-05-16  5:52                   ` Ken Raeburn
  1 sibling, 0 replies; 24+ messages in thread
From: Neil Jerram @ 2005-05-15 10:19 UTC (permalink / raw)
  Cc: guile-user

John W. Eaton wrote:
> On 14-May-2005, Ken Raeburn wrote:
> 
> | > I think we should assume in advance that we'll hit trouble with this 
> | > on some platforms.  Otherwise it's just another hiccup to push people 
> | > away from trying Guile out.
> | 
> | *sigh*  I was afraid of that.  So when do we start requiring "real" 
> | ANSI C support? :-(
> 
> Can you point to a widely used compiler that will actually have
> trouble with this?  If not, then maybe it is not worth worrying about?

No I can't.  But I know that we intermittently get unexpected build 
errors reported on the mailing list for even fairly mainstream OSs such 
as Solaris and HP-UX, and recently OS X, so I was just advising caution 
in order to avoid introducing a possible roadhump for people off the 
GNU/Linux/gcc mainline.  Also, in my own experience (which is 
reasonable) I've never seen "#define foo foo" used before, so I have no 
personal feel for how well supported it is.  (And you have to agree that 
it is an edge case, surely?)

However ... when advising as above, I hadn't realized that the reported 
names would be wrong.  Now that I realize that, I think it is worth 
using "#define foo foo" and handling any problems if they arise.  (We 
have future options, if we need them, for using configure tests to test 
support, and adding a suffix where necessary.)

> 
> | Doing this means the compile-time messages will give the wrong symbol 
> | names.  They'll be close to the names used by the application, but not 
> | the same.  Still, getting messages that are close is probably better 
> | than explaining to people why this strange use of the preprocessor is 
> | actually valid and it's their compiler that's broken.  I wonder if it's 
> | really a problem these days, though, a decade and a half after the spec 
> | was published....
> 
> Having the messages use the wrong names might cause a lot more
> confusion than having to explain to people that their compiler is
> broken.

Yes, agreed now.

	Neil


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-15  3:17                 ` John W. Eaton
  2005-05-15 10:19                   ` Neil Jerram
@ 2005-05-16  5:52                   ` Ken Raeburn
  2005-05-18  4:22                     ` tomas
  2005-05-18 12:20                     ` Ludovic Courtès
  1 sibling, 2 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-05-16  5:52 UTC (permalink / raw)


On May 14, 2005, at 23:17, John W. Eaton wrote:
[..."#define foo foo"...]
> Can you point to a widely used compiler that will actually have
> trouble with this?  If not, then maybe it is not worth worrying about?

Hmm... does anyone feel like setting up an array of test machines to 
automatically do frequent builds and tests of snapshots and report 
errors as they come up?

I've done something like this a couple of times (for binutils, while I 
was maintaining it at Cygnus, and more recently for Kerberos at MIT), 
but it's always involved machines I had privileges on; something more 
distributed that lots of us could contribute cycles to without having 
to grant each other login access or anything like that would be better 
for Guile, but a bit harder to design and implement, at least if you're 
security-conscious.  (And in fact some trouble we've had recently with 
Kerberos has been to do with platforms *not* represented in our local 
test setup.)

With something like this in place, we could simply implement schemes 
like this, and get feedback relatively quickly on how it's handled on 
lots of platforms that any contributors care about, rather than waiting 
and hoping somebody has tested platforms X, Y, and Z before the release 
goes out.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-16  5:52                   ` Ken Raeburn
@ 2005-05-18  4:22                     ` tomas
  2005-05-18 12:20                     ` Ludovic Courtès
  1 sibling, 0 replies; 24+ messages in thread
From: tomas @ 2005-05-18  4:22 UTC (permalink / raw)
  Cc: guile-user


[-- Attachment #1.1: Type: text/plain, Size: 735 bytes --]

On Mon, May 16, 2005 at 01:52:01AM -0400, Ken Raeburn wrote:
> On May 14, 2005, at 23:17, John W. Eaton wrote:
> [..."#define foo foo"...]
> >Can you point to a widely used compiler that will actually have
> >trouble with this? [...]
> 
> Hmm... does anyone feel like setting up an array of test machines to 
> automatically do frequent builds and tests of snapshots and report 
> errors as they come up?

FWIW, SourceForge makes such a testing farm available. See, for example

  <http://sourceforge.net/docman/display_doc.php?docid=762&group_id=1>

Not that I have any experience with it, but it strikes me as a good idea
to have such a thing as common infrastructure for free software projects.

Regards
-- tomás

[-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --]

[-- Attachment #2: Type: text/plain, Size: 140 bytes --]

_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user

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

* Re: deprecated symbol warnings
  2005-05-16  5:52                   ` Ken Raeburn
  2005-05-18  4:22                     ` tomas
@ 2005-05-18 12:20                     ` Ludovic Courtès
  2005-05-18 17:17                       ` automated testing (was Re: deprecated symbol warnings) Ken Raeburn
  1 sibling, 1 reply; 24+ messages in thread
From: Ludovic Courtès @ 2005-05-18 12:20 UTC (permalink / raw)
  Cc: guile-user

Hello,

Ken Raeburn <raeburn@raeburn.org> writes:

> Hmm... does anyone feel like setting up an array of test machines to
> automatically do frequent builds and tests of snapshots and report
> errors as they come up?

This sounds like a good idea.  However, this would need to be somewhat
automated, like Debian's build system, still without compromising on the
user's privacy and control.  I think that's a project of its own, isn't
it?  :-)

Ludovic.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* automated testing (was Re: deprecated symbol warnings)
  2005-05-18 12:20                     ` Ludovic Courtès
@ 2005-05-18 17:17                       ` Ken Raeburn
  0 siblings, 0 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-05-18 17:17 UTC (permalink / raw)
  Cc: guile-user

On May 18, 2005, at 08:20, Ludovic Courtès wrote:
> This sounds like a good idea.  However, this would need to be somewhat
> automated, like Debian's build system, still without compromising on 
> the
> user's privacy and control.  I think that's a project of its own, isn't
> it?  :-)

Definitely.

FWIW, I use a separate, dedicated account for this sort of thing at 
work.  (Not enough cycles to add Guile builds on many of these 
machines.  But maybe a couple.)  That still essentially means you've 
giving random developers access to your machine, if somewhat 
indirectly, so unless you trust them all, you probably still want to be 
somewhat careful.  There are various OS-specific approaches to 
confining a collection of processes in different ways, but of course 
part of the goal is to do testing across a variety of platforms as well 
as different configurations of certain popular platforms.  Using chroot 
only gets you so far, but UML or VMware won't tell you if you've got 
problems on Alphas running Tru64.  So I suspect a variety of approaches 
would be needed -- depending in part on how concerned the system owner 
is about access to random data on their system.

In fact, at the end of the day, I think maybe the test-running and 
result-collecting and -reporting might be one interesting project, and 
the build isolation probably several other interesting projects or 
products (UML, Bochs, Plex, SIMH, PearPC, VMware, Mac On Linux, FreeBSD 
jails, Solaris 10's ... um ... whatever they called it).  There are 
plenty of people working on the latter set.  Anyone want to put 
together the former?

And if a potential tester doesn't have much stuff that a Guile build 
absolutely has to be kept away from, or they've just got a reasonable 
amount of trust in the other Guile developers, they could use the 
dedicated-account approach and a cron job, and not worry about it....

Ken

_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings and Windows
  2005-05-14 12:40             ` Neil Jerram
  2005-05-14 18:48               ` Ken Raeburn
@ 2005-05-18 19:18               ` Ken Raeburn
  1 sibling, 0 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-05-18 19:18 UTC (permalink / raw)


On May 14, 2005, at 08:40, Neil Jerram wrote:
>> The warnings can be disabled while building guile (only while 
>> building deprecated.c, I hope) so that -Werror doesn't kill the 
>> build.
>> In the header files, here's how it's taking shape, roughly:
>> #if defined(SCM_DISABLE_DEPRECATION_WARNINGS)
>> # define SCM_DECL_DEPRECATED /* empty */
>> #elif __GNUC__ >= 3
>> # define SCM_DECL_DEPRECATED __attribute__((deprecated))
>> #elif defined _WIN32
>
> Does the __declspec syntax work for all Windows compilers?  If it's 
> actually specific to MSVC (which is the only compiler I'm familiar 
> with), you should use _MSC_VER.  If it's for all Windows compilers, 
> I'm surprised by the underscore - i.e. I'd normally use WIN32; are 
> WIN32 and _WIN32 equivalent?

I've done a bit more investigating, and it appears that 
__declspec(deprecated) is new with Visual Studio 2003, or maybe 2002.  
So there would be no warning with older compilers, probably.  (And the 
older compiler we've been using at work defines _WIN32 but not WIN32.)  
For now, in my code, I'm testing _MSC_VER >= 1310.

In looking at the current headers, I think when I'm changing macros 
into functions, I need to stick "SCM_API" in front where I'd use 
"extern" normally, to get the Windows DLL import/export specs right?  
So this conversion will actually be adding to the exported-symbol list 
of the DLL.  (Has anyone thought about limiting exported symbols on 
UNIX?)  I've just gotten access to the newer compilers, so I should be 
able to run some tests any make sure I've gotten the syntax right for 
multiple declspecs etc.

Oh, and based on the discussions, I'm sticking with the "#define foo 
foo" form for now, rather than renaming symbols.

Ken


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-14 18:48               ` Ken Raeburn
  2005-05-15  3:17                 ` John W. Eaton
@ 2005-05-26 18:58                 ` Neil Jerram
  2005-05-28 21:55                   ` Ken Raeburn
  1 sibling, 1 reply; 24+ messages in thread
From: Neil Jerram @ 2005-05-26 18:58 UTC (permalink / raw)
  Cc: guile-user

Ken Raeburn wrote:
> On May 14, 2005, at 08:40, Neil Jerram wrote:
> 
>>What is the extra benefit of link-time warnings over compile-time?  
>>Are there any cases where the user will see a link-time warning 
>>without a corresponding compile-time one?
> 
> 
> If the application refers to Guile functions without including 
> libguile.h, yes.
> 
> Or if an older version of gcc is used that can generate ELF sections 
> but doesn't support the "deprecated" attribute.  (I *think* "section" 
> came first.)
> 
> Or if we add support for another compiler that lets us use 'asm' to 
> emit warning sections or symbols or whatever the tool chain supports, 
> but doesn't have a compile-time equivalent to the "deprecated" 
> attribute, but we could treat that case separately.
> 
> Or...

All of which strike me as pretty marginal.

> 
> 
>>  Would link-time warnings show up when linking against a 3rd party 
>>library that chose to use deprecated symbols?
> 
> 
> Yes.  Hmm, at least for a static library.  I'm not sure about a shared 
> library, if it would happen when the library was built, or used, or 
> both.  I would assume they would be printed when the library is built, 
> at least.  I'm guessing that this would probably be the most 
> interesting of the cases.

Interesting in a sense, yes - but I was thinking that this is a good 
argument for NOT implementing link-time warnings.  The point being that 
in this case the developer can't do anything about the warnings, so 
they're just an annoyance.

> 
> Or, in the real world, if all the non-fatal compile-time warnings have 
> all scrolled off the screen and the trailing bits of the "make" output 
> still visible, and the only bits likely to get looked at unless 
> something breaks, include only the final link step.

Seriously?  (In my real world, if people are concerned about warnings 
they put processes in place so as not to miss them.)

> 
> 
> If it's not that interesting after all, I could drop it (as I 
> indicated, it's the more complicated approach, though not terribly so) 
> and just go with the compile-time warnings based on the predefined 
> macros.

That would be my inclination.

>>>scm_c_issue_deprecation_warning (though I don't know if I need to 
>>>worry about i18n interactions there).
>>
>>I don't believe it's yet been suggested that we would translate the 
>>Scheme names of primitives, so I doubt there would be a problem here. 
>>(Out of interest, do any other scripting languages do this?)
> 
> 
> I was thinking of the "is deprecated, please use" part.  The symbol 
> names we should display as they are, but possibly the recommendation to 
> change the application code should be given in Swahili or Klingon or 
> whatever.  That we could do at run time, and gcc could do it at compile 
> time, but I don't think we can do anything about it at link time.

I see - thanks for explaining.

Regards,
	Neil


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: deprecated symbol warnings
  2005-05-26 18:58                 ` deprecated symbol warnings Neil Jerram
@ 2005-05-28 21:55                   ` Ken Raeburn
  0 siblings, 0 replies; 24+ messages in thread
From: Ken Raeburn @ 2005-05-28 21:55 UTC (permalink / raw)
  Cc: guile-user

On May 26, 2005, at 14:58, Neil Jerram wrote:
>>> What is the extra benefit of link-time warnings over compile-time?  
>>> Are there any cases where the user will see a link-time warning 
>>> without a corresponding compile-time one?
[...]

> All of which strike me as pretty marginal.

Okay...

>>>  Would link-time warnings show up when linking against a 3rd party 
>>> library that chose to use deprecated symbols?
>> Yes.  Hmm, at least for a static library.  I'm not sure about a 
>> shared library, if it would happen when the library was built, or 
>> used, or both.  I would assume they would be printed when the library 
>> is built, at least.  I'm guessing that this would probably be the 
>> most interesting of the cases.
>
> Interesting in a sense, yes - but I was thinking that this is a good 
> argument for NOT implementing link-time warnings.  The point being 
> that in this case the developer can't do anything about the warnings, 
> so they're just an annoyance.

Good point.

If these were security-related warnings, I'd suggest that they should 
be displayed anyways, to make the end user/developer aware that they're 
using software that could potentially compromise their systems.  But 
for deprecated symbols, all one could do would be to complain at the 
third party supplying the library.

>> Or, in the real world, if all the non-fatal compile-time warnings 
>> have all scrolled off the screen and the trailing bits of the "make" 
>> output still visible, and the only bits likely to get looked at 
>> unless something breaks, include only the final link step.
>
> Seriously?  (In my real world, if people are concerned about warnings 
> they put processes in place so as not to miss them.)

Well, I haven't looked over people's shoulders much while they build 
software, but enough software has warnings while building that I expect 
that's not the normal process for a lot of people.  But if an 
"interesting" warning (i.e., not the 
pointer-assignment-changes-signedness or cast-changes-alignment or 
other relatively benign warnings they may be in the habit of ignoring) 
is still on-screen when the build finishes, maybe they'll take note.

Also, in some packages, link time is when arbitrary developer-provided 
warnings get displayed now, if only because compile-time support hasn't 
been there.

Hmm... come to think of it, though, we're increasingly working in a 
world where building software package X requires that you have software 
package Y installed, and software package Y may be built via some 
provided package system that routinely ignores warnings as it builds 
and installs some large collection of packages based on some dependency 
tree.  That might be a case where someone hacking on package X might 
like to know that package Y does have some issues, and they might be 
able to do something about it, but they wouldn't normally go looking 
for problems there.

>> If it's not that interesting after all, I could drop it (as I 
>> indicated, it's the more complicated approach, though not terribly 
>> so) and just go with the compile-time warnings based on the 
>> predefined macros.
>
> That would be my inclination.

Okay.  Unless someone else wants the link-time warnings, I'll start 
backing that part out of my source tree soon.  They're pretty 
independent, so it wouldn't be hard to put them back in later as a 
separate bit of work.

Ken

P.S.  Apparently I've got updated assignment forms I need to file -- 
the FSF has already sent them to me -- and I probably need to get the 
current disclaimer form to my current employer.  So it'll take a little 
while yet before the patches can go in.  But I'll try and send 
something for review soon anyways.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

end of thread, other threads:[~2005-05-28 21:55 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <E1CmxC0-0003DB-Gx@sc8-sf-web1.sourceforge.net>
2005-01-07 17:31 ` SCM_LENGTH ??? Bruce Korb
2005-01-07 18:07   ` Marius Vollmer
2005-01-07 18:27     ` Bruce Korb
2005-01-10 17:26       ` Marius Vollmer
2005-01-10 18:03         ` Bruce Korb
2005-01-10 20:59           ` Greg Troxel
2005-01-11 18:08           ` Marius Vollmer
2005-01-11 23:40             ` Kevin Ryde
2005-01-12 10:33               ` Marius Vollmer
2005-01-10 20:34         ` Ken Raeburn
2005-01-11 16:12           ` Bruce Korb
2005-01-11 18:32           ` Marius Vollmer
2005-05-14  2:52           ` deprecated symbol warnings Ken Raeburn
2005-05-14 12:40             ` Neil Jerram
2005-05-14 18:48               ` Ken Raeburn
2005-05-15  3:17                 ` John W. Eaton
2005-05-15 10:19                   ` Neil Jerram
2005-05-16  5:52                   ` Ken Raeburn
2005-05-18  4:22                     ` tomas
2005-05-18 12:20                     ` Ludovic Courtès
2005-05-18 17:17                       ` automated testing (was Re: deprecated symbol warnings) Ken Raeburn
2005-05-26 18:58                 ` deprecated symbol warnings Neil Jerram
2005-05-28 21:55                   ` Ken Raeburn
2005-05-18 19:18               ` deprecated symbol warnings and Windows Ken Raeburn

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).