Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: bart 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: References: <87h6d2uox5.fsf@nosuchdomain.example.com> <20240707164747.258@kylheku.com> <877cdur1z9.fsf@bsb.me.uk> <871q42qy33.fsf@bsb.me.uk> <87ed82p28y.fsf@bsb.me.uk> <87r0c1nzjj.fsf@bsb.me.uk> <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 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.