Re: ORBit mail 3 - Vtable layouts



Owen Taylor wrote:
> 
> Phil Dawes <philipd@parallax.co.uk> writes:
> >
> > That's a shame. I've had a short read through the spec and I couldn't
> > find any reason why you can't. I'll do some more reading tonight.
> 
> Some reasons off the top of my head:
> 
>  - The POA could have the policy NO_RETAIN, which means that
>    application is queried for a servant on each request.
> 
>  - The servant might have been deactivated in the meantime.
> 
> The POA spec actually mentions the inability to short-circuit
> explicitely. This doesn't mean that intra-language performance
> is going to be slow (centainly not when compared to inter-process
> communication times)  - it just won't be blazingly fast. CORBA
> and especially the POA are somewhat heavy-weight solutions intended
> for distributed computing.
> 


Yes, you're right - I read the POA spec properly last night and found
this bit (section 9.2.10) and promptly kicked myself.


> > > Of course, you can have an extension, or custom OA, that is optimized for
> > > in-process communication, but to me at least that seems rather
> > > secondary at this stage..
> > >
> > > As I said, if you want in-process performance, you don't want to use CORBA
> > > anyway..
> >
> > But I do want different languages in the same address space. There
> > aren't many other choices AFAIK (com or ilu).
> 
> To my understanding, COM is quite poorly designed for
> multiple-language use.
> 

I'd be interested in knowing why. Plenty of languages can speak COM
(C++, C, VB, TCL, python). Most of these languages talk through
IDispatch (a bit like DSI). AFAIK The python version can talk through
IDispatch or directly through the vtables.

IMHO COM is poorly designed for distributed use - the reference counting
it enforces is not scalable as the server is forced to check if its
clients are still alive (which it achieves through UDP pinging AFAIK).


> ILU does not attempt to do macro based short-circuiting of function
> calls. It's client-side stubs look like:
> 
> void yyy_A_foo (yyy_A _handle, ILU_C_ENVIRONMENT *_status)
> {
>   void (*_f)(yyy_A, ILU_C_ENVIRONMENT *);
>   _f = (void (*)(yyy_A, ILU_C_ENVIRONMENT *)) _ILU_C_FindMethod (_handle, _yyy_A
> __ILUType, 0);
>   _status->_major = ILU_C_NO_EXCEPTION;
>   _status->ptr = ILU_NIL;
>   _status->freeRoutine = (void(*)(void *)) 0;
>   _status->returnCode = (ilu_Exception) 0;
>   (*_f)(_handle, _status);
> }
> 

That's handy to know,

Cheers,

Phil.

-- 
_______________________________________________________________________
 Phil Dawes                               |   My opinions are my own
 WWW:    err.. temporarily non-existant   |   and nothing to do with
 Email:  philipd@parallax.co.uk           |      my employer.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]