Dynamic Invokation Interface [was: Building ORBit2 on Windows]



On Mon, 3 May 2010, Frank.Rehberger wrote:

DII  stands for Dynamic Invocation Interface.

... discussion of DII omitted ...

Frank, let me describe my application a bit more; maybe you can
suggest a different approach.

Basically, I'm trying to modify gnuplot to better support mathematical
visualization.  I need to allow functions to be written in standard
programming languages.  To this end, I've modified gnuplot so that it
can call functions in a shared library (somebody else had done some
work on this years ago) or via CORBA.  CORBA is desirable because it
allows us to plot functions written in Java and exported via RMI.

I don't want to use static IDL because I don't want to either define
some special gnuplot interface, nor have to recompile gnuplot for
different applications.  So I've defined a new gnuplot command,
import, that works something like this:

      import double line(int lineno, double t) from corba "IOR:..."

DII is then used to call the function as needed.  I started into this
thinking it would be fairly straightforward, since the ORBit2 page at
http://projects.gnome.org/ORBit2/ states that DII is supported.  I've
since realized that nothing involving CORBA is straightforward ;-)

At any rate, I've now implemented enough of DII to have a working
gnuplot/Java interface as described above, and it's no more cumbersome
than the shared library code.  It has some performance problems, as
you might expect from its request/reply structure, but that's a
different issue.  I figure that I might as well finish up DII and
submit it to this list.

I also want a CORBA-equipped Windows gnuplot executable, which is what
I'm struggling with now.

I've thought about trying to read IDL at runtime, but it doesn't
really seem worth it, since gnuplot isn't going to be using any data
structure more complicated than a string.

Or maybe not.  In order to deal with the performance issues, at some
point I'll probably try to vectorize gnuplot's plot loop, so that it
can pass an array of floats (say), let the remote function compute
them all and return an array back, rather than ping-ponging like it's
doing now.  So that means we want to find out (at runtime) if the
remote method allows an array to be passed in.  get_interface seems
like the obvious thing to use here, but it, too, is unimplemented.

Does all this make sense?  Any suggestions?  Will quality DII code be
accepted into ORBit2?


					-bwb

					Brent Baccala
					cosine freesoft org


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