Deutsch English Français Italiano |
<vbjtmi$1sqao$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Bart <bc@freeuk.com> Newsgroups: comp.lang.c Subject: Re: Top 10 most common hard skills listed on resumes... Date: Sun, 8 Sep 2024 11:18:58 +0100 Organization: A noiseless patient Spider Lines: 82 Message-ID: <vbjtmi$1sqao$1@dont-email.me> References: <vab101$3er$1@reader1.panix.com> <valrj7$367a8$2@dont-email.me> <87mskwy9t1.fsf@bsb.me.uk> <vanq4h$3iieb$1@dont-email.me> <875xrkxlgo.fsf@bsb.me.uk> <vapitn$3u1ub$1@dont-email.me> <87o75bwlp8.fsf@bsb.me.uk> <vaps06$3vg8l$1@dont-email.me> <871q27weeh.fsf@bsb.me.uk> <20240829083200.195@kylheku.com> <87v7zjuyd8.fsf@bsb.me.uk> <20240829084851.962@kylheku.com> <87mskvuxe9.fsf@bsb.me.uk> <vaq9tu$1te8$1@dont-email.me> <vbci8r$1c9e8$1@paganini.bofh.team> <vbcs65$eabn$1@dont-email.me> <vbekut$1kd24$1@paganini.bofh.team> <vbepcb$q6p2$1@dont-email.me> <vbj6ii$1q6mh$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sun, 08 Sep 2024 12:18:59 +0200 (CEST) Injection-Info: dont-email.me; posting-host="ad79b9a69b5377684053ea6685c7dbff"; logging-data="1993048"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/RDmg4j/cVvngqrgnzqnVX" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:0ZIul7gGeFxUmCo3cTMjeNfvkFM= In-Reply-To: <vbj6ii$1q6mh$1@dont-email.me> Content-Language: en-GB Bytes: 3771 On 08/09/2024 04:44, Janis Papanagnou wrote: > On 06.09.2024 13:34, Bart wrote: >> >> In more complicated cases in languages, then some asymmetry does come >> up. For example, suppose C allowed this (my language allows the >> equivalent): >> >> (c ? a : b) = x; > > In Algol 68 you can write > > IF c THEN a ELSE b FI := x > > or, in a shorter form, as > > ( c | a | b ) := x > > if you prefer. Yes, that's my syntax too as that's where I copied it from. I've been able to write such code since the 80s. It applies also to any value-returning statement (switch, case, n-way select, block**) and can nest. But the feature (using them in lvalue contexts) was rarely used. (** This is: (a, b, c) = 0; in C, which is illegal. But put in explicit pointers, and it's suddenly fine: *(a, b, &c) = 0; So why can't the compiler do that?) >> >> So this assigns to either a or b depending on c. My implementation >> effectively turns it into this: >> >> *(c ? &a : &b) = x; >> >> So using explicit references and derefs. However, that is internal. The >> symmetry still exists in the syntax: >> >> (c ? a : b) = (c ? a : b); > > This is only a "visual" symmetry, not a semantical one. > > The LHS of the Algol 68 example is of 'REF' (lvalue) type, as it would > be the case with a language that supports a syntax as you show it here. This is where I differ from Algol68, where I had to considerably simplify the semantics to get something I could understand and implement. Take this C: int A, B; A = B; There are two types associated with the LHS: 'int*' which is the type the name A (its address), and 'int' which is the type of A's value. So, why would a language choose int* over int as /the/ type of an assignment target? As far as the user is concerned, they're only dealing with int value types. If they have to consider that variables have addresses, then the same applies to B! This is where I think Algol68 got it badly wrong. > > I'm not sure if you should adjust your wording (concerning "symmetry") > given that you seem to widely inflict confusion here. > > Janis >