On Sat, 23 Mar 2013 17:48:14 -0700
Evan Chan <
vel...@gmail.com> wrote:
> Mark et al,
>
> >>
> >>
> >> Excellent indexes are crucial to good dependency resolution performance.
> >> The above queries requires lots of graph traversals.
> >
> > I agree. The original proposal as I understood it was for a database to be the native representation instead of an implementation detail. I believe Fredrik is still assuming a database would be populated from the git repository, but I'll let him clarify that.
>
> OTOH if you actually check in the database then you negate many of the advantages of git in the first place. But if you generate a DB from git that might be too slow. The Gremlin folks implemented a graph DB prototype on Git, so this may work:
>
>
https://groups.google.com/forum/m/#!msg/gremlin-users/trBKdAW105U/qBfckF0bOiIJ
Yes, that is a possibility. One thing we'd need to see is whether it would actually be readable by users. For example, if the encoding of metadata into a text file is ultimately one or two steps removed from what the user writes, they wouldn't understand the contents or diffs.
By this I mean, if dependencies have to be encoded as a string ID, we'd probably have to have a hash and then the user wouldn't be able to quickly read off the dependencies of a module.
> Perhaps our requirements are just for simple maven deps (which would make me sad), and this would reduce indexing requirements.
If you mean limited to what Maven metadata can describe, I doubt they would be sufficient. Those limitations are half of the reason I bothered to give the talk.
> >> I suppose one core question that should be answered is, how flexible of
> >> dependencies do we want adept to support? I would think at a minimum:
> >> - support for version ranges. For example, "0.8.2+" but not "0.9".
> >
> > This is a good question and one that was discussed rather extensively in the follow up session the day after the talk. Unfortunately it wasn't recorded and there wasn't a solid conclusion anyway!
> >
> > What I want to at least consider, even if it doesn't ultimately work out, is whether it makes sense for versions to have internal structure at all. I think we really want compatibility information encoded instead (but who knows, maybe not). This would be a producer-side model (the library maintainer explicitly indicates compatibility) instead of consumer-side
>
> Yes, I totally agree producer side should provide enough metadata to help compatibility.
> The question is, do enough people care to make this work/a reality?
For me, the emphasis should be on a metadata format that faciliates reliable automation. Then, you just make it work for users. As an example, the build tool can automatically manage compatibility if it has places to put the information. Right now, the cross-versioning hack is necessary because the underlying system doesn't have a place to put that information in a way that works properly.
> A good goal would be to get much of the Scala community to hop on board. I'm afraid too many folks would say, so what's wrong with Maven?
> To take a step back, what would motivate people to switch? (And why didn't Ivy repos succeed?)
I expect involving Ivy is complicated because it wasn't just about dependency management, but also the build tool and the types of users using those build tools. I don't know the history so these are guesses. It had a fairly high barrier to entry for small projects and there wasn't a large central repository. Maven bundled dependency resolution with a build tool that took advantage of it and was based on convention that included a central repository so there wasn't much initial work to configure it.
> I would hope:
> - ease of publishing (compared to Sonatype)
> - more sane predictable dep resolution
> - more conflicts resolved at dep resolution instead of runtime
Yes, I think these are the minimum, but also a proper user experience, with things like searching for dependencies locally instead of via a website.
-Mark