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

Re: [XaraXtreme-dev] Tools folder - what is it good for?

I think the original plan for modularising bits of Camelot was similar to this "shimming" of which you speak.

We were going to create wrappers that presented well-defined, fixed interfaces to the outside world and which internally called down to the C++ objects. But we probably would have created (or tried to create) the wrappers manually rather than auto-generating them. This would have been tedious but might have helped to keep the interfaces minimal.

Since then we have also had the examples of XML and HTML DOM's to study. They present an object-oriented interface to the world but are very careful to tie down their interface definitions once they have been published and only add new functionality by adding entirely new interfaces, leaving the old interfaces still working for back- compatibility.


On 24 Mar 2006, at 18:59, Ben Summers wrote:

On 24 Mar 2006, at 18:46, Alex Bligh wrote:

--On 24 March 2006 18:35 +0000 Ben Summers <ben@xxxxxxxxxxxx> wrote:

So, would it be possible to auto-generate a C binary interface which
doesn't change when you change the C++ object? Could it be little more than a shim layer? And I'm sure it could be source code compatible, so a
plugin could be compiled in without the shim layer.

I am not sure how "auto-", but yes perhaps.

If you select the classes of interest, then use the output of nm to find all the relevant functions in that class, you should be able to do something simple but effective which will insulate from binary changes as the classes evolve.

But I still think the current
directory distinction is not helpful. It doesn't (for instance) specify which bits of API would need such auto-generation. Tools (quite correctly)
call into the Oil layer, for instance to get resources. Part of the
issue here would be designating which bits of API are meant to remain
stable, so they could be "en-shimmed".

I didn't mean to suggest that the whole task would be easy, just that the use of C++ itself should not be a barrier.