Deutsch English Français Italiano |
<871q5c1gwe.fsf@nosuchdomain.example.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson <Keith.S.Thompson+u@gmail.com> Newsgroups: comp.lang.c Subject: Re: Interval Comparisons Date: Tue, 04 Jun 2024 15:29:05 -0700 Organization: None to speak of Lines: 59 Message-ID: <871q5c1gwe.fsf@nosuchdomain.example.com> References: <v3merq$b1uj$1@dont-email.me> <v3mu14$dhe9$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Wed, 05 Jun 2024 00:29:06 +0200 (CEST) Injection-Info: dont-email.me; posting-host="e46fb4f9b5052ac42d5a7acf6667e1c2"; logging-data="653446"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19gXKh9RhTijDPbX7wz5xAo" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) Cancel-Lock: sha1:2j2F/fq2TFkxvX5ULdadH1UE21o= sha1:er1FYOBRsqWx3a/DP+T05X4kYhQ= Bytes: 3548 Thiago Adams <thiago.adams@gmail.com> writes: > On 04/06/2024 04: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 > > See Chaining Comparisons > https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0893r0.html > > https://medium.com/@barryrevzin/chaining-comparisons-seeking-information-from-the-audience-abec909a1366 > > I don't know what are the current status of this proposal. That's a proposal for C++. One interesting piece of information is that the authors did some research on existing code: """ To that end, we created a clang-tidy check for all uses of chained comparison operators, ran it on many open source code bases, and solicited help from the C++ community to run it on their own. The check itself casts an intentionally wide net, matching any instance of a @ b @ c for any of the six comparison operators, regardless of the types of these underlying expressions. Overall, what we found was: - Zero instances of chained arithmetic comparisons that are correct today. That is, intentionally using the current standard behavior. - Four instances of currently-erroneous arithmetic chaining, of the assert(0 <= ratio <= 1.0); variety. These are bugs that compile today but don’t do what the programmer intended, but with this proposal would change in meaning to become correct. - Many instances of using successive comparison operators in DSLs that overloaded these operators to give meaning unrelated to comparisons. """ I presume they searched only C++ code, but I'd expect similar results for C. As indicated above, such a change would quietly break any existing code that uses something like `a < b < c` that's intended to mean `(a < b) < c`, but it would quietly *fix* any code that uses `a < b < c` under the incorrect assumption that the comparisons are chained. (Though the latter code will not have been tested under the new semantics.) -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */