Deutsch   English   Français   Italiano  
<86wmls6n7n.fsf@linuxsc.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups: comp.lang.c
Subject: Re: technology discussion =?utf-8?Q?=E2=86=92?= does the world need
 a "new" C ?
Date: Thu, 11 Jul 2024 07:02:36 -0700
Organization: A noiseless patient Spider
Lines: 53
Message-ID: <86wmls6n7n.fsf@linuxsc.com>
References: <v66eci$2qeee$1@dont-email.me> <87h6d2uox5.fsf@nosuchdomain.example.com> <v6d779$6rk5$2@dont-email.me> <v6e76u$c0i9$1@dont-email.me> <v6esqm$fian$2@dont-email.me> <v6f7vg$hgam$1@dont-email.me> <20240707164747.258@kylheku.com> <v6gl83$s72a$1@dont-email.me> <v6h8ao$ur1v$1@dont-email.me> <v6jhk3$1drd6$1@dont-email.me> <v6jiud$1dsjb$1@dont-email.me> <877cdur1z9.fsf@bsb.me.uk> <v6joi4$1epoj$1@dont-email.me> <871q42qy33.fsf@bsb.me.uk> <v6k6i0$1h4d3$1@dont-email.me> <87ed82p28y.fsf@bsb.me.uk> <v6m03l$1tf05$1@dont-email.me> <87r0c1nzjj.fsf@bsb.me.uk> <v6m716$1urj4$1@dont-email.me> <86ikxd8czu.fsf@linuxsc.com> <20240710201454.0000527e@yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Thu, 11 Jul 2024 16:02:39 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="63b2cd43183ed9f1034fa7ab191192fd";
	logging-data="2628897"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+EDcPVWCrkp72JIzfn71p4KquAKMQCZUs="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:YK1vSMCI008Vb3k3y7EAz9Ud1Uw=
	sha1:UfpRY+UIjlgD2c31luMM8PkUrXw=
Bytes: 3933

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.