On Mon, Oct 01, 2012 at 10:15:31AM +0100, Ciaran McCreesh wrote:
> On Mon, 1 Oct 2012 02:01:32 -0700
> Brian Harring <ferri...@gmail.com> wrote:
> > Implicit labels context is build+run.

<snip>
> Your rules require a handler to say "have I seen any dep: blocks
> further up the tree than my current position? If yes, handle this dep:
> block one way; otherwise, handle it a different way".

Given that there's an implicit top-level, that's always a "yes" so there
is no such "special"-case decision required.

> With labels, all
> you do is initialise the label stack with build+run, and then no
> special case handling is required.
>
In practical terms, that's the exact same thing as initialising with a
defined context. And as shown, your proof of "special-case" is bogus.

 
Looking at both your arguments, I agree with Harring that they amount
to the same thing. But as he also said: "changing the mental mode for 
parsing" has a cost, and "We however are *not* starting from scratch.
This shifts what we'll accept for costs/gains ratio." So any change
"has to have significant gains for changing the existing form."

The problem is that you're both thinking in terms of what the package
mangler wants, and not in terms of how people think. When you try to
build a package from source, the first thing you ask is "What libraries
does it need?" Then "What tools do I need at build-time to compile it?"
"How do I configure the package, and what's the effect in
terms of functionality and dependencies if I tell it not to use specific
libraries, which I might not have or want to download?"
Then "What does it need on the host system to run it (given that I've
already installed the libraries or it wouldn't have built)?"

See how those map to simple variables and USE flags, that people are
used to handling? That's why ports does it like that, and that's why the
format was copied (in simplified form to ease implementation) for portage.

The only shown advantage in your methods is a quicker cache format, which
can be inferred from the existing syntax, and would thus never even hit
user machines, if you just used it in the cache.

And for that, you want to radically change the way everyone writes ebuilds,
along with all the maintenance headaches, instead of adding a variable that
plugs the gap in the original spec.

Oh, and some putative ability to arbitrarily add new labels in the
hypothetical future, all specified in terms of package manager internals.
You're getting it wrong: those flow (and should be inferred) from the
roles that the various dependencies play in the build process, not the
other way round. Roles named by declarative variables, that match the
mental model people have of the build process.

That way your format supports its users in a transparent manner, instead 
of making them jump thru hoops and learn more and more obscure syntax,
along with new, more complex, ways of doing the same thing you were doing
before without the headache.

Just agree a format, and use it in the cache, already.

Or y'know, don't call it an ebuild.
-- 
#friendly-coders -- We're friendly, but we're not /that/ friendly ;-)

Reply via email to