| Deutsch English Français Italiano |
|
<v2h65i$e0lf$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: olcott <polcott333@gmail.com>
Newsgroups: comp.lang.c++,comp.lang.c
Subject: Re: Can someone please verify the execution trace of this?
Date: Mon, 20 May 2024 22:58:41 -0500
Organization: A noiseless patient Spider
Lines: 122
Message-ID: <v2h65i$e0lf$1@dont-email.me>
References: <v2b78t$2vima$1@dont-email.me>
<v2df79$3ghfd$1@raubtier-asyl.eternal-september.org>
<v2di7v$3gujt$1@dont-email.me>
<v2eada$3p6sk$1@raubtier-asyl.eternal-september.org>
<v2edbr$3pl2i$1@dont-email.me>
<eaa0ef93ca03f744edc4fbcf6e79fc730805cce9.camel@gmail.com>
<87v837kinv.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Tue, 21 May 2024 05:58:43 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="2f5f52f96f067406075e702eab09af4a";
logging-data="459439"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18ZW+tyYXr0wf7rCXND5DaS"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:4geMMF8fWKHSdVMFMdHmBgwfWl4=
Content-Language: en-US
In-Reply-To: <87v837kinv.fsf@nosuchdomain.example.com>
Bytes: 5999
On 5/20/2024 9:23 PM, Keith Thompson wrote:
> wij <wyniijj5@gmail.com> writes:
> [...]
>> typedef int (*ptr)(); // ptr is pointer to int function
>> int H(ptr x, ptr y);
>> int D(ptr x)
>> {
>> int Halt_Status = H(x, x);
>> if (Halt_Status)
>> HERE: goto HERE;
>> return Halt_Status;
>> }
>>
>> int main()
>> {
>> H(D,D);
>> return 0;
>> }
>>
>> The code above does not compile:
>
> Yes, it does (as you acknowledge in a later post).
>
> This:
> typedef int (*ptr)();
> defines "ptr" as an alias for a type that can be described in English
> as "pointer to function returning int". The empty parentheses
> indicate that the function takes an unspecified but fixed number
> and type(s) of arguments; this is an old-style declaration.
>
> (The C23 standard, not yet released, changes the semantics of empty
> parentheses, causing the code to be invalid, but let's assume C17.)
>
> The function H is declared but not defined. That doesn't prevent
> the code from being *compiled*, but it does prevent it from being
> *linked* to produce an executable program. Perhaps a definition
> of H has been presented in some other article, but I will not waste
> my time hunting for it.
>
> Ignoring variadic functions like printf, every function call
> must pass the appropriate number and types of arguments, matching
> the parameters defined by the corresponding function definition.
> (In some cases there can be implicit type conversions, but there
> are no implicit conversions for arguments or parameters of function
> pointer type.) If a correct *prototype* (a function declaration that
> specifies the types of all parameters) is visible, this is enforced
> at compile time; failing to do so is a *constraint violation*,
> requiring a compile-time diagnostic. If no such prototype is
> visible, violations of this rule need not be diagnosed, but result
> in *undefined behavior*; the C standard says nothing about what
> the program will do.
>
> I'll note that the code (declares and) defines the function D,
> but never calls it. The address of D is passed to H, but without
> a definition of H we can't guess what it does with that address.
>
> It's possible to rewrite the code to (a) avoid the use of old-style
> function declarations and (b) avoids any undefined behavior --
> but without knowing or being able to guess just what the program
> is supposed to do, I see no point in doing so.
>
> The main point is this: The function H is declared but never
> defined, so it's impossible to create a running program from this
> code, and impossible to guess what it's intended to do without more
> information. I will not make any assumptions about how H is meant
> to be defined or consult other posts to find a definition. I may or
> may not follow this thread to see if any clarifications are posted.
>
> The code as presented is a valid C *translation unit*, but it is
> not a valid *program*, and it has no behavior.
>
*That was a great review for c17 standards compliance*
I cannot provide the definition for H because I am asking about
the behavior of D simulated by H for the infinite set of H/D pairs.
H is required to correctly simulate 1 to N steps of D and this
may or may not involve H simulating itself simulating D in recursive
simulation.
I have two fully operational versions of H that run under Windows
and Linux. I am not asking about those.
H uses an x86 emulator to emulate the machine code of D and
H is capable of emulating itself emulating D.
typedef int (*ptr)(); // ptr is pointer to int function
00 int H(ptr p, ptr i);
01 int D(ptr p)
02 {
03 int Halt_Status = H(p, p);
04 if (Halt_Status)
05 HERE: goto HERE;
06 return Halt_Status;
07 }
08
09 int main()
10 {
11 H(D,D);
12 return 0;
13 }
Correct simulation requires correctly emulating the x86 instructions
of D in the order specified by the machine code of D and may include
correctly emulating the x86 instructions of H in the order specified
by the machine code of H.
I need to have experts in these two forums verify that no D correctly
simulated by *pure function* H can possibly reach its own final state
at line 06 and halt in N steps of correct simulation.
https://en.wikipedia.org/wiki/Pure_function#
I thought it was categorically impossible then Richard found a loophole
using static data. This new *pure function* requirement eliminates that
loophole.
--
Copyright 2024 Olcott "Talent hits a target no one else can hit; Genius
hits a target no one else can see." Arthur Schopenhauer