| Deutsch English Français Italiano |
|
<vu2hmg$3jn88$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!eternal-september.org!.POSTED!not-for-mail
From: Janis Papanagnou <janis_papanagnou+ng@hotmail.com>
Newsgroups: comp.lang.c
Subject: Re: Loops (was Re: do { quit; } else { })
Date: Sun, 20 Apr 2025 12:18:55 +0200
Organization: A noiseless patient Spider
Lines: 141
Message-ID: <vu2hmg$3jn88$1@dont-email.me>
References: <vspbjh$8dvd$1@dont-email.me> <vtammh$174ev$1@dont-email.me>
<vtavn9$1dp7m$3@dont-email.me> <vtb8nv$1plb2$2@dont-email.me>
<vtba81$1qfbm$1@dont-email.me> <vtbc6o$1te2o$1@dont-email.me>
<vtbhjv$24api$1@dont-email.me> <vtbn2k$293r1$1@dont-email.me>
<vtc19j$2kqlj$1@dont-email.me> <87a58mqt2o.fsf@nosuchdomain.example.com>
<vtc7mp$2q5hr$1@dont-email.me> <vtcqf6$3j95s$1@dont-email.me>
<vtdh4q$b3kt$1@dont-email.me> <vtf7fe$1qtpg$1@dont-email.me>
<vtgfuf$31ug1$1@dont-email.me> <20250413072027.219@kylheku.com>
<vtgpce$39229$1@dont-email.me> <vti2ki$g23v$1@dont-email.me>
<vtin99$vu24$1@dont-email.me> <vtiuf0$18au8$1@dont-email.me>
<vtj97r$1i3v3$1@dont-email.me> <vtl166$36p6b$1@dont-email.me>
<vtlcg0$3f46a$2@dont-email.me> <vtnekn$1fogv$1@dont-email.me>
<vto2mb$20c4n$1@dont-email.me> <vtu4i5$3hteg$1@dont-email.me>
<vtujko$3uida$1@dont-email.me> <vtvfop$rf2p$1@dont-email.me>
<vtvto2$15otp$1@dont-email.me> <vu01k7$1bfv2$1@dont-email.me>
<vu0720$1dva7$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 20 Apr 2025 12:18:57 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="f9c289921277465120b19f8feaf481fb";
logging-data="3792136"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18tZ26Aou4CKYT6ybxaqc2K"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.8.0
Cancel-Lock: sha1:0S9xtlfpCtmzrc1nWYLyyT+uJJs=
X-Enigmail-Draft-Status: N1110
In-Reply-To: <vu0720$1dva7$1@dont-email.me>
Bytes: 7532
On 19.04.2025 15:05, bart wrote:
> On 19/04/2025 12:32, Janis Papanagnou wrote:
>> On 19.04.2025 12:26, bart wrote:
>>> On 19/04/2025 07:27, Janis Papanagnou wrote:
>>>> On 19.04.2025 00:27, bart wrote:
>>>
>
>> I'm doing hard to imagine a yet more
>> primitive one. All other loops pointed out that far (Algol 68,
>> Simula, "C") allow more complex (less primitive) loop constructs.
>
> C, really?
You have already seen many examples of loops that can't be written
with those heavily restricted Pascal/BASIC/Fortran-like loops.
>
> I don't understand why you're happy using a crippled looping mechanism,
> that is a PITA to use for the majority of iterating loops, just so you
> have that flexibility for the whacky loops that are in the minority,
> most of which can be trivially expressed with 'while'.
Because with it I can formulate everything I regularly need in "C"
(as opposed to those primitive and restricted, specialized loops).
Think about it; what could the alternatives be that the "C" designers
have chosen...
* Provide just a very restricted Pascal like loop? - Then you'd have
all the now common more diverse loops made impossible and require to
spread the loop logic across many primitive language constructs.
* Provide two or there forms of 'for' loops to suit your demands? -
That would be a possibility, but language designers often don't want
to overload their language, and especially not invent things that can
already be expressed easily with the existing features.
>
>> We disagree what "primitive" means;
>> so it's hard to continue the discussion below since we're speaking
>> different languages, obviously.
>
> I'll tell you a secret: a few years ago, I also added a C-style 'for'
> statement to my language. So it had two kinds of 'for' that looked like
> this:
>
> for i in a..b do # also for i[:=a] to b do
>
> cfor A, B, C do # A B C are arbitrary expressions
>
> This was because I'd got fed up with people telling me all these
> wonderful things that C's for could do, that I couldn't. So now I could
> do the same!
The feature sets in languages should (IMO) follow a design principle.
It may make sense in one language or not in another language. I don't
know "your language" so I cannot suggest you anything. All I can say
is that such featuritis is, as "design principle", not something that
I'd say you've done right as a basic design approach of your language.
(But as often said; I don't care about "your language" and what you
do in your personal environment.)
> [...]
>
> If you were me, would you have instead have got rid of the dedicated
> 'for', and kept only 'cfor'? Be honest!
(Honestly, I just formulated it above what I think.)
>
> Since that is exactly what you have been saying about C's 'for'; you
> don't /want/ a better 'for' in C, even if it was in addition to the
> current 'for': 'there is nothing wrong with latter, and anyone who can't
> hack it should give up programming'.
(Look up what had been written; I won't repeat it.)
> [...]
>>> In fact, WHY does Awk have that other kind of loop? Since the primitive
>>> form can express it just as well.
>>
>> No. You have a complete misconception about that. In all respects.
>
> Really? So why does this work:
I've explained it in my previous post.
>
> split ("one two three four five", table)
>
> for (i=1; i<=5; i++)
> print i, table[i]
>
> I thought you said Awk didn't support indexed arrays? [...]
Yes. Standard Awk supports only an associative array as structured
data type. All other array usages are implicit "quirks"; e.g. above
indexed access is done by coercing integer values to strings that
are used as keys to the associative array, and "multi-dimensional"
arrays are also just emulated, and an index [i,j] is actually a key
that is constructed by [string(i) SUBSEP string(j)] where SUBSEP is
a string separator, so all in all also just a string that gets used
as key to the associative array. The same with the "if ((i,j) in a)"
the (i,j) gets converted to a string to be used as key. The "for-in"
loop with a quasi "two-dimensional index" "for ((i,j) in a)" isn't
possible[*], that's especially nasty since you have no direct access
to 'i' and 'j'; if you want that you need an explicit 'split()' as
in for (key in a) { split(key,k,SUBSEP); i=k[1]; j=k[2]; ... } .
[*] It's actually a feature I suggested as a GNU Awk extension, but
it was dismissed since the feature could be emulated (as shown).
>
>> don't use that language. Why are you here, in CLC; just to complain?
>
> I'm here to understand why people are deifying C and its crude for-loop
> by arguing that black is white:
>
> do i = 1,10 # 'primitive'
> for(i=1; i<=10; ++i) # 'advanced'
"C" loops offer a useful flexibility that Fortran loops don't provide.
>
> But then at the same some are saying that:
>
> 'for' i 'from' 1 'to' 10 'do'
>
> from Algol68 is advanced (because you can stick 'while' in there?).
The loops in the three languages allow more than the simple FROM..TO
traversal. Yes, that is advanced. And the "C" loop, because of its
elementary building blocks, allows even more things to formulate.
>
> It's a fascinating. I guess the answers are more psychological than
> otherwise.
Most of the discussion with you is mostly "psychological".
Janis