Re: When Is A High/Low-Level Language Not A High/Low-Level Language?

Liste des GroupesRevenir à l c 
Sujet : Re: When Is A High/Low-Level Language Not A High/Low-Level Language?
De : bc (at) *nospam* freeuk.com (Bart)
Groupes : comp.lang.c
Date : 18. Aug 2024, 01:20:49
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v9rb8f$22uj8$1@dont-email.me>
References : 1 2 3
User-Agent : Mozilla Thunderbird
On 17/08/2024 23:11, Lawrence D'Oliveiro wrote:
On Sat, 17 Aug 2024 11:19:30 +0100, Bart wrote:
 
... what does this have to do with C, or anything at all?
 C is supposed to be the epitome of the low-level language that can do bit-
fiddling and unsafe type conversions and the like. This is an example of
an unsafe type conversion (offering a typesafe interface to the caller, of
course) done dynamically, in a language which is generally considered to
be “higher-level” than C.
 In sum: types as first-class objects + low-level bit-fiddling = a
combination unavailable in traditional “low-level” languages like C.
 
Apart from being an apallingly bit of code.
 How would you it less “apallingly”?
 (This sentence no verb. Also speling.)
It's an adverb. Although there should have been two P's.

 
However I can't see the switch-expression; there is a Dict constructor,
where all elements are evaluated, not just the one selected. That is not
how 'switch' works.
 How does a switch-expression work, then? Can you give us an example?
Take this Python code that has a similar dict constructor:
   def prnt(x): print(x); return len(x)
   i=3
   a={1:prnt("One"), 2:prnt("Two"), 3:prnt("Three")}[i]
   print(a)
It selects the third element keyed with '3', but the output is:
   One
   Two
   Three
   5
So 'prnt' has been called 3 times instance of just once. (Also using a non-existent key gives an error.)
The equivalent using 'switch' in one of my languages (or anything expression-based that used any form of multi-way select) is this:
     fun prnt(x) = (println x; x.len)
     i := 3
     a :=
       switch i
       when 1 then prnt("One")
       when 2 then prnt("Two")
       when 3 then prnt("Three")
       else 0
       end
     println a
Output is:
     Three
     5
Only one branch has been evaluated. Plus there is a default value (it's required). Also, since the index values here are in sequence, I can use N-way select:
    a := (i | prnt("One"), prnt("Two"), prnt("Three") | 0)
Same result. You can't use a list here plus normal indexing, as again all elements would be evaluated.

Date Sujet#  Auteur
16 Aug 24 * When Is A High/Low-Level Language Not A High/Low-Level Language?10Lawrence D'Oliveiro
17 Aug 24 +- Re: When Is A High/Low-Level Language Not A High/Low-Level Language?1Steven G. Kargl
17 Aug 24 +* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?7Bart
18 Aug 24 i`* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?6Lawrence D'Oliveiro
18 Aug 24 i `* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?5Bart
18 Aug 24 i  `* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?4Lawrence D'Oliveiro
18 Aug 24 i   `* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?3Bart
18 Aug 24 i    `* Re: When Is A High/Low-Level Language Not A High/Low-Level Language?2Lawrence D'Oliveiro
18 Aug 24 i     `- Re: When Is A High/Low-Level Language Not A High/Low-Level Language?1Bart
20 Aug 24 `- Re: When Is A High/Low-Level Language Not A High/Low-Level Language?1Kenny McCormack

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal