Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <v3ms7b$d5sq$1@dont-email.me>
Deutsch   English   Français   Italiano  
<v3ms7b$d5sq$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: Re: Interval Comparisons
Date: Tue, 4 Jun 2024 13:02:03 +0200
Organization: A noiseless patient Spider
Lines: 62
Message-ID: <v3ms7b$d5sq$1@dont-email.me>
References: <v3merq$b1uj$1@dont-email.me> <v3ml0d$bpds$5@dont-email.me>
 <v3mlrb$c7d5$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 04 Jun 2024 13:02:03 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="7740955b17fd8df0cccaba227b9e3b39";
	logging-data="432026"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19P777T5QYBNNh1/AbQU5pm8tz8Zmekre8="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
 Thunderbird/102.11.0
Cancel-Lock: sha1:i74YjJKIpaurrhsLFJ/hGNpRlFc=
Content-Language: en-GB
In-Reply-To: <v3mlrb$c7d5$1@dont-email.me>
Bytes: 3516

On 04/06/2024 11:13, Mikko wrote:
> On 2024-06-04 08:58:53 +0000, David Brown said:
> 
>> On 04/06/2024 09:14, Lawrence D'Oliveiro wrote:
>>> Would it break backward compatibility for C to add a feature like this
>>> from Python? Namely, the ability to check if a value lies in an 
>>> interval:
>>>
>>> def valid_char(c) :
>>> "is integer c the code for a valid Unicode character." \
>>> " This excludes surrogates."
>>> return \
>>> (
>>> 0 <= c <= 0x10FFFF
>>> and
>>> not (0xD800 <= c < 0xE000)
>>> )
>>> #end valid_char
>>
>> Do you mean, could C treat "a <= x <= b" as "(a <= x) && (x <= b)" 
>> without breaking existing code?  The answer is no, C treats it as the 
>> expression "(a <= x) <= b".  So you would be changing the meaning of 
>> existing C code.  I think it's fair to say there is likely to be very 
>> little existing correct and working C code that relies on the current 
>> interpretation of such expressions, but the possibility is enough to 
>> rule out such a change ever happening in C.  (And it would also 
>> complicate the grammar a fair bit.)
>>
>>
>> <https://c-faq.com/expr/transitivity.html>
> 
> That does not prevet from doing the same with a different syntax.
> The main difference is that in the current C syntax that cannot be
> said without mentioning c twice. In the example program C would
> require that c is mentioned four times but the shown Python code
> only needs it mentioned twice. An ideal syntax woult only mention
> it once, perhaps
> 
>   return c in 0 .. 0xD7FF, 0xE000 .. 0x10FFFF ;
> 
> or
> 
>   return c : [0 .. 0xD800), [0xE000 .. 0x10FFFF] ;
> 
> or something like that, preferably so that no new reserved word is
> needed.
> 

Sure, you can always add new things to a language if they would 
previously have been syntax errors or constraint errors.  But is there a 
use for it?

It is fine if you have a language that has good support for lists, sets, 
ranges, and other higher-level features - then an "in" keyword is a 
great idea.  But C is not such a language, and that kind of feature 
would be well outside the scope of the language.

It would be easy enough to write a macro "in_range(a, x, b)" that would 
do the job.  It is even easier, and more productive, that you simply 
write the "valid_char" function and use it, if that's what you need.