depending on a end-user configured version string to determine compatibility isn't giving much assurance of actual compatibility.
There is a version string, but it isn't "end-user configured" - it's set inside the project makefiles (by the DFHack developers).
I'm an end user - I set it to get DFHack to recognize mifki's build of the TwbT plugin, which is what brought up this whole discussion in the first place. If I want to compile just a plugin, I can set that version string to whatever I feel like, and DFHack will
think the DLL was compiled for that version of DFHack, regardless of what is actually happening in the source.
And I'd say "acceptable and expected" is not quite the same as "accepted because they're not given any other options". Like I've already mentioned repeatedly, I appreciate that putting in that layer of abstraction now that should have been there all along to prevent the issue you described is a significant undertaking. This doesn't change the fact that the state of DF is very different now than it was 6 months ago when it had been 18 months since the last update and that dependence on DFHack, especially in starter packs and the like, is significant enough to warrant finding better ways to do things.
Long ago, there was an "abstraction layer" with that level of detail. It was called "symbols.xml", and it contained individual addresses and offsets for the small handful of variables that DFHack commands wanted to use. It was also very messy to deal with.
When we switched to df-structures and loading into DF itself (instead of acting like a debugger and using ReadProcessMemory/WriteProcessMemory), we did away with that because the new system was much simpler to code for - rather than having to call special functions inside DFHack to fetch an object of a particular type (from one of the specific lists it knew about at the time) and then lookup the offset of each individual field within the object it wanted to access, it could offload all of that to the C++ compiler.
And like I already said, Lua scripts do have the "layer of abstraction" you're so insistent on having - you can access fields by name, and as long as those field names don't change then you can run the script in whatever version of DF you want. Hell, I've run some DFHack Lua scripts written for 0.34.11 in 0.28.181.40d and even 0.23.130.23a, and they worked just fine as long as they weren't trying to access things that didn't exist.
If you think you can do better, then by all means do so.
That doesn't make any sense in the context of the discussion so far. My whole reason for thinking that there's got to be a better way of doing things is that I used:
DFHack source from .40.11r1
symbols.xml for DF .40.12
DF .40.12
And everything worked fine. If symbols.xml isn't that abstraction layer anymore, why was updating it enough to get everything working? Why was it needed at all? Those are the questions that kickstarted this whole thing. Waiting on the DFHack team to put together for a release when there are bug fixes or breaking changes makes sense. Waiting on them when all that was required to get DF .40.12 up and running, which has a critical fix for dwarves getting stuck unconscious, doesn't make sense if the only two things required were updating symbols.xml and making DFHack and the plugins all
think they had been changed to work with .40.12.
As a result, an update to DF .04.12 for the Starter Pack PE maintains
could not be released until the
DFHack developers put together a release. For whatever reason, this took 6 days to do. Considering that the DF update from .10->.11 took 7 days and Toady's notes say a .13 release could be today or tomorrow, continuing this cycle makes starter packs effectively worthless. We have gone from a system where, 6 months ago, the starter pack was constantly at the latest version of DF to now, where it never can be.
I don't particularly care
how we get that gap closed, what's important to that me is we figure out a way to do it. Yours is the first post since this conversation began that wasn't completely "well we've always done it this way so get over it" and actually started discussing
why the roadblocks exist and what it would take to overcome them. With that in mind, unless the DFHack team intends to completely obsolete non-Lua plugins, that's not an effective approach as things like the Starter Pack depend on a ton of existing plugins - TwbT, Falconne's jaunts, etc.
It seems to me that if just updating symbols.xml was enough to get things moving from .40.11 to .40.12, there's got to be
some way to eliminate the wait on the DFHack team to do an r1 release if the only thing that is required for an update is symbols.xml.