xiaobai marked an inline comment as done.
xiaobai added a comment.

In D64599#1581620 <https://reviews.llvm.org/D64599#1581620>, @labath wrote:

> In D64599#1581598 <https://reviews.llvm.org/D64599#1581598>, @jingham wrote:
>
> > My model for this was that there was a CPPLanguageRuntime.cpp that contains 
> > everything you can implement about the CPP runtime that is independent of 
> > any particular implementation of the CPP language runtime, and then a 
> > plugin instance (in this case the ItaniumABILanguageRuntime) that contains 
> > all the bits that are specific to a particular implementation.  Then 
> > putting the CPPLanguageRuntime.cpp in Target lets you know that this has to 
> > only contain the generic parts of the runtime behavior.  That still seems 
> > to me a useful distinction.
>
>
> I think that's fine, but it does not conflict the idea of the generic parts 
> of a cpp language runtime being a plugin also. This way the generic parts of 
> lldb would be truly language agnostic. Then if anything wants to work with a 
> c++ runtime, but it does not care which one, it can use CPPLanguageRuntime. 
> And if you need a very specific runtime, you go for the Itanium thingy.


+1

In D64599#1581661 <https://reviews.llvm.org/D64599#1581661>, @jingham wrote:

> In D64599#1581604 <https://reviews.llvm.org/D64599#1581604>, @labath wrote:
>
> > What is the indented relationship between CPPLanguage and 
> > CPPLanguageRuntime plugins (and generally between any Language and its 
> > LanguageRuntime)? Right now you're having the CPPLanguage depend on the 
> > CPPLanguageRuntime plugin. There is no reverse dependency, so this may be 
> > fine, if that's how we intend things to be. However, it's not clear to me 
> > whether that's the right way to organize things. Intuitively, I'd expect 
> > the LanguageRuntime to depend on Language, and not the other way around...
>
>
> The nominal distinction is that the Language files contain what you can know 
> about or need to do with a given language without having a process and thus a 
> live runtime to query.  The LanguageRuntimes are supposed to be about what 
> you can gather from the actual runtime, or what you need to do to handle 
> things like "stepping into steps across ObjC method dispatch functions" or 
> "stepping into std::function steps in to the target function".  Given this 
> distinction you'd actually expect the two to be independent of one another, 
> but then it turns out that in both ObjC and Swift, you can't actually know 
> the sizes of objects, or the offsets of ivar members until you have a running 
> process.  So things you'd think the Language would know actually require the 
> LanguageRuntime...


I also think that Language depending on LanguageRuntime makes sense. It seems 
to me that in order for the Language to be able to answer questions about 
implementation-defined features, it must ask the language runtime for help.



================
Comment at: source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:55
 #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
+#include "Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h"
 
----------------
labath wrote:
> compnerd wrote:
> > xiaobai wrote:
> > > JDevlieghere wrote:
> > > > What's the benefit of making this a separate plugin, as compared to 
> > > > making it part of `Plugins/Language/CPlusPlus`? 
> > > I view LanguageRuntimes as distinct from Languages and thus I think they 
> > > should go into their own plugins. However, I'm not against moving this to 
> > > `Plugins/Language/CPlusPlus` if you think it would make more sense to do 
> > > so for another reason (e.g. less plugins overall?)
> > We do need the abstraction since there are multiple C++ runtimes: c++, 
> > stdc++, MSVCPRT, stlport, etc.  Each one is slightly different.  
> > Furthermore, libstdc++ supported the GNU and Solaris ABIs, libc++ only does 
> > itanium, MSVCPRT only does MSVC ABI.  So, we need to have some layer to 
> > differentiate between the various ABIs and just general C++ language 
> > support.
> That is true. However, I'm not sure whether the current boundary actually 
> makes sense. E.g. the c++ language plugin implements pretty printers for both 
> libc++ and libstdc++.
Given that those are formatters specific to the libc++ and libstdc++ 
implementations, I think it would make sense that those are a part of the C++ 
language runtime plugin(s).


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

https://reviews.llvm.org/D64599



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

Reply via email to