I have no opinion on the actual topic of this thread, I'd just like to respond to a
couple of your points:
Just an example: sometime ago I asked on IRC why there
was not a
global init()/fini() function for LADSPA and was answered that ELF
defines .init and .fini sections. Which is fine for ELF-based systems
and other systems having similar stuff (all biggest platforms?), but
where there is none...
In C++:
static struct Init {
Init() { ...init code here... }
~Init() { ...fini code here... }
} init;
In C and C++:
int init() { ...init code here...; return 0; }
static int _ = init();
Completely platform-independent. I can't come up with a similar way of
having a library destructor in C, but it should be possible to associate
any resources that need destructing (e.g. heap memory) with plugin
instances instead of having them global, possibly using reference
counting.
Then I see this in LV2:
The environment variable LV2_PATH, if present, should
* contain a colon-separated path indicating directories (containing
* plugin bundle subdirectories) that should be searched (in order)
* for plugins.
Doesn't it sound a bit UNIX-centered? (colon separated on Windows for example?)
This is a good point - there are no Windows hosts for LV2 yet so nobody
has spotted that. We'll change the docs to recommend using semicolons on
Windows.
Somewhere in the thread someone also asked if there was a way to express
that a plugin with 6 audio output channels was actually a 5.1 output -
for LV2 there is (as an extension, of course):
http://ll-plugins.nongnu.org/lv2/ext/portgroups
You can denote a set of output or input ports as being of any of the
common surround or ambisonic B channel configurations, though I don't
think anyone has actually used anything other than StereoGroup in a
plugin yet.
--ll