On Wed, Oct 5, 2016 at 3:26 AM, Chris Bagley chris.bagley@gmail.com wrote:
I started this feature after finding it a pain to use osicat as neither Windows or OSX ship with a C compiler installed. When the groveler failed the output was very unhelpful, and as I wasn't a developer on the groveler I had no idea what it was or how I should be interacting with it. I was just a consumer who saw value in osicat.
I like to distinguish 4 roles: 1- Author, who writes a given system. 2- Referrer, who uses the system from another system. 3- Integrator, who assembles a bunch of systems into an application. 4- (End) User, who uses the application and shouldn't even have to know it's in Lisp.
Only the Integrator should have to worry about matching together Lisp systems, Lisp implementations, C compilers, etc. For others, it should "just work". By default.
What problem are you trying to solve for people in which role? How is it not already solved by the ASDF cache?
If it's anyone but Integrators, then mucking with implementation identifiers is wrong-headed. If you're trying to write something for Integrators, then look at the ASDF bundle operations as a good start.
And if you're not satisfied with ASDF, may I suggest you give a look at bazelisp? Sure, it only works on Linux amd64 using SBCL at this point, but it might be easier to port for much better results than would be trying to abuse ASDF and try to go against the design of ASDF.
Where can I find details on these 'internal invariants'? This sounds like a problem with the currently implementation and not the concept of avoiding duplication of work (caching).
The invariants of ASDF are mainly that you should be using the ASDF cache and it should just work. If you're not using it the intended way, either: 1) There's a bug in ASDF, so go fix ASDF, or 2) There's a bug in your code, so go fix your code.
I really would like to understand this as I attempt to ship games in lisp and dealing with C dependencies from projects using CFFI is by far the single biggest issue of shipping.
That's an application delivery issue, for Integrators. For that, please use ASDF (monolithic) bundle operations, GDL famously does just that.
See also the cffi-toolchain static-link capabilities, that could use some love. (SBCL notably reverted my patch to generate self-contained static linked binaries, because it was broken on MacOS and Windows.)
Or use Bazel (which patches SBCL).
But please don't introduce towers of complexity that defeat the design of ASDF.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org If you're a quiet, law-abiding citizen most of the time but occasionally cut someone up and bury them in your backyard, you're a bad guy. — Paul Graham, "The Power of the Marginal"