rjmccall added a comment.

In D96033#2630978 <https://reviews.llvm.org/D96033#2630978>, @v.g.vassilev 
wrote:

>>> I'm nervous in general about the looming idea of declaration unloading, but 
>>> the fact that it's been working in Cling for a long time gives me some 
>>> confidence that we can do that in a way that's not prohibitively expensive 
>>> and invasive.
>>
>> I don't really know the jargon here.
>
> "Code unloading" is mentioned here 
> https://reviews.llvm.org/D96033?id=323531#inline-911819

I see.  So you want to be able to sort of "roll back" Sema to a previous 
version of the semantic state, and yet you also need IRGen to *not* be rolled 
back because of lazy emission.  That seems... tough.  I don't think we're 
really architected to support that goal — frankly, I'm not sure C and C++ are 
architected to support that goal — and I'm concerned that it might require a 
ton of extra complexity and risk for us.  I say this not to be dismissive, but 
to clarify how I see our various responsibilities here.  Clang's primary 
mission is to be a static compiler, and it's been architected with that in 
mind, and it's acceptable for us to put that mission above other goals if we 
think they're in conflict.  So as I see it, your responsibility here is to 
persuade us of one of the following:

- that you can achieve your goals without introducing major problems for 
Clang's primary mission,
- that the changes you'll need to make will ultimately have substantial 
benefits for Clang's primary mission, or
- that we should change how we think about Clang's primary mission.

We probably need to talk about it.

>> The biggest problem that I foresee around having a full-featured C REPL is 
>> the impossibility of replacing existing types — you might be able to 
>> introduce a *new* struct with a particular name, break the redeclaration 
>> chain, and have it shadow the old one, and we could probably chase down all 
>> the engineering problems that that causes in the compiler, but it's never 
>> going to be a particularly satisfying model.
>
> Indeed. Cling did not have this feature until recently. We indeed "shadow" 
> the reachable declaration maintaining (using inline namespaces) the redecl 
> chain invariants (relevant code here 
> <https://github.com/vgvassilev/cling/blob/899b3337fc25cb06d6b82d5451c5040515d94416/lib/Interpreter/DefinitionShadower.cpp#L73-L94>).
>  I am not sure that approach can work outside C++.
>
>> If we don't have to worry about that, then I feel like the largest problem 
>> is probably the IRGen interaction — in particular, whether we're going to 
>> have to start serializing IRGen state the same way that Sema state has to be 
>> serialized across PCH boundaries.  But I'm sure the people who are working 
>> on this have more knowledge of what issues they're seeing than I can just 
>> abstractly anticipate.
>
> We find ourselves patching often that area in CodeGen when upgrading llvm 
> (eg. here 
> <https://github.com/vgvassilev/clang/commit/7274af0e10e0569ad3c685269814a458b9d49ad0>).
>  The current cling model requires the state to be transferred to subsequent 
> calls of IRGen. We briefly touched that topic in 
> https://reviews.llvm.org/D34444#812418 (and onward) and I thought we had a 
> plan how to move forward.

Ah, I sort of remember that conversation.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96033/new/

https://reviews.llvm.org/D96033

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to