Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #61609

Re: "Death To C"

From Bartc <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: "Death To C"
Date 2015-05-06 14:29 +0100
Organization A noiseless patient Spider
Message-ID <mid4ua$70g$1@dont-email.me> (permalink)
References (3 earlier) <gq6gkapsgtcnsrmulg96q7nvd1v919i5u6@4ax.com> <mia43h$gc2$1@dont-email.me> <pan.2015.05.06.07.10.05.543000@nowhere.invalid> <micko3$bvi$1@dont-email.me> <mid2ik$trt$1@dont-email.me>

Show all headers | View raw


On 06/05/2015 13:49, Richard Heathfield wrote:
> On 06/05/15 09:53, Bartc wrote:

> In which case, why did you set i to 0?

It just got mixed up.

>> But an automatic system would deal with it properly:
>
> So does a programmer who is used to the idiom, and he can deal with it
> without incurring the overhead of automatic bounds-checking. There is no
> such thing as a free lunch. Everything costs cycles. The programmer who
> can be trusted to think about bounds himself is able to squeeze more out
> of the processor than someone who has to rely on an automated
> bounds-check to save his code from blowing up. It is absolutely right
> and proper that automatic bounds-checking systems should be available,
> but absolutely wrong that everyone should be forced to use them, or even
> to be forced into the decision of whether or not to use them all the
> time. So if an implementation wants to offer optional bounds-checking
> via a command line switch, I'm all for it. But it has to be
> switchable-offable.

Sure. It would be for debugging only. In any case, an array-bounds error 
is of no more use to a customer than a seg-fault (but might contains 
information useful to the developer).

>> A 'for' that didn't need you to specify the exact
>> compare op needed, or better still a 'forall', would have fewer such
>> problems.)
>
> The latter would be a better option. Not quite sure how you'd implement
> it in C, though, given that the compiler may not be able to tell how
> many items forall should cover. Consider:
>
> void foo(int *p)
> {
>    size_t n;
>    forall(p, n) /* how does the compiler know how many times to run this
> loop? */
>    {
>      foo(p[n]);
>    }
> }
>
> It would be a fairly major change to the language, and would almost
> certainly involve information about the array being squirrelled away by
> the compiler, which squirrelling would inevitably incur a performance
> overhead.

I added forall to my own language last week (just so I could say how it 
could be done in C). It was a simple implementation that only copes with 
the cases where the compiler knows the size of the array.

Where the array is dynamic then, assuming the programmer knows what the 
size is, that information can perhaps be imparted in the form of a slice 
of the array (I might use A[1..n] or A[:N] or something like that). In 
the simple case, the forall looks like this in the source language:

[0:10]int data
int x

forall x in data do
    println x
od

(I've made the array 0-based which is what the 0: means), and the output 
C code is along these lines (edited to change things like illegal $ 
signs in names and extraneous labels):

int data[10];
int x;
int _temp1;
     for (_temp1=0; _temp1<=9; ++_temp1) {
         x = data[_temp1];
         printf("%d\n",x);
     }

(Interestingly, this uses the "=" and "<=" pattern that I'd used wrongly 
before!)

Possibly the C code could take the form of a pointer iterating across 
the array, but I'm sure a C compiler can optimise this. Notice the C 
needs: a loop index, an 0 initialiser, a "<=" compare, a "9" limit, a 
"++" operation, and an assignment, which are not needed in the original. 
(As well as a "%d", which needs to match the array element type, but 
that's another matter.)

-- 
Bartc

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

"Death To C" Lynn McGuire <lmc@winsim.com> - 2015-05-04 14:41 -0500
  Re: "Death To C" Melzzzzz <mel@zzzzz.com> - 2015-05-04 22:16 +0200
    Re: "Death To C" Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-05-04 13:26 -0700
      Re: "Death To C" Melzzzzz <mel@zzzzz.com> - 2015-05-04 22:51 +0200
      Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-04 22:02 +0100
        Re: "Death To C" Melzzzzz <mel@zzzzz.com> - 2015-05-05 00:06 +0200
  Re: "Death To C" Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-05-04 13:22 -0700
    Re: "Death To C" Melzzzzz <mel@zzzzz.com> - 2015-05-04 22:41 +0200
      Re: "Death To C" Robert Wessel <robertwessel2@yahoo.com> - 2015-05-04 20:25 -0500
        Bounds checking in C (Was: "Death To C") gazelle@shell.xmission.com (Kenny McCormack) - 2015-05-05 02:15 +0000
          Re: Bounds checking in C (Was: "Death To C") BGB <cr88192@hotmail.com> - 2015-05-06 10:23 -0500
        Re: "Death To C" Les Cargill <lcargill99@comcast.com> - 2015-05-04 21:36 -0500
          Re: "Death To C" Robert Wessel <robertwessel2@yahoo.com> - 2015-05-05 01:01 -0500
            Re: "Death To C" Les Cargill <lcargill99@comcast.com> - 2015-05-05 12:23 -0500
          Re: "Death To C" CHIN Dihedral <dihedral88888@gmail.com> - 2015-05-05 03:06 -0700
        Re: "Death To C" Ian Collins <ian-news@hotmail.com> - 2015-05-05 17:43 +1200
          Re: "Death To C" Robert Wessel <robertwessel2@yahoo.com> - 2015-05-05 01:00 -0500
            Re: "Death To C" Robert Wessel <robertwessel2@yahoo.com> - 2015-05-05 01:13 -0500
              Re: "Death To C" Ian Collins <ian-news@hotmail.com> - 2015-05-05 19:15 +1200
                Re: "Death To C" Robert Wessel <robertwessel2@yahoo.com> - 2015-05-05 02:41 -0500
                Re: "Death To C" Ian Collins <ian-news@hotmail.com> - 2015-05-05 20:12 +1200
        Re: "Death To C" glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-05-05 06:48 +0000
        Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-05 10:57 +0100
          Re: "Death To C" asetofsymbols@gmail.com - 2015-05-05 16:53 -0700
          Re: "Death To C" Nobody <nobody@nowhere.invalid> - 2015-05-06 08:10 +0100
            Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-06 09:53 +0100
              Re: "Death To C" Richard Heathfield <rjh@cpax.org.uk> - 2015-05-06 13:49 +0100
                Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-06 14:29 +0100
                Re: "Death To C" Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-05-06 09:43 -0700
                Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-06 18:24 +0100
          Re: "Death To C" asetofsymbols@gmail.com - 2015-05-08 00:44 -0700
            Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-08 13:49 +0100
    Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-04 22:15 +0100
      Re: "Death To C" BGB <cr88192@hotmail.com> - 2015-05-08 09:09 -0500
    Re: "Death To C" Stephen Sprunk <stephen@sprunk.org> - 2015-05-04 16:18 -0500
    Re: "Death To C" Ian Collins <ian-news@hotmail.com> - 2015-05-05 12:49 +1200
  Re: "Death To C" raltbos@xs4all.nl (Richard Bos) - 2015-05-08 21:52 +0000
  Re: "Death To C" Merikissa <merikissa@no.spam.net> - 2015-05-10 04:04 +0300
  Re: "Death To C" "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-05-13 08:11 -0700
    Re: "Death To C" David Kleinecke <dkleinecke@gmail.com> - 2015-05-13 10:00 -0700
      Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-13 18:20 +0100
        Re: "Death To C" David Kleinecke <dkleinecke@gmail.com> - 2015-05-14 10:47 -0700
          Re: "Death To C" "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-05-14 11:09 -0700
          Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-15 19:21 +0100
            Re: "Death To C" David Kleinecke <dkleinecke@gmail.com> - 2015-05-16 09:10 -0700
              Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-16 20:45 +0100
                Re: "Death To C" David Kleinecke <dkleinecke@gmail.com> - 2015-05-17 09:38 -0700
        Re: "Death To C" raltbos@xs4all.nl (Richard Bos) - 2015-05-17 10:47 +0000
          Re: "Death To C" Bartc <bc@freeuk.com> - 2015-05-17 12:20 +0100
      Re: "Death To C" "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-05-13 10:24 -0700
        Re: "Death To C" David Brown <david.brown@hesbynett.no> - 2015-05-13 22:01 +0200
    Re: "Death To C" Nobody <nobody@nowhere.invalid> - 2015-05-14 07:48 +0100

csiph-web