Sujet : Re: technology discussion → does the world need a "new" C ?
De : tr.17687 (at) *nospam* z991.linuxsc.com (Tim Rentsch)
Groupes : comp.lang.cDate : 11. Jul 2024, 15:02:36
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <86wmls6n7n.fsf@linuxsc.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
User-Agent : Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Michael S <
already5chosen@yahoo.com> writes:
On Wed, 10 Jul 2024 08:48:05 -0700
Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>
bart <bc@freeuk.com> writes:
>
I earlier asked this:
>
"So if arrays aren't passed by value in C, and they aren't passed
by reference, then how the hell ARE they passed?!"
>
They aren't. C allows lots of things to be passed as an argument
to a function: several varieties of numeric values, structs,
unions, and pointers, including both pointers to object types and
pointers to function types. C does not have a way for a function
to take an argument that is either an array or a function. There
is a way to take pointers to those things, but not the things
themselves. Arrays and functions are second-class values in C.
>
I'd like to see an example of the language that permits ahead-of-time
compilation and has functions as first-class values.
C is almost that language. Pointers to functions are first class
in C. If for every C function definition a pattern like this:
static int
foo_implementation( int x ){
return x > 0 ? -x : x;
}
int (*foo)( int ) = foo_implementation;
is used, and there are no other references to the _implementation
names, then "functions" like foo() are essentially first-class
functions. The "function" foo can be assigned into. It can be
called just like an actual C function. The type of a "function"
is not like an actual function type, and so for example how the
address-of operator works is different for "functions" than it is
for actual C functions. Also pre-declarations for "functions"
obviously need to be different than they would be for actual C
functions. If the necessary adjustments are made, we would have
a language with first-class "functions".
Incidentally, whether a language has closures is orthogonal to
the question of whether functions are first class. Closures
might or might not be interoperable with functions (they are
in some languages, and not in others). But that needn't have
any bearing on whether functions (or closures) are first class.
Note: strictly speaking a closure is a run-time value, not a
compile-time definition. I trust my readers are able to make
the needed linguistic accommodations.