Re: Recursion, Yo

Liste des GroupesRevenir à l c 
Sujet : Re: Recursion, Yo
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.c
Date : 10. Apr 2024, 19:10:40
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240410063255.565@kylheku.com>
References : 1 2 3 4 5 6
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-04-10, David Brown <david.brown@hesbynett.no> wrote:
On 10/04/2024 03:50, Lawrence D'Oliveiro wrote:
On Tue, 09 Apr 2024 11:44:23 +0100, Ben Bacarisse wrote:
 
It's significant (or at least note worthy) that the code in the
original post was not ISO C ...
 
Interesting that GCC’s C compiler allows nested routine definitions,
but the C++ compiler does not.
>
It is an old extension, going back to when gcc barely (if at all)
supported C++.  The compiler middle-end had to have support for nested
functions for languages like Pascal, Module 2 and Ada (I believe Ada is
the only one of these that stuck around in gcc mainline, but other
language front-ends have been made outside the main tree).  Someone
thought it might be a useful feature in C too, and perhaps something
that would catch on in the standards (several early gcc extensions ended
up standardised in C99).
>
It is not much used in practice, AFAIK.  For some cases the code
generation for nested functions was fine and straight-forward.  In other
cases, however, it required a trampoline generated on the stack, and
that became a real pain once non-executable stacks came into fashion.
>
Nested functions were never as interesting for C++ as you already have
better mechanisms for controlling scope and data access - classes and
their methods, including nested classes.  And once lambdas joined the

Higher level languages like Common Lisp show that you want both;
even though theoretically you can implement OOP with lambdas, or
simulate some aspects of lambdas with OOP (particularly if your OOP
supports callable objects).

party in C++11 there was absolutely no reason to have nested functions -
there is nothing (AFAIK) that you could do with nested functions that
you can't do at least as well, and often better, with lambdas.

GNU C nested functions don't require any special syntax (other than teh
fact of allowing a function definition inside a statement block). They
implicitly capture the actual variables in the surrounding scope using
ordinary C function syntax.

The address of a GNU C nested function is regular function pointer;
you can pass it to qsort and bsearch.

In fact, you can pass a GNU C nested function into a library that was
not even compiled with GCC. If it understand the calling conventions of
function pointers, it can call the function.

However, GNU C nested functions are "downward funarg" only, which
is a pretty severe limitation. (Worse, GNU C nested function can
escape from a scope in spite of being dowward funarg only,
causing undefined behavior when they are called.)

(The "downward funarg" terminology is from ancient Lisp or Algol
literature, means "downward (only) functional argument": a function that
can be used as an argument to function, but not returned; i.e. passed
downward only.)

The downward funarg restriction has benefits too; such functions do not
require any dynamic allocation at all. The closed-over variables are
referenced directly in their still-living stack frame.

--
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca

Date Sujet#  Auteur
7 Apr 24 * Recursion, Yo102Lawrence D'Oliveiro
7 Apr 24 +* Re: Recursion, Yo100fir
9 Apr 24 i`* Re: Recursion, Yo99Janis Papanagnou
9 Apr 24 i +* Re: Recursion, Yo7Lawrence D'Oliveiro
9 Apr 24 i i+* Re: Recursion, Yo5Janis Papanagnou
9 Apr 24 i ii`* Re: Recursion, Yo4Ben Bacarisse
9 Apr 24 i ii `* Re: Recursion, Yo3Janis Papanagnou
9 Apr 24 i ii  `* Re: Recursion, Yo2Keith Thompson
10 Apr 24 i ii   `- Re: Recursion, Yo1Janis Papanagnou
9 Apr 24 i i`- Re: Recursion, Yo1bart
9 Apr 24 i `* Re: Recursion, Yo91Ben Bacarisse
9 Apr 24 i  +- Re: Recursion, Yo1Ben Bacarisse
10 Apr 24 i  `* Re: Recursion, Yo89Lawrence D'Oliveiro
10 Apr 24 i   +- Re: Recursion, Yo1Chris M. Thomasson
10 Apr 24 i   +* Re: Recursion, Yo86David Brown
10 Apr 24 i   i+* Re: Recursion, Yo84Lawrence D'Oliveiro
10 Apr 24 i   ii`* Re: Recursion, Yo83David Brown
10 Apr 24 i   ii +* Re: Recursion, Yo73bart
10 Apr 24 i   ii i+* Re: Recursion, Yo71David Brown
11 Apr 24 i   ii ii`* Re: Recursion, Yo70Lawrence D'Oliveiro
11 Apr 24 i   ii ii +* Re: Recursion, Yo4Kaz Kylheku
11 Apr 24 i   ii ii i`* Heh heh... (Was: Recursion, Yo)3Kenny McCormack
11 Apr 24 i   ii ii i `* Re: Heh heh... (Was: Recursion, Yo)2Kaz Kylheku
11 Apr 24 i   ii ii i  `- Re: Heh heh... (Was: Recursion, Yo)1Kenny McCormack
11 Apr 24 i   ii ii `* Re: Recursion, Yo65David Brown
11 Apr 24 i   ii ii  +* Re: Recursion, Yo62Kaz Kylheku
11 Apr 24 i   ii ii  i+- Re: Recursion, Yo1David Brown
12 Apr 24 i   ii ii  i`* Re: Recursion, Yo60Lawrence D'Oliveiro
12 Apr 24 i   ii ii  i +* Re: Recursion, Yo2Kaz Kylheku
12 Apr 24 i   ii ii  i i`- Re: Recursion, Yo1Dan Cross
12 Apr 24 i   ii ii  i `* Re: Recursion, Yo57Janis Papanagnou
12 Apr 24 i   ii ii  i  +* Re: Recursion, Yo6David Brown
12 Apr 24 i   ii ii  i  i`* Re: Recursion, Yo5Janis Papanagnou
12 Apr 24 i   ii ii  i  i +* Re: Recursion, Yo3David Brown
13 Apr 24 i   ii ii  i  i i`* Re: Recursion, Yo2Janis Papanagnou
13 Apr 24 i   ii ii  i  i i `- Re: Recursion, Yo1David Brown
13 Apr 24 i   ii ii  i  i `- Re: Recursion, Yo1Lawrence D'Oliveiro
12 Apr 24 i   ii ii  i  +* Re: Recursion, Yo45Lawrence D'Oliveiro
12 Apr 24 i   ii ii  i  i`* Re: Recursion, Yo44Janis Papanagnou
12 Apr 24 i   ii ii  i  i +- Re: Recursion, Yo1bart
13 Apr 24 i   ii ii  i  i `* Re: Recursion, Yo42Lawrence D'Oliveiro
13 Apr 24 i   ii ii  i  i  +* Re: Recursion, Yo14Michael S
14 Apr 24 i   ii ii  i  i  i+* Re: Recursion, Yo11Ben Bacarisse
14 Apr 24 i   ii ii  i  i  ii`* Re: Recursion, Yo10Michael S
15 Apr 24 i   ii ii  i  i  ii `* Re: Recursion, Yo9Janis Papanagnou
15 Apr 24 i   ii ii  i  i  ii  `* Re: Recursion, Yo8Keith Thompson
15 Apr 24 i   ii ii  i  i  ii   `* Re: Recursion, Yo7Ben Bacarisse
15 Apr 24 i   ii ii  i  i  ii    `* Re: Recursion, Yo6Keith Thompson
15 Apr 24 i   ii ii  i  i  ii     +* Re: Recursion, Yo2bart
15 Apr 24 i   ii ii  i  i  ii     i`- Re: Recursion, Yo1Ben Bacarisse
15 Apr 24 i   ii ii  i  i  ii     `* Re: Recursion, Yo3Janis Papanagnou
15 Apr 24 i   ii ii  i  i  ii      +- Re: Recursion, Yo1Janis Papanagnou
15 Apr 24 i   ii ii  i  i  ii      `- Re: Recursion, Yo1Keith Thompson
14 Apr 24 i   ii ii  i  i  i`* Re: Recursion, Yo2Lawrence D'Oliveiro
14 Apr 24 i   ii ii  i  i  i `- Re: Recursion, Yo1Keith Thompson
13 Apr 24 i   ii ii  i  i  `* Re: Recursion, Yo27Janis Papanagnou
14 Apr 24 i   ii ii  i  i   `* Re: Recursion, Yo26Lawrence D'Oliveiro
14 Apr 24 i   ii ii  i  i    `* Re: Recursion, Yo25Ben Bacarisse
14 Apr 24 i   ii ii  i  i     +* Re: Recursion, Yo2bart
14 Apr 24 i   ii ii  i  i     i`- Re: Recursion, Yo1Ben Bacarisse
15 Apr 24 i   ii ii  i  i     `* Re: Recursion, Yo22Lawrence D'Oliveiro
15 Apr 24 i   ii ii  i  i      +* Re: Recursion, Yo20Chris M. Thomasson
15 Apr 24 i   ii ii  i  i      i+* Re: Recursion, Yo5Ben Bacarisse
16 Apr 24 i   ii ii  i  i      ii`* Re: Recursion, Yo4Lawrence D'Oliveiro
17 Apr 24 i   ii ii  i  i      ii `* Re: Recursion, Yo3Ben Bacarisse
18 Apr 24 i   ii ii  i  i      ii  `* Re: Recursion, Yo2Lawrence D'Oliveiro
22 Apr 24 i   ii ii  i  i      ii   `- Re: Recursion, Yo1Janis Papanagnou
15 Apr 24 i   ii ii  i  i      i`* Re: Recursion, Yo14Janis Papanagnou
16 Apr 24 i   ii ii  i  i      i +* Re: Recursion, Yo2Lawrence D'Oliveiro
22 Apr 24 i   ii ii  i  i      i i`- Re: Recursion, Yo1Janis Papanagnou
16 Apr 24 i   ii ii  i  i      i `* Re: Recursion, Yo11Michael S
19 Apr 24 i   ii ii  i  i      i  +* Re: Recursion, Yo9Tim Rentsch
19 Apr 24 i   ii ii  i  i      i  i+* Re: Recursion, Yo4bart
20 Apr 24 i   ii ii  i  i      i  ii`* Re: Recursion, Yo3Ben Bacarisse
20 Apr 24 i   ii ii  i  i      i  ii +- Re: Recursion, Yo1Keith Thompson
20 Apr 24 i   ii ii  i  i      i  ii `- Re: Recursion, Yo1Kaz Kylheku
19 Apr 24 i   ii ii  i  i      i  i+- Re: Recursion, Yo1Keith Thompson
19 Apr 24 i   ii ii  i  i      i  i+* Re: Recursion, Yo2Keith Thompson
20 Apr 24 i   ii ii  i  i      i  ii`- Re: Recursion, Yo1Tim Rentsch
20 Apr 24 i   ii ii  i  i      i  i`- Re: Recursion, Yo1Tim Rentsch
22 Apr 24 i   ii ii  i  i      i  `- Re: Recursion, Yo1Janis Papanagnou
15 Apr 24 i   ii ii  i  i      `- Re: Recursion, Yo1Ben Bacarisse
12 Apr 24 i   ii ii  i  +* Re: Recursion, Yo4bart
12 Apr 24 i   ii ii  i  i+* Re: Recursion, Yo2Janis Papanagnou
12 Apr 24 i   ii ii  i  ii`- Re: Recursion, Yo1bart
13 Apr 24 i   ii ii  i  i`- Re: Recursion, Yo1Keith Thompson
13 Apr 24 i   ii ii  i  `- Re: Recursion, Yo1Tim Rentsch
11 Apr 24 i   ii ii  `* Re: Recursion, Yo2Keith Thompson
12 Apr 24 i   ii ii   `- Re: Recursion, Yo1David Brown
14 Apr 24 i   ii i`- Re: Recursion, Yo1fir
10 Apr 24 i   ii +- Re: Recursion, Yo1Janis Papanagnou
10 Apr 24 i   ii +* Re: Recursion, Yo2Kaz Kylheku
10 Apr 24 i   ii i`- Re: Recursion, Yo1David Brown
11 Apr 24 i   ii +* Re: Recursion, Yo2Lawrence D'Oliveiro
12 Apr 24 i   ii i`- Re: Recursion, Yo1Ben Bacarisse
11 Apr 24 i   ii `* Re: Recursion, Yo4Lawrence D'Oliveiro
11 Apr 24 i   ii  +- Re: Recursion, Yo1Kaz Kylheku
11 Apr 24 i   ii  `* Re: Recursion, Yo2David Brown
11 Apr 24 i   ii   `- Re: Recursion, Yo1Lawrence D'Oliveiro
10 Apr 24 i   i`- Re: Recursion, Yo1Kaz Kylheku
10 Apr 24 i   `- Re: Recursion, Yo1Tim Rentsch
9 Apr 24 `- Re: Recursion, Yo1Lawrence D'Oliveiro

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal