--
One example is all that is needed to invalidate "it does not work". True it does not extend to the general case but it shows that it can work.
I think only generics inspire more heat on this list. ;-)
Personally I think there is a need for both stable APIs *and* repeatable builds. Gustavo's efforts are a great step towards the former direction, and I like what Keith Rarick's godep tool contributes towards the latter.
--
I think in principle I agree with you, things work the way they are, but I can definitely see two potential issues happening.Issue 1:when, in your project, you have:import "github.com/woo"what does that really mean? That, at the time you originally wrote your code, "woo" was in a certain state that worked for you? But how do you guarantee that when I import your code, which will cause me to import "woo", that it will still work? Maybe your code works with "woo" as it was on 1/22/2013, but I need "woo" as it is in 2/12/2014, and lo and behold - there's an API incompatibility - how do we resolve this?I like Gustavo's idea of package authors making the URL be something like "github.com/woo/v1" and then "github.com/woo/v2" or whatever as the need arises, but that *does* imply a certain discipline is required from library authors. Which leads to:Issue 2:Is it a good idea for me to pull in your latest HEAD? What state is your source tree in now? Is it stable? Bleeding edge, experimental, full of bugs? Beta? Alpha? Did the API break? I don't know. All I can do is "import github.com/foo/bar" and cross my fingers and hope for the best.So what I probably need to do is "save" a snapshot of your tree that I know works on my local machine and then import that. And don't freshen that from your bleeding edge unless needed. Which again, is a manual process, required discipline, etc...I can definitely see some way to make it better, but not without adding complexity.
packages which have versions on them and you can say that package A needs version 2.1 (or greater, for example) of package B, and *exactly* version 1.1 of package C, or any combination thereof. And it's all resolved automatically and recursively.
Conflicts can arise, yes, but it's rare
Ultimately, do you feel it would be better if we had some type of moderated, controlled central repo?
--You received this message because you are subscribed to a topic in the Google Groups "golang-nuts" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-nuts/PLTY792AVzc/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-nuts...@googlegroups.com.
Cargo, the next official Rust package manager:
https://mail.mozilla.org/pipermail/rust-dev/2014-March/009087.html
If it's work for Rust, it's a good candidate for Go :)
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
I know what versioning is, it's "vendoring" that I don't recognize as a term.
Can't Bundler fetch from github? I think it can and the plans for Cargo also includes such functionality.
--
of API stability strategy. This is a fact with years of backing
evidence.
6 * Darwin (386, 386+387, amd64), cgo on, cgo off
With the /version approach you somewhat lock in the library maintainer because it sets the expectation that your code will not break Period.
As a lib maintainer what I'd prefer to say is "I will not break your code unless I have to and then I'm going to explain why and how you can fix it". Then you don't need the /version approach anymore.
This is precisely why versioning is better than vendoring. Only the library maintainer has a reasonable chance to decide if some state of the code is stable.
With vendoring not only I but you and everyone else using a library have to test and verify the stability of all their dependencies and the dependencies dependencies...
I work with maven and spring daily and if you get different versions of dependencies then you are doing something wrong.
Let me put it this way: Try to vendor a spring project...