guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: null terminated strings


From: Brian S McQueen
Subject: Re: null terminated strings
Date: Fri, 16 Jan 2004 10:20:30 -0800 (PST)

I know you folks are discussing an important topic regarding the design
and future of libguile, but my more simple, but I am a very basic question
on this subject.  I am wondering about the most practical way for a
programmer to get a C string from a scheme string.  So what are some
common techniques?

The approach I used was tedious, so I expect you folks have a better way.
I did this:

  login_chrs = SCM_STRING_CHARS(login_scm);
  login_len = SCM_STRING_LENGTH(login_scm);

  login  = (char *)scm_must_malloc(login_len + 1, "func");
  memcpy(login, login_chrs, login_len);
  memset(login + login_len, '\0', 1);

  If the scheme string is truly null terminated, this can be greatly
simplified.

Brian

On Fri, 16 Jan 2004, Andreas Voegele wrote:

> Roland Orre writes:
>
> > On Fri, 2004-01-16 at 11:17, Andreas Voegele wrote:
> >> Roland Orre writes:
> >>
> >> > On Fri, 2004-01-16 at 10:10, Andreas Voegele wrote:
> >> >
> >> >> "Remove calls to SCM_STRING_COERCE_0TERMINATION_X.  Since the
> >> >> substring type is gone, all strings are 0-terminated anyway."
> >> >
> >> > Such a statement is very worrying. What happened to the promises
> >> > that all substrings will be shared strings?
> >>
> >> I'm new to Guile.  I don't know why shared strings were removed from
> >> Guile, but things were probably simplified greatly by this decision.
> >> I think that it is very useful to zero terminate all strings since
> >> embedding and extending Guile becomes easier.
> >
> > During all years I've used scm and later guile (I think 14 years now)
> > I have very very rarely had any need for null terminated strings. There
> > is a function in guile to convert a null terminated string to a guile
> > string, this I've used a few times. In C programming I often don't
> > rely on null terminated strings either as there are many C library
> > functions that works with length, which I consider more elegant.
>
> It probably depends on what you're doing with Guile.  I intend to use
> Guile to glue together code from a lot of existing C libraries.  I'm
> currently writing wrappers for several C libraries and a lot of
> functions provided by these libraries require null terminated strings.
>
> On the other hand, I agree that a stable API is important.  Because of
> this I also thought about using Guile 1.4 but I came to the conclusion
> that Guile 1.6 is better when you need to wrap a lot of C libraries.
> (I know SWIG but I don't like it very much.)
>
> > The absence of shared substrings on the other hand means a lot of
> > special code to be able to do something similar without having to
> > copy and create strings all the time. For instance in a conversion
> > routine for fixed data base tables I made some years ago I had first
> > used substrings. The program took 15 hours to run on a specific
> > table. When I changed to use shared substrings it took about 1 hour
> > on the same table.
>
> That's indeed a huge difference.
>
> > I think it is quite bad to have the requirement that guile should
> > rely on null terminated strings as it is often quite easy to come
> > around this from my point of view. In guile 1.6.4 it is also
> > expressed so that all substrings are intended to become internally
> > shared, which I don't see have happened yet.
>
> I'm wondering how substrings could be shared when there's also a
> promise that all strings are null terminated.
>
>
> _______________________________________________
> Guile-user mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/guile-user
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]