[Top][All Lists]

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

Re: GH replacement proposal (includes a bit of Unicode)

From: Dirk Herrmann
Subject: Re: GH replacement proposal (includes a bit of Unicode)
Date: Wed, 26 May 2004 23:27:04 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.2) Gecko/20040220

Marius Vollmer wrote:

 Dirk Herrmann <address@hidden> writes:

> Marius Vollmer wrote:
>> Hmm, yes, that might make sense. However, the -1 idiom is pretty
>> much standard for this kind of interface, no?
> I personally don't like this kind of 'one value, several meanings'
> paradigm:
> - What, if instead of -1, you pass -2? [...] - Readability suffers.
> [...]

 Yes, I agree that the -1 idiom is not self explaining, but it is well
 established and people will instantly recognize it. I'd even argue

What about the -2 and so on?

You are trying to explain why the -1 idiom is not too bad. But, why
do you think it is better? Do you want to save an identifier? This
can't really be the reason. Especially when looking at Paul's suggestion
to introduce a macro scm_from_locale_0string, which also introduces
a new identifier (and, Paul, I like your name better than my suggestion).

 established and people will instantly recognize it. I'd even argue
 that they will expect to be able to pass -1 for a 'len' parameter and
 will be annoyed when they find out that Guile doesn't allow it.

That's a guess. Maybe you should ask the people what they would prefer?
Considering me as part of them, I would not prefer having the -1 idiom.

> SCM s = scm_from_locale_memory (str, len);

 This can be had with scm_from_locale_string as well, of course. When
 you write

 SCM s = scm_from_locale_string (str, len);

 thats just as readable, I'd say.

I agree that the function name scm_from_local_string when called with
arguments str and len is not less readable (even better, I would say) than
scm_from_locale_memory when called with arguments str and len. My point,
however, was rather in the direction of saying that if the len argument is
required since the application really knows the length, then passing it will
always be readable. This is in contrast to passing the magic number -1 if the
application does not know the length.

However, I think you oversimplify my concerns if you only boild it down to
the readability issue. There is also the aspect of type checking support by the
compiler, the fact that code that works mostly with 0strings always has to
pass an unnecessary parameter, the fact that the scm_from_locale_string
function always has to handle the special -1 case, and probably more.

Summarized, I would just claim that it is not a good API design, since I have
not yet seen a convincing argument in favor of it.

Considering your and Paul's answer, I would like to change my suggestion
to the following pair of functions:

SCM scm_from_locale_string (const unsigned char *str, size_t len);
SCM scm_from_locale_0string (const unsigned char *str);

Best regards,

reply via email to

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