Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


On 12/13/2011 01:21 AM, Tomas Hlavaty wrote:
Stephan Bergmann<sbergman@redhat.com>  writes:
At runtime, the C++ UNO binding queries the types.rdb for certain data
(e.g., when (un-)packing data as ANY).

OK.  Does it need to go through the rdb file?  It could as well be
already compiled into a dll.

Yes, but duplicating information has disadvantages. The main problem that I see here is .oxt extensions that bring along additional UNO types. If a UNO language binding relies on runtime type information being available in any format other than the common .rdb format, each such extension needs to include that language-specific data alongside its common .rdb data. This is a burden for extension developers, and does not scale with the introduction of new language bindings. The Java way of relying on Java .class files instead of .rdb has been identified as a mistake.

Binding UNO to dynamic languages like Python takes another approach.
It obtains any necessary information purely at runtime, from the
types.rdb, via UNO services that make available that information.  It
does not require any *maker tool to generate language-specific
artefacts from the complete type information upfront.

OK.  But it could be made faster if the type information was available
in one go instead of querying per instance, if the speed was a problem?
So we could have the type information in a readable format or generated
as a py file.  Or maybe everybody is happy with the way python does it?

I think the less one needs to generate upfront, the easier the overall workflow becomes.

What about StarBasic?  I guess that would be similar to Python.

Yes, it mainly uses a UNO invocation service that obtains a UNO object reference, name of what to invoke (interface function, property setter/getter), and arguments, and handles all the minute details internally.

Another point to re-evaluate is how much of that complete type
information to duplicate in the artefacts generated for the various
language bindings.

Why not all?  It's not that much.

See above.

On the one hand, it might be advantageous to encode more information
in the generated C++ artefacts (potentially even generating a
dedicated dynamic library containing the relevant, instead of
spreading it inlined across header files, where the linker can
recombine part of it again). That could help ensure that the
(new-style) types.rdb need not be read early on during startup (so if
loading it where somewhat costly that would not be that much of a
problem as it is today).

Yes.  But wouldn't be the type database still required as C++ doesn't
have the reflection capability built-in?

Yes, of course. This would purely be a performance improvement, with the trade-off of duplicating information for speed. (And as all information would still be available in .rdb, this would have no implications for extensions. Whenever information about a type is needed for which there is no "statically cached" direct C++ data, the language binding would fall back to the---slower---.rdb data.)

On the other hand, an easily parsable format would allow Java to
reduce the amount of information currently stored in generated .class
files, and instead rely on the complete type information available as
a (new-style) types.rdb.  Java .class files could even be generated on
the fly from the types.rdb information using a dedicated Java class
loader. (That would remove the ugly requirement that .oxt extensions
need to bring their additional UNO types as both .rdb and .class
files.)

Here I don't know how these .oxt extensions work.

Is the size of generated .class files an issue?

No, see above.

Though idlc, climaker, javamaker, codemaker would "just" be replaced
with your new code (that conceptually does the same thing), if I get
you right?

Exactly;-)

But why rewrite climaker, javamaker, codemaker then? As they take their information from the interface abstracting from the actual .rdb format, they can be left unchanged (or enhanced to emit additional information, if so desired).

(Note that module idl is completely unrelated to UNO.)

What is it then?  It looks like something related to idl compilation.

That other idl describes user interface resources.

Stephan

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.