Deutsch   English   Français   Italiano  
<v6n8iu$24af0$1@dont-email.me>

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

Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: =?UTF-8?Q?Re=3A_technology_discussion_=E2=86=92_does_the_world_need?=
 =?UTF-8?B?IGEgIm5ldyIgQyA/?=
Date: Thu, 11 Jul 2024 01:21:52 +0100
Organization: A noiseless patient Spider
Lines: 89
Message-ID: <v6n8iu$24af0$1@dont-email.me>
References: <v66eci$2qeee$1@dont-email.me> <v6ard1$3ngh6$4@dont-email.me>
 <v6b0jv$3nnt6$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> <87ikxconq4.fsf@bsb.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 11 Jul 2024 02:21:51 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="92757c0b3eb137c08e71ba54311788f0";
	logging-data="2238944"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/vjPwYDVEuqVfLyE7eUEjB"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:objajmpoPT/5EwxfsJqlrgxvVQI=
Content-Language: en-GB
In-Reply-To: <87ikxconq4.fsf@bsb.me.uk>
Bytes: 4815

On 11/07/2024 00:01, Ben Bacarisse wrote:
> bart <bc@freeuk.com> writes:
> 
>> On 10/07/2024 14:32, Ben Bacarisse wrote:

>> I still consider arrays in C to be 'passed' by a
>> mechanism which is near-indistinguishable from actual
>> pass-by-reference.
> 
> I don't really care how you consider it, but I do care about how you
> misrepresent the facts in public.
> 
> In another post you said that your language has pass by reference, and
> we also know you have implemented C.  Either you are just very confused
> and your language simply has call by value (after all, you think C has
> pass by reference), or you know that pass by reference in your language
> needs something from the implementation that was not needed when you
> implemented C.  I can't decide if you are confused or just lying.


The way it works in my language is very simple (this is what I do after 
all):

     type T = int

     proc F(T x)=       # Pass by value
         println x.typestr
     end

     proc G(ref T x)=   # Manual pass-by-reference
         println x^.typestr
     end

     proc H(T &x)=      # Auto pass-by-reference
         println x.typestr
     end

     proc main=
         T a

         F(a)
         G(&a)
         H(a)
     end

I've written 3 functions using pass-by-value, pass-by-value emulating 
pass-by-reference, and actual pass-by-reference.

The G function and the call to G show what the compiler has to add when 
it processes function H: address-of ops and derefs. The cost is a single 
& in the parameter list to get that convenience.

This programs works just the same if T was changed to an array:

     type T = [4]int

(The output is 3 lots of '[4]i64' instead of 3 lots of 'i64'; 'int' is 
an alias for int64/i64.)

This is regular and orthogonal, a complete contrast to C even though 
both languages supposedly operate at the same level.

The behaviour of F, when written in C, is like my F function when T is 
an int (obviously the C won't have '.typestr').

But when T is an array, its behaviour is more like that of my H function.

So, my remark about arrays in C being passed by reference is understandable.

>> If somebody had proposed adding pass-by-reference for arrays, you'd say C
>> doesn't need it, because whatever benefits it might have you, C already
>> has!
> 
> I see you are running out of statements to argue against so you have
> started to make up your own.  I am sure you have thoroughly refuted this
> made up person in your head.
> 
> Anyone proposing adding pass-by-reference for arrays would be told (by
> me at last) to start by allowing arrays to be passed by value first.
> Why anyone would propose adding pass by reference for a type that can't
> be currently be passed at all is a mystery that only you (as the
> inventor of this person) can know.

This is my point. Clearly true pass-by-reference for arrays wouldn't add 
anything in C; it already works alike that! But due to complicated set 
of rules and quirks, which quite different from the type model 
illustrated above.