Why not discard variables after last use?

By: (0xe2.0x9a.0x9b.delete@this.gmail.com), April 2, 2020 12:41 pm
Room: Moderated Discussions
Heikki Kultala (heikki.kultala.delete@this.tuni.fi) on March 31, 2020 1:01 pm wrote:
> ⚛ (0xe2.0x9a.0x9b.delete@this.gmail.com) on March 31, 2020 8:02 am wrote:
> > Linus Torvalds (torvalds.delete@this.linux-foundation.org) on March 28, 2020 9:40 am wrote:
> > > Again, the argument that zeroing variables hides bugs is complete garbage.
> >
> > A crucial point is that C, like most current programming
> > languages, does not have a variable discard statement.
>
> C has a "free" operator for dynamically allocated variakles.
>
> > The runtime-time cost of this feature would be zero, unless using a compiler
> > flag to randomize the contents of discarded memory locations.
>
> If the run-time cost would be zero, then would also be the benefit.

The runtime cost of type information in C code is zero, it exists solely for the purpose of aiding humans in understanding what would otherwise be just raw binary data. Are you saying that the benefit of type information in C is zero?

> If would just be a source for new kinds of bugs.

Indeed, the compiler would refuse to compile codes properly annotated with the "discard" keyword because it would determine that some variables are being used after their declared lifetime ends.

> > C compiler is unable to accurately track the lifetime of variables
> > because it does not know when the life of the variable is ending.
>
> Life of a local variable ends when the variable goes out of the
> scope. And the compiler knows exactly when the scope ends.
>
> Life of a global variable never ends.

The belief that the lifetime of all global variables is infinite is a misconception, where the meaning of "infinite" is "until the program terminates" or "until the machine is rebooted".

> Life of an heap-allocated variable ends when free is called.

Firstly, from the viewpoint of the C compiler, free() is just a normal function just like any other function. It has no reason to believe that it has something to do with the lifetime of objects. The declaration of free() in stdlib.h on my machine is just "extern void free (void *__ptr) __THROW" without providing any kind of hint to the compiler about the actual semantics of this function.

Secondly, free(p) should be followed by "discard p" and potentially multiple "discard r" so that the compiler knows that it is invalid to read the value of variables "p" and "r". "r" is the set of all pointers pointing to the start of the freed region or into the interior of the freed region. Note that in C getting the value of p is different from getting the value of *p.

> When you are proposing makes absolutely no sense.
> It's much better than the compiler performs static analysis on when a local variable
> is alive than the programmer would have to care about this and could call this "discard"
> method.

The discard statement just increases the precision of compile-time analysis, nothing more and nothing less.

> Because the programmer WOULD sometimes call this too early.

Indeed, that would sometimes happen. But it is obvious that this kind of "soft bug" has no ill-effect on the quality of the final product.

-atom
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
Why not initialize all variables to zero?Doug S2020/03/26 12:13 PM
  Most (all?) modern programming languages do this, right?Mark Roulo2020/03/26 04:44 PM
    Most (all?) modern programming languages do this, right?Konrad Scharz2020/03/27 01:09 AM
      Most (all?) modern programming languages do this, right?Gionatan Danti2020/03/27 03:13 AM
        Most (all?) modern programming languages do this, right?Foo_2020/03/27 03:45 AM
          Most (all?) modern programming languages do this, right?Gionatan Danti2020/03/27 09:19 AM
            Most (all?) modern programming languages do this, right?Foo_2020/03/28 02:32 AM
              Most (all?) modern programming languages do this, right?Montaray Jack2020/03/28 10:26 AM
      Most (all?) modern programming languages do this, right?Jeff S.2020/03/27 07:22 AM
        Most (all?) modern programming languages do this, right?anonymou52020/03/27 01:08 PM
  Why not initialize all variables to zero?Etienne2020/03/27 01:56 AM
    Why not initialize all variables to zero?NoSpammer2020/03/27 02:31 AM
  Why not initialize all variables to zero?Carlie Coats2020/03/27 06:17 AM
    Why not initialize all variables to zero?Jukka Larja2020/03/27 10:14 PM
      Why not initialize all variables to zero?Anon2020/03/28 12:01 AM
        Why not initialize all variables to zero?Jukka Larja2020/03/28 08:25 AM
          Why not initialize all variables to zero?Anon2020/03/28 11:20 AM
            Why not initialize all variables to zero?Jukka Larja2020/03/28 11:45 AM
              Why not initialize all variables to zero?Anon2020/03/28 01:21 PM
                Why not initialize all variables to zero?Jukka Larja2020/03/28 09:49 PM
    Why not initialize all variables to zero?Doug S2020/03/28 11:27 AM
      Why not initialize all variables to zero?Anon2020/03/28 01:24 PM
        Why not initialize all variables to zero?Carlie Coats2020/03/29 06:56 AM
  Why not initialize all variables to zero?Gabriele Svelto2020/03/27 06:52 AM
    Why not initialize all variables to zero?Foo_2020/03/28 02:34 AM
      Why not initialize all variables to zero?Linus Torvalds2020/03/28 09:40 AM
        Why not initialize all variables to zero?Doug S2020/03/28 11:21 AM
          Why not initialize all variables to zero?Linus Torvalds2020/03/28 01:01 PM
            Why not initialize all variables to zero?Etienne2020/04/02 01:14 AM
              Why not initialize all variables to zero?gallier22020/04/02 05:41 AM
              Why not initialize all variables to zero?Doug S2020/04/02 09:51 AM
        Why not initialize all variables to zero?Gabriele Svelto2020/03/28 01:46 PM
          Why not initialize all variables to zero?Linus Torvalds2020/03/28 04:28 PM
            Why not initialize all variables to zero?Anon32020/03/29 04:23 AM
            Why not initialize all variables to zero?Gabriele Svelto2020/03/29 12:28 PM
              Why not initialize all variables to zero?Anon32020/03/29 01:05 PM
                Why not initialize all variables to zero?Gabriele Svelto2020/03/30 12:52 AM
        Why not initialize all variables to zero?Carlie Coats2020/03/29 07:03 AM
        Why not initialize all variables to zero?gallier22020/03/29 11:48 PM
          Why not initialize all variables to zero?Michael S2020/03/30 02:24 AM
            Why not initialize all variables to zero?gallier22020/03/30 03:11 AM
        Why not discard variables after last use?2020/03/31 08:02 AM
          Makes no sense at allHeikki Kultala2020/03/31 01:01 PM
            An example (maybe)Mark Roulo2020/03/31 04:07 PM
              An example (maybe)Doug S2020/04/01 11:01 AM
                An example (maybe)Simon Farnsworth2020/04/02 02:21 AM
            Why not discard variables after last use?2020/04/02 12:41 PM
    Why not initialize all variables to zero?j2020/03/28 09:16 AM
    Why not initialize all variables to zero?Montaray Jack2020/03/28 11:42 AM
  Why not initialize all variables to zero?blaine2020/03/27 01:23 PM
    Why not initialize all variables to zero?James2020/03/28 03:18 AM
      Why not initialize all variables to zero?Anon32020/03/28 05:14 AM
      Why not initialize all variables to zero?Doug S2020/03/28 11:32 AM
        Why not initialize all variables to zero?Anon32020/03/28 11:45 AM
    Why not initialize all variables to zero?gallier22020/03/30 12:03 AM
  Why not initialize all variables to zero?gallier22020/03/29 11:32 PM
    Why not initialize all variables to zero?Michael S2020/03/30 02:30 AM
      Why not initialize all variables to zero?gallier22020/03/30 03:45 AM
Reply to this Topic
Name:
Email:
Topic:
Body: No Text
How do you spell purple?