From: Marius Vollmer <marius.vollmer@uni-dortmund.de>
Subject: Re: GH replacement proposal (includes a bit of Unicode)
Date: Tue, 13 Apr 2004 15:25:53 +0200 [thread overview]
Message-ID: <ljvfk4qaam.fsf@troy.dt.e-technik.uni-dortmund.de> (raw)
In-Reply-To: <m3hdvvzv4q.fsf@multivac.cwru.edu> (Paul Jarc's message of "Wed, 07 Apr 2004 11:04:47 -0400")
prj@po.cwru.edu (Paul Jarc) writes:
> Marius Vollmer <marius.vollmer@uni-dortmund.de> wrote:
>> I have a partial proposal for making type conversions between Scheme
>> and C easier.
>
> Looks nice & clean.
Thanks, do you think it worth implementing (and thereby deprecting the
old stuff)?
>> - macro-free so that we can maintain binary compatibility easier
>
> Well, macros don't cause problems as long as the underlying functions
> (if any) also keep the same interface, right? Has there been much
> change of, or pressure to change, those interfaces with the current
> macros?
I agree that this is not the most important point: there wont be
binary compatability between 1.6 and 1.8 anyway. But of course, it
would be nice to have easier binary compatability in the future.
>> Then there is the error handling: the functions below do not take
>> "subr" or "pos" arguments to indicate where the error has happened. I
>> don't think they are really needed and in any case only provides part
>> of the backtrace.
>
> I have some code that benefits from having the subr name in the
> exception - in the case of 'system-error, it walks the stack to find
> and report the call that failed, including arguments.
Can you give a quick example? (Does it walk the C stack and prints
the failed system call?)
>> * Conversion from Scheme to C
>>
>> <type> scm_to_<type> (SCM val, ...);
>>
>> ("convert Scheme to <type>".) When VAL is not representable as a
>> <type> or additional constraints are not satisfied, an error is
>> signalled.
> ...
>> - int scm_to_bool (SCM);
>> - int scm_is_true (SCM);
>>
>> Return 0 when SCM is SCM_BOOL_F, else return 1.
>
> That sounds good for scm_is_true, but maybe scm_to_bool should throw
> an exception if given a value other than SCM_BOOL_[TF], for
> consistency with other scm_to_* functions.
Hmm, I don't think we should do that. There is nothing to be gained
in treating SCM_BOOL_T specifically here. Everywhere else, all values
except SCM_BOOL_F are true, so why should we force the explicit use of
SCM_BOOL_T with scm_to_bool?
Maybe we should't have scm_to_bool and scm_is_bool at all?
scm_is_true (and maybe scm_is_false) should suffice.
>> - SCM scm_is_bool (SCM val);
> ...
>> - SCM scm_is_integer (SCM val);
>
> Those should return int, right?
Yes, thanks!
>> - scm_t_intmax scm_to_signed_integer (SCM val,
>> scm_t_intmax min, scm_t_intmax max);
>> - scm_t_uintmax scm_to_unsigned_integer (SCM val, scm_t_uintmax max);
>
> Wouldn't a min parameter sometimes be useful for unsigned values too?
Yes, maybe. I'll add it.
>> - long scm_to_unicode (SCM ch);
>> - SCM scm_from_unicode (long code);
>
> long, or unsigned long? Does Unicode need negative values?
No, Unicode does not need negative values (as far as I know). I'll
make this unsigned.
>> - SCM scm_from_locale_string (unsigned char *str, ssize_t len);
>>
>> Return a new Scheme string initialized with STR, a string encoded
>> according to the current locale. When LEN is -1, STR must be
>> zero-terminated and its length is found that way. Otherwise LEN
>> gives the length of STR.
>
> Maybe it doesn't matter much, but len could be size_t, and (size_t)-1
> could be the only special value, instead of losing a whole bit to
> signedness.
It doensn't matter much, there wont likely ever be support for strings
that are longer than 31 bits worth of length (or 63 bits). Right now,
strings have only 24 bits for their length (or 56 bits). But yes, we
shouldn't restrict us in the interface, so I'll change LEN to size_t.
We should also specify the units of LEN...
>> The heap should not be locked for long periods of time and no
>> calls to 'normal' libguile functions are allowed while it is
>> locked.
>
> What happens if one is called anyway? Exception, or undefined
> behavior?
Undefined behavior. The function will likely try to lock/unlock the
heap again and that might crash or unlock the heap too early, etc...
>> - SCM scm_c_list_ref (SCM list, int idx);
>> - SCM scm_c_list_set (SCM list, int idx, SCM val);
>> - int scm_c_list_length (SCM list);
>
> I'd suggest size_t instead of int. Same for vectors.
Yes, much better.
Thanks!
_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-devel
next prev parent reply other threads:[~2004-04-13 13:25 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-07 13:00 GH replacement proposal (includes a bit of Unicode) Marius Vollmer
2004-04-07 15:04 ` Paul Jarc
2004-04-13 13:25 ` Marius Vollmer [this message]
2004-04-13 15:54 ` Paul Jarc
2004-04-21 15:08 ` Marius Vollmer
2004-04-21 16:10 ` Paul Jarc
2004-04-21 18:06 ` Marius Vollmer
2004-04-21 16:31 ` Delivery failure (guile-devel@gnu.org) Bruce Korb
2004-04-21 21:34 ` GH replacement proposal (includes a bit of Unicode) Marius Vollmer
2004-04-21 21:46 ` Paul Jarc
2004-04-21 22:19 ` Dale P. Smith
2004-04-21 22:34 ` Paul Jarc
2004-04-21 23:02 ` Kevin Ryde
2004-04-22 17:36 ` Dirk Herrmann
2004-04-22 18:31 ` Paul Jarc
2004-05-17 21:14 ` Marius Vollmer
2004-05-17 21:57 ` Bruce Korb
2004-05-18 9:54 ` Marius Vollmer
2004-04-22 17:00 ` Dirk Herrmann
2004-04-24 10:06 ` Dirk Herrmann
2004-04-24 19:46 ` Marius Vollmer
2004-04-25 20:33 ` Dirk Herrmann
2004-04-25 21:38 ` Paul Jarc
2004-05-17 21:45 ` Marius Vollmer
2004-04-17 13:21 ` Dirk Herrmann
2004-04-22 4:16 ` Rob Browning
2004-04-22 17:48 ` Dirk Herrmann
2004-05-12 20:09 ` Marius Vollmer
2004-05-15 9:50 ` Dirk Herrmann
2004-05-24 18:51 ` Marius Vollmer
2004-05-25 0:21 ` Paul Jarc
2004-05-26 21:27 ` Dirk Herrmann
2004-06-03 21:40 ` Marius Vollmer
2004-06-04 6:52 ` tomas
2004-08-09 22:29 ` Marius Vollmer
2004-05-15 10:18 ` Dirk Herrmann
2004-05-24 19:36 ` Marius Vollmer
2004-05-26 22:11 ` Dirk Herrmann
2004-08-09 22:28 ` Marius Vollmer
2004-04-22 4:39 ` Rob Browning
2004-04-22 17:58 ` Dirk Herrmann
2004-04-23 0:25 ` Rob Browning
2004-04-23 16:57 ` Marius Vollmer
2004-04-23 17:16 ` Rob Browning
2004-05-17 21:24 ` Marius Vollmer
2004-04-23 17:36 ` Andreas Rottmann
2004-05-17 21:30 ` Marius Vollmer
2004-05-18 9:21 ` Andreas Rottmann
2004-04-25 7:54 ` Dirk Herrmann
2004-05-17 21:44 ` Marius Vollmer
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ljvfk4qaam.fsf@troy.dt.e-technik.uni-dortmund.de \
--to=marius.vollmer@uni-dortmund.de \
/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).