abhishek.aggarwal added a comment.

In https://reviews.llvm.org/D33035#799656, @clayborg wrote:

> In https://reviews.llvm.org/D33035#799404, @abhishek.aggarwal wrote:
>
> > In https://reviews.llvm.org/D33035#799058, @clayborg wrote:
> >
> > > So std::vector shouldn't be used in a public API. You should make a class 
> > > that wraps your objects. LLDB's public API has lldb::SBInstruction and 
> > > lldb::SBInstructionList as examples. std::vector on other systems 
> > > compiles differently for debug and release builds and things will crash.
> >
> >
> > Hi Greg .. Does it go for the tools built on top of LLDB (e.g. in my case 
> > where feature library is not a part of liblldb shared lib but built on top 
> > of it)? If yes, then I will proceed to remove std::vector from C++ public 
> > API of the tool and create a new class for it.
>
>
> It really comes down to the issue of how stable you want this API to be. If 
> this API is a "you are expected to rebuild any tools you make against this 
> API every time we release a new version" then you can really do anything you 
> want. If you want a stable API to build against, you could choose to follow 
> the LLDB public API rules: no inheritance, fixed number of member variables 
> that never change (which usually means a std::shared_ptr<T>, 
> std::unique_ptr<T> or a T*), and no virtual functions. This effectively 
> renders the C++ API into a C API, but it does force you to have your public 
> API classes have an internal implementation (T) and then the class that you 
> export for your API be the public facing API that everyone uses externally. 
> The nice thing about this is that swig has a really easy time creating all of 
> the script bindings for you if you do it this way. So it really depends on 
> what your future use case of this API is.
>
> >> If you need this via swig for internal kind of stuff, then use a typemap 
> >> where you map std::vector<T> to a list() with T instances in it in python.
> > 
> > I want to provide a python interface for the tool's C++ public API as well 
> > so that the API can be used in python modules as well. Therefore, I think 
> > typemapping to list() will not solve the problem. Am I right?
>
> I believe it would fix your issue for you. You write the glue code that can 
> translate any argument (std::vector<ptdecoder::PTInstruction>) into something 
> more python like like a list of PTInstruction python objects. We do this in a 
> lot of places with LLDB.
>
> >> I am a bit confused here as well. Are we exporting a plug-in specific 
> >> python bindings for the Intel PT data? It seems like it would be nice to 
> >> wrap this API into the SBTrace or other lldb interface? Am I not 
> >> understanding this correctly?
> > 
> > Probably, I didn't understand this comment of yours. We are not exporting 
> > python binding for Intel PT data. It is a python binding for Tool's C++ API 
> > and this Tool is built on top of LLDB. Did I answer your question? Please 
> > let me know if I misunderstood your comment.
>
> Now I understand. I didn't realize this was a stand alone tool. The main 
> thing to figure out is how stable you want this C++ API that you are 
> exporting to be. If that isn't an issue, feel free to use anything you want 
> in that API. If stability is an issue you want to solve and you want to vend 
> a C++ API, you might think about adopting LLDB's public API rules to help 
> ensure stability.


Hi Greg .. Thanks a lot for your feedback and detailed explanation. I am 
choosing to follow what LLDB SB API are following. Removing std::vector<> from 
interface. Submitting a new patch.


https://reviews.llvm.org/D33035



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

Reply via email to