From: ludo@gnu.org (Ludovic Courtès)
To: gdb-patches@sourceware.org
Subject: Re: [PATCH v1 02/36] Guile extension language: doc additions
Date: Fri, 03 Jan 2014 21:31:00 -0000 [thread overview]
Message-ID: <87sit4kb1t.fsf@gnu.org> (raw)
In-Reply-To: <83ha9w68av.fsf@gnu.org>
Eli Zaretskii <eliz@gnu.org> skribis:
>> +Guile version 2.0.9 is well tested, earlier 2.0 versions are not.
>
> I'm not sure we should say this in the manual.
In practice the parts that are used (mostly the C API) have seen few
additions over 2.0, so itâs likely that it would work with any 2.0.x.
>> +The implementation uses Guile's @code{smob} (small object)
> ^^^^^^^^^^^^
> This should be in @dfn, as it's new terminology.
Better yet:
(@pxref{Smobs,,, guile, GNU Guile Reference Manual})
[...]
>> +Therefore @code{eq?} does not work as expected.
>> +However @code{equal?} does work.
>> +
>> +@smallexample
>> +(gdb) guile (eq? (make-value 1) (make-value 1))
>> +$1 = #f
>> +(gdb) guile (equal? (make-value 1) (make-value 1))
>> +$1 = #t
>> +@end smallexample
>
> Wouldn't this be confusing for Scheme programmers? Is it terribly
> hard to make eq? work?
We discussed this before, and I think thatâs fine if itâs not doable, as
long as itâs clearly documented.
However, rather than âdoes not work as expectedâ (which could be
misleading), what about something like:
âmake-valueâ always returns a fresh object. Therefore,
@code{<gdb:value>} returned by different calls to âmake-valueâ are
usually different:
@example
(eq? (make-value 1) (make-value 1))
@result{} #f
(equal? (make-value 1) (make-value 1))
@result{} #t
@end example
>> +@defun value? object
What about distinguishing Scheme functions, like:
@deffn {Scheme Procedure} value? object
>> +If @var{type} is not provided,
>> +a Scheme real is converted to the C @code{double} type for the
>> +current architecture.
>
> Isn't Guile built with libgmp? If so, doesn't it support floats
> which, when converted to a double, will lose accuracy?
Guile uses GMP, but GMP is for integers (bignums).
Real numbers in Guile (numbers for which âreal?â returns #t) are either
doubles or rationalsâcalled âinexactâ and âexactâ, respectively (info
"(guile) Real and Rational Numbers"):
scheme@(guile-user)> (real? 3.14)
$2 = #t
scheme@(guile-user)> (real? 22/7)
$3 = #t
scheme@(guile-user)> 22/7
$4 = 22/7
scheme@(guile-user)> (exact->inexact 22/7)
$5 = 3.142857142857143
Thereâs loss of accuracy only when converting a rational to a double.
>> +A Scheme string is converted to a target string, using the current
>> +target encoding.
>
> What if target encoding doesn't support some of the characters in the
> string?
Guileâs behavior can be controlled with
â%default-port-conversion-strategyâ: it can raise an exception, or
substitute any characters that could not be converted, or escape them
(info "(guile) Ports").
Perhaps this should be briefly mentioned, with a cross-ref.
>> +The optional @var{errors} argument is either @code{"strict"}
>> +or @code{"replace"}. A value of @code{"strict"} corresponds to
>> +Guile's @code{SCM_FAILED_CONVERSION_ERROR} and a value of @code{"replace"}
>> +corresponds to Guile's @code{SCM_FAILED_CONVERSION_QUESTION_MARK}.
>
> Suggest a cross-reference to Guile documentation here.
Agreed. Also, Guile talks of âconversion strategyâ and âconversion
error handlerâ, with values âerrorâ, âsubstituteâ, and âescapeâ (at the
Scheme level), and Iâd recommend sticking to those names and terminology.
>> +If the optional @var{length} argument is given, the string will be
>> +fetched and encoded to the length of characters specified. If
>> +the @var{length} argument is not provided, the string will be fetched
>> +and encoded until a null of appropriate width is found.
>
> Isn't this null termination description skewed towards C-like
> languages? Aren't there languages where strings don't have to be
> null-terminated?
Yes, and thatâs when LENGTH should be provided, AIUI.
(I agree with most of Eliâs other suggestions.)
Thanks to both of you,
Ludoâ.
next prev parent reply other threads:[~2014-01-03 21:31 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-24 19:03 Doug Evans
2013-12-25 19:27 ` Eli Zaretskii
2014-01-03 21:31 ` Ludovic Courtès [this message]
2014-01-04 7:12 ` Eli Zaretskii
2014-01-04 11:57 ` Ludovic Courtès
2014-01-04 14:41 ` Eli Zaretskii
2014-01-04 17:42 ` Ludovic Courtès
2014-01-04 20:00 ` Eli Zaretskii
2014-01-16 4:20 ` Doug Evans
2014-01-18 20:36 ` Doug Evans
2014-01-18 20:52 ` Ludovic Courtès
2014-01-18 20:55 ` Doug Evans
2014-01-19 16:58 ` Eli Zaretskii
2014-01-19 17:19 ` Doug Evans
2014-01-19 17:34 ` Eli Zaretskii
2014-01-19 17:53 ` Doug Evans
2014-01-19 18:10 ` Eli Zaretskii
2014-01-19 21:19 ` Doug Evans
2014-01-18 20:16 ` Doug Evans
2014-01-18 20:42 ` Ludovic Courtès
2014-01-18 21:57 ` Doug Evans
2014-01-19 14:46 ` Ludovic Courtès
2014-01-19 21:37 ` Doug Evans
2014-01-19 22:50 ` Ludovic Courtès
2014-01-18 22:32 ` Doug Evans
2014-01-19 14:47 ` Ludovic Courtès
2014-01-19 15:56 ` Eli Zaretskii
2014-01-19 16:13 ` Ludovic Courtès
2014-01-19 17:05 ` Doug Evans
2014-01-18 20:06 ` Doug Evans
2014-01-18 20:24 ` Eli Zaretskii
2014-01-18 20:53 ` Doug Evans
2014-01-19 16:57 ` Eli Zaretskii
2014-01-19 17:42 ` Doug Evans
2014-01-19 21:01 ` Doug Evans
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=87sit4kb1t.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=gdb-patches@sourceware.org \
/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