Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <vbm2d2$2a4al$1@dont-email.me>
Deutsch   English   Français   Italiano  
<vbm2d2$2a4al$1@dont-email.me>

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

Path: ...!npeer.as286.net!dummy01.as286.net!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: BGB <cr88192@gmail.com>
Newsgroups: comp.arch
Subject: Re: Computer architects leaving Intel...
Date: Mon, 9 Sep 2024 00:51:24 -0500
Organization: A noiseless patient Spider
Lines: 122
Message-ID: <vbm2d2$2a4al$1@dont-email.me>
References: <2024Aug30.161204@mips.complang.tuwien.ac.at>
 <vb00c2$150ia$1@dont-email.me>
 <505954890d8461c1f4082b1beecd453c@www.novabbs.org>
 <vb0kh2$12ukk$1@dont-email.me> <vb3smg$1ta6s$1@dont-email.me>
 <vb4q5o$12ukk$3@dont-email.me> <vb6a16$38aj5$1@dont-email.me>
 <vb7evj$12ukk$4@dont-email.me> <vb8587$3gq7e$1@dont-email.me>
 <vb91e7$3o797$1@dont-email.me> <vb9eeh$3q993$1@dont-email.me>
 <vb9l7k$3r2c6$2@dont-email.me> <vba26l$3te44$1@dont-email.me>
 <vbag2s$3vhih$1@dont-email.me> <vS3CO.10106$kow1.6330@fx35.iad>
 <vbauo3$18sj$1@dont-email.me>
 <a2d65085c90f4d93f3d70df3121adc59@www.novabbs.org>
 <vbbo4g$8j04$2@dont-email.me> <ljt9okF86o3U1@mid.individual.net>
 <vbcbkj$bd22$2@dont-email.me> <vbdcmk$gug7$1@dont-email.me>
 <vbe9sc$nlm3$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Mon, 09 Sep 2024 07:51:31 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="928d32c5bae13d8f357b884af2bb52a4";
	logging-data="2429269"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/iE+9nCP2PZ0GVCYWHeOW/8fVftHtnLOE="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:mAJTdS5COlJgvsDiY23cPIs9shQ=
Content-Language: en-US
In-Reply-To: <vbe9sc$nlm3$1@dont-email.me>
Bytes: 6855

On 9/6/2024 2:10 AM, David Brown wrote:
> On 06/09/2024 00:51, BGB wrote:
>> On 9/5/2024 8:27 AM, David Brown wrote:
>>> On 05/09/2024 10:51, Niklas Holsti wrote:
>>>> On 2024-09-05 10:54, David Brown wrote:
>>>>> On 05/09/2024 02:56, MitchAlsup1 wrote:
>>>>>> On Thu, 5 Sep 2024 0:41:36 +0000, BGB wrote:
>>>>>>
>>>>>>> On 9/4/2024 3:59 PM, Scott Lurndal wrote:
>>>>>>>
>>>>>>> Say:
>>>>>>>    long z;
>>>>>>>    int x, y;
>>>>>>>    ...
>>>>>>>    z=x*y;
>>>>>>> Would auto-promote to long before the multiply.
>>>>>>
>>>>>> \I may have to use this as an example of C allowing the programmer
>>>>>> to shoot himself in the foot; promotion or no promotion.
>>>>>
>>>>> You snipped rather unfortunately here - it makes it look like this 
>>>>> was code that Scott wrote, and you've removed essential context by 
>>>>> BGB.
>>>>>
>>>>>
>>>>> While I agree it is an example of the kind of code that people 
>>>>> sometimes write when they don't understand C arithmetic, I don't 
>>>>> think it is C-specific.  I can't think of any language off-hand 
>>>>> where expressions are evaluated differently depending on types used 
>>>>> further out in the expression.  Can you give any examples of 
>>>>> languages where the equivalent code would either do the 
>>>>> multiplication as "long", or give an error so that the programmer 
>>>>> would be informed of their error?
>>>>
>>>>
>>>> The Ada language can work in both ways. If you just have:
>>>>
>>>>     z : Long_Integer;  -- Not a standard Ada type, but often provided.
>>>>     x, y : Integer;
>>>>     ...
>>>>     z := x * y;
>>>>
>>>> the compiler will inform you that the types in the assignment do not 
>>>> match: using the standard (predefined) operator "*", the product of 
>>>> two Integers gives an Integer, not a Long_Integer.
>>>
>>> That seems like a safe choice.  C's implicit promotion of int to long 
>>> int can be convenient, but convenience is sometimes at odds with safety.
>>>
>>
>> A lot of time, implicit promotion will be the "safer" option than 
>> first doing an operation that overflows and then promoting.
>>
>> Annoyingly, one can't really do the implicit promotion first and then 
>> promote afterwards, as there may be programs that actually rely on 
>> this particular bit of overflow behavior.
>>
> 
> A programming language has to work as it is defined.  And people should 
> not be relying on code doing things that are /not/ defined.
> 
> So promoting arguments implicitly before the operation is only useful if 
> it is a clearly defined part of the language.  (In C, that is the way it 
> works up to the size of "int".)
> 
> In C, if you have :
> 
>      long int foo(int x, int y) {
>          return z = x *y ;
>      }
> 
> then the compiler is free to implement this as full 64-bit 
> multiplication and return that 64-bit value.  This is because the result 
> of a 32 x 32 bit multiplication either gives the correct answer without 
> overflow, and promoting it to 64 bit keeps that value, or there is an 
> overflow and the results are undefined, so the compiler can return 
> whatever it likes.
> 
> But unless the compiler documents this behaviour (in which case the code 
> would be correct but non-portable), the code is buggy.
> 
> Conversely, if unsigned types are used here, the results of the 
> multiplication must be truncated to 32 bits - keeping higher bits in the 
> return value would be a compiler bug.
> 
> 
> However a language wants to handle this, it needs to be specified by the 
> language.  Most languages (AFAIK) have no implicit promotion that is 
> dependent on what you are doing with the results.  (Some, including C, 
> will have various degrees of implicit promotion dependent solely on the 
> expression itself, but not on what is done with the evaluated result.) 
> Ada, AFAIK, does not have implicit promotions between types - "int" does 
> not automatically promote to "long int".  This can be seen as an 
> inconvenience compared to many other languages, but it means that it is 
> possible to have a consistent and safe way to overload by return type.
> 
> 
>> In effect, in my case, the promotion behavior ends up needing to 
>> depend on the language-mode (it is either this or maybe internally 
>> split the operators into widening or non-widening variants, which are 
>> selected when translating the AST into the IR stage).
>>
> 
> Dependency on a "language mode" does not sound "safe" to me.
> 

The language mode indicates what source language was compiled, say:
   C, BS, BS2,
   C++ (sorta), Java (sorta), C# (sorta).
Or, what "skin" was applied over the parser and front-end stages.

As-is, this information is basically lost by the time it hits the RIL3 
IR, or the 3AC IR, where the backend doesn't know which source language 
was used.


>> Well, as opposed to dealing with the widening cases by emitting IR 
>> with an implicit casts added into the IR.
>>
>>
>