First of all thank you for the research and wish you a good luck in
making the changes happen.
## Reordering to PACKAGE OP VERSION
<cat/pkg> [<operator> <version>] [:<slot>]
is more sane than
<cat/pkg> [:<slot>] [<operator> <version>]
even though it's not so "hierarchically correct".
Thus instead of writing
dev-foo/bar:4===4.1
one would write
dev-foo/bar==4.1*:4=
which is nicely readable.
But in case the box brackets notation gets incorporated (as in Exheres),
<cat/pkg> [:<slot>] [[<operator> <version>]]
is the way to go.
## Version ranges
dev-foo/bar:0[(>=2 && <4) || (>=6 && <10)][baz?]
looks the most promising to me as it allows to include and exclude any
number of ranges.
## Things not included
### Comments/annotations
Currently, there is no way to put inline comments to *DEPEND, IUSE,
..., thus the only supported way is to put the comments above the
specification and somehow tell the reader what part of the
specification is the comment about. For 3-4 deps it's acceptable, for
20+ it's insane and thus no one does it, losing valuable information
about the reasoning by doing so.
Mu current workaround is:
DEPEND_A=(
# comment
"cat/pkg..."
"|| ("
# comment
"cat/foo"
"cat/bar"
")"
)
DEPEND="${DEPEND_A[*]}"
### Logical operators for groups
#### OR
Currently there is no way to specify:
foo||bar? (
cat/pkg
)
and one has to copy&paste a lot:
foo? (
cat/pkg
)
bar? (
cat/pkg
)
#### AND
AND can be specified via nested groups:
foo? (
bar? (
cat/pkg
)
)
but this syntax is verbose and not explicit.
foo&&bar? (
cat/pkg
)
would be much more readable.