[LLVMdev] API design (and Boost and tr1)

Chris Lattner sabre at nondot.org
Tue Jul 10 11:37:50 PDT 2007


On Thu, 5 Jul 2007, David Greene wrote:
> On Thursday 05 July 2007 11:54, Chris Lattner wrote:
>>> I've opted for the alternate approach: make all clients pass iterators.
>>> That is, get rid of the specialized one- and two-argument constructors
>>> entirely.

>> That sounds reasonable.  Please keep the "Value* + num elements" ctor as
>> well though.
>
> Why?  I can't think of a case where a client uses that but can't use the
> iterator version (just pass Value, Value+num).  I'd rather not maintain two
> interfaces with identical semantics.

If nothing else, for temporary migration reasons.  First step is to get 
the new interface in, second step is to migrate clients, third step is to 
remove the old one.

>> Here's another crazy idea.  Instead of overloading the callinst ctor, why
>> not just add a static function to create the call (like binaryoperator and
>> friends):
>>
>>    C = CallInst::CreateWithArgRange(X, B, V.begin(), V.end());
>>
>> That way you can completely avoid the overloading issues.
>
> That's not a bad idea.  In fact, we ought to think about creating factories
> for everything.  Bare new/delete usually comes back to haunt one later on.

Yep, I agree.

> I'll get what I've got working and checked in.  I'm not sure I'm ready to go
> and change everything to CallInst factories given the tons of other things
> I've got to work on.

Of course :)

> The iterator and one-argument constructors appear to cover 99% of the
> cases and the two-argument clients can often just pass Use::op_iterators
> directly.  I've even found one case where we can eliminate a temporary vector.

nice!

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list