On 2024-02-27 11:15, Richard Biener via Gcc wrote:
> On Fri, Feb 23, 2024 at 10:22 AM Miro Palmu via Gcc <gcc@gcc.gnu.org> wrote:
>>
>> Hi.
>>
>> I have a idea about long term hobby project relating to gcc,
>> so with this email I'm asking feedback about the idea
>> early rather than later. First little bit of context.
>>
>> I'm a student deep in a university course about compilers
>> and I have been writing a compiler for language
>> which is a subset of Herb Sutter's Cpp2.
>> I chose this because I'm bit of a Cpp language nerd,
>> and I can apply all of my Cpp knowledge to this project, which is fun.
>>
>> After the course I'm interested in converting this to a front end to gcc,
>> with goal of learning about front end development to gcc.
>> (It is a non-goal to try to upstream the project.)
>>
>> I don't see any obvious reason why this would not be possible.
>> It just need to be able to target (C++ version of ?) GENERIC.
>> This would be the first goal of the compiler
>> and would serve as the MVP of the project.
>> Below is discussing/theorizing post MVP goals.
> 
> Note there is no textual form of GENERIC that a GCC compiler
> binary could parse.  So your Cpp compiler would need to build
> GENERIC data structures itself, basically be a real GCC language frontend.

Yes, that is my plan. This is little late reply, so I had already
started the conversion last week and at the moment I have the
boilerplate implemented for the front end.

> The alternative is to use GCCs JIT but that emits GIMPLE only
> (I think there's a rust frontend project that tries to leverage that,
> and also GNU emacs is using it).
 
That is interesting. Have to read more about it, thanks for mentioning!

>> Because the Herb Sutter's cppfront transpiles Cpp2 to Cpp1,
>> it is easy to have mix of Cpp1 and Cpp2 global level constructs
>> in the same file. Just generate forward declarations of everything,
>> keep Cpp1 definitions unchanged and transpile the Cpp2 ones.
>>
>> At the moment my subset Cpp2 does not support this compatibility
>> but it would be nice to have at some point.
>> But if my front end targets GENERIC I would have to use g++ machinery
>> to turn the Cpp1 parts to GENERIC and then somehow combine the trees.
>> I imagine that somebody with more experienced with GENERICs would have
>> a intuition on how hard this combinations would be to implement.
>> I'm curious about this intuition which I lack.
>>
>> In Cpp2 one can import and export Cpp1 modules. With transpiling to
>> Cpp1 this again is easy implement but with potential front end,
>> I'm not sure. I'm quite ignorant on Compiled Module Interface (CMI)
>> implementation in gcc, so I'm asking just for guidance on where to look
>> if one would want to learn on how CMIs are implemented.
> 
> There's no generic code for implementing CMIs, each frontend requiring such
> does need to implement that on its own.
>
> Hope this helps,
> Richard.
> 

Yes. Thanks again!

>> Thanks!
>>
>> --
>> Miro Palmu
-- 
Miro Palmu

Reply via email to