Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Thiago Adams Newsgroups: comp.lang.c Subject: Re: transpiling to low level C Date: Mon, 16 Dec 2024 08:21:07 -0300 Organization: A noiseless patient Spider Lines: 61 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Mon, 16 Dec 2024 12:21:07 +0100 (CET) Injection-Info: dont-email.me; posting-host="9df6c4f7516d4e1a3aa2c9bdac164fe4"; logging-data="1167510"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18acI7/ku1HoMtj4zKeAG282YvW058Ku3w=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:aRFEhT9sqSTEfmj8DDAvG3Xs42M= Content-Language: en-US In-Reply-To: Bytes: 2723 On 15/12/2024 20:53, BGB wrote: > On 12/15/2024 3:32 PM, bart wrote: >> On 15/12/2024 19:08, Bonita Montero wrote: >>> C++ is more readable because is is magnitudes more expressive than C. >>> You can easily write a C++-statement that would hunddres of lines in >>> C (imagines specializing a unordered_map by hand). Making a language >>> less expressive makes it even less readable, and that's also true for >>> your reduced C. >>> >> >> That's not really the point of it. This reduced C is used as an >> intermediate language for a compiler target. It will not usually be >> read, or maintained. >> >> An intermediate language needs to at a lower level than the source >> language. >> >> And for this project, it needs to be compilable by any C89 compiler. >> >> Generating C++ would be quite useless. >> > > As an IL, even C is a little overkill, unless turned into a restricted > subset (say, along similar lines to GCC's GIMPLE). > > Say: >   Only function-scope variables allowed; >   No high-level control structures; >   ... > > Say: >   int foo(int x) >   { >     int i, v; >     for(i=x, v=0; i>0; i--) >       v=v*i; >     return(v); >   } > > Becoming, say: >   int foo(int x) >   { >     int i; >     int v; >     i=x; >     v=0; >     if(i<=0)goto L1; >     L0: >     v=v*i; >     i=i-1; >     if(i>0)goto L0; >     L1: >     return v; >   } > > ... > I have considered to remove loops and keep only goto. But I think this is not bring too much simplification.