some refinements
This commit is contained in:
parent
cc2af2af36
commit
4e6b4040c3
1 changed files with 9 additions and 10 deletions
|
|
@ -1860,29 +1860,28 @@ always succeeds.
|
|||
!! C++ exceptions
|
||||
</pre>
|
||||
</div>
|
||||
<div title="PluginVersioningCases" modifier="CehTeh" modified="200707131207" created="200707121127" changecount="34">
|
||||
<div title="PluginVersioningCases" modifier="CehTeh" modified="200707131418" created="200707121127" changecount="38">
|
||||
<pre>! Compatibility matrix
|
||||
|
||||
|>|>|!Source compatibility|
|
||||
|!~~CALLER~~\^^CALLEE^^ *|OLD^^**^^|NEW^^**^^|
|
||||
|OLD|works|works<<br>>but a recent interface definition must be available|
|
||||
|NEW|caller gets 'revision not sufficient' at runtime<<br>>needs to implement fallbacks|works|
|
||||
|
||||
|NEW|update callee using new interface revision|works|
|
||||
|>|>|!Binary compatibility|
|
||||
|!~~CALLER~~\^^CALLEE^^|OLD|NEW|
|
||||
|OLD|works|works|
|
||||
|NEW|only when fallbacks to older<<br>>revisions are implemented|works|
|
||||
|NEW|caller gets 'revision not sufficient' at runtime<<br>>and needs to implement fallbacks|works|
|
||||
|
||||
^^*^^) CALLER is the user of an interface, CALLEE is the interface proider (usually a plugin)
|
||||
^^**^^) OLD means a inital revision, NEW means some later revision of an interface
|
||||
^^*^^) CALLER is the user of an interface, CALLEE is the interface provider (usually a plugin)
|
||||
^^**^^) OLD means a initial revision, NEW means some later revision of an interface
|
||||
|
||||
! Observations
|
||||
|
||||
Compiling a newer Plugin for some older main application release has some quirks (interface definitions are intended to be shipped with the main application).
|
||||
Compiling a newer Plugin for some older main application release has some quirks (interface definitions are intended to be shipped with the main application). This should be rarely the case.
|
||||
|
||||
Compiling older Plugins with a new main application needs to preserve the old code paths (what was already there before) and fallback to older interface revisions when opening.
|
||||
When compiling, older Plugins should be updated to new interface revisions.
|
||||
Caller should provide a fallback to older interface revisions for binary compatibility.
|
||||
|
||||
Generally, sources just should be properly maintained and updated to use the most recent interfaces revision. If this is not the case, its still possible to stay compatible with little efforts.
|
||||
Generally, sources just should be properly maintained and updated to use the most recent interfaces revision.
|
||||
|
||||
For binary compatibility everything will work well, provided that the caller kept proper fallback functionality for older interface revisions. Plugins which are independently distributed (packaged) in binary form don't need to be updated with every new main application release and just work.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue