3 回答
TA贡献1816条经验 获得超6个赞
仅当您是所有涉及的框架的唯一分发者时,伞框架才有意义,并且您将所有框架打包为一个单独的版本包,将一起升级。如果那是您的情况,那很好,但这是一种非常不寻常的情况。在可可开发世界中,除了苹果公司以外的任何人都处于这种情况是极为不寻常的。
首先,只有您是给定框架的唯一分发者,伞式框架才有意义。例如,假设您想将libcurl作为伞形框架的一部分。现在,其他一些打包程序也希望将libcurl作为其伞形框架的一部分。现在,我们发生了链接时冲突,这可能导致链接错误或更糟的,未定义的运行时行为。我自己追逐了这些。他们非常不愉快。避免这种情况的唯一方法是每个框架/库只有一个版本。伞框架鼓励相反。
即使您只是将自己的代码分解成多个子部分,这也意味着其他供应商可能会在自己的伞形框架中使用子框架,从而导致同样的问题。请记住,如果您说作为第三方使用伞式框架是可以的,那么其他供应商也可以。
第二点,仅当您控制所有子框架的版本控制时,伞式框架才有意义。在我的经验中,尝试修补一组相互依赖的框架几乎总是一个灾难。
操作系统供应商由于其系统的规模和普遍性而出现了异常情况。在一个范围内有意义的事情通常在另一个范围内没有意义。NSResponder对此完全正确。当您提供一个完整的,成千上万的软件包环境时,这些取舍是不同的,这是为平台编写的每个程序的基础。但是,即使苹果公司也只有少数大型伞式框架,它们始终是它们提供和控制其版本的库的包装。这主要是为了简化开发人员的工作,否则他们将不得不追逐数十个库和框架来进行编译。没有第三方有这种情况,因此很少有第三方需要此解决方案。
我在这里的大部分讨论是针对OS X的。在iOS上,这不是第三方的问题。由于肯定会发生冲突,因此静态库绝不能链接其他静态库。
从理论上讲,我在这里讨论的大多数问题从根本上限制了链接程序的技术限制。链接器没有管理多种版本库的好方法,因此冲突是一个严重的问题。.NET程序集试图为此提供更多的灵活性。我对.NET开发还不太熟悉,无法说出它是否成功。我在大型多组件系统上的经验是,对于大多数问题而言,更简单,更不灵活的解决方案是最好的。(但是,那草总是更绿了...。)
- 3 回答
- 0 关注
- 416 浏览
添加回答
举报