代码之家  ›  专栏  ›  技术社区  ›  rnicholson

滥用“图书馆”这个词

  •  0
  • rnicholson  · 技术社区  · 5 年前

    无论在这里还是其他地方,我都看到很多关于“维护”的问题 VCS中的公共库”。也就是说,foo和bar项目都依赖于 Libbaz和提问者想知道他们应该如何导入源代码 对于libbaz,输入每个项目的VCS。

    我的问题是:世贸组织?如果libbaz是图书馆,那么foo不需要它 源代码。有些图书馆设计合理 以这种方式使用(如gnulib),但大多数情况下为foo和bar 应该和图书馆联系起来。

    我想我的想法是:如果你把图书馆的源代码剪切粘贴到 你自己的源代码树,那么你显然不关心将来的更新 去图书馆。如果您关心更新,那么只需链接到 库并信任库维护人员来维护一个稳定的API。

    如果您不相信API保持稳定,那么就不能盲目地 无论如何,更新您自己的源副本,那么得到了什么?

    总结一下这个问题:为什么有人要保留 项目源代码中的库,而不仅仅是针对 那个图书馆需要它作为依赖?

    如果唯一的答案是“不要依赖”,那么为什么不只是 将库的副本与应用程序一起分发,但保留它们 完全分开?

    2 回复  |  直到 14 年前
        1
  •  2
  •   ire_and_curses    15 年前

    使用供应商分支来控制第三方依赖关系是 discussed in some depth 在颠覆书中。据我所知,基本优势是 保证 为所有开发人员提供稳定的API和统一的库,以及在同一版本系统中控制内部自定义修改的能力。

        2
  •  1
  •   David Thornley    15 年前

    在我现在正在进行的项目中,我们有主代码(在一个Subversion项目中)和许多来自不同地方的分类库,它们都在各自的Subversion模块中。Visual Studio解决方案为每个项目维护单独的项目,并在最后将它们链接在一起。如果我们在Unix或类似的OSS上工作,我们会做同样的事情。

    我看到的唯一缺点是,有时我会忘记更新其中一个更改更频繁的库,直到我注意到这一点,我的代码才会编译。如果我们在同一个模块中有库,那么我们就不会有这个问题。(我从来没有这样做过。灵活性的提高以及在不同的主要项目中使用不同的库的能力实在太大了。)

    这里的API是一个红鲱鱼:要么它保持不变,要么它改变了,如果它改变了,我们就必须以任何方式更新主代码。源库和二进制库的问题也是如此(要么我们用主项目编译它们,要么我们不编译它们)。