为什么Loki图书馆没有被广泛使用?
Loki库实现了一些非常广泛使用的概念(智能指针,访客,工厂等)。 经常提到相关书籍“现代C ++devise”,但库本身没有被广泛使用。 这是为什么?
大多数开发者似乎更喜欢Boost。 特别是,为什么人们经常决定使用Boost的智能指针而不是Loki?
Loki是一个研究/certificate概念的事物。 Alexandrescu推动新的想法,其他人采用这些现实世界。 另外boost::shared_ptr
几乎是在TR1中。
Loki受到好几个function区的触动(一些特定的应用程序模板metaprogamming支持:智能指针,单例,函数对象,范围警卫等),而boost是许多库的集合,通常覆盖每个function区和更高度的可移植性(第一)。
10只中有9只可以用同一块石头杀死,很多人只是从提升开始,填补了与第三方图书馆的差距。 如果重叠,很难与提升竞争。 因为不会有太多的提升,所以人们会下载/安装提升来获得其他function,所以除非你指出一个提升很弱的区域,而且这个区别对于项目来说是非常重要的,否则他们会“ “也为了提振。
此外,亚历山德雷斯库多次试图让洛基得到提振,一些关键的提振作者也没有合作。 我个人的观点是,他们希望更完整但更less用户友好的MPL有更多的“市场份额”:作为图书馆的作者和硬拷贝图书是唯一体面的文档(与大多数其他推动形成鲜明对比图书馆有优秀的在线文档),他们做得很好。
如果有人对这个分析感到不满和不赞成,我就会全神贯注。
极其参数化代码的另一个实际问题是,在不同开发人员/团队独立工作的大型项目中,他们通常最终会相当随意地使用相同模板的微妙不同的实例。 这使得在这些子系统之间传递值更加困难:接收器可能需要:
- 被参数化(即模板化,因此内联,这引入了编译依赖和较慢的企业级系统构build)
- 为所有可能的实例提供一些最小范围(例如,检查错误代码和期望/处理exception)
- 通过一些编译时间基于一个抽象的基本访问器和每个实例化的实现来运行时间移交),这损害了参数化的一些性能优点
这是完全可能的,但是需要一位优秀的程序员来浏览地形。
你想使用下一个程序员将要知道的库,将来会得到很好的支持 – 所以你select一个主要库。 因为这是一个重要的许多人使用它,所以它成为默认的select。
我实际上更喜欢Loki的做事方式,而且我已经为Loki自己做了一个Decorator模式,现在坐在跟踪器中,因为据我所知,这个项目已经不在了 。
我使用boost shared_pointer只是因为它很快就会成为标准,我可能不喜欢这样的事实,我无法定制它的行为完全符合我想要的行为,但我必须忍受它。
标准库的使用非常重要,因为它可以让其他程序员维护代码。 如果它是开放源代码,并且您想尝试继续使用Loki。 没有人阻止你。
实际上Windows Vista使用了Loki的一些function。
我猜测他们没有使用智能指针和访问者的冗余实现。
作为一个使用Boost库的人,不止一次地看过Loki,最大的问题是文档的稀疏性。 而且,Loki使用了一些C ++模板中最有趣的部分。 令人兴奋的东西,但也相当艰巨。
我用Loki一个小工具(基本上是一个解释器),并且真的很喜欢它。 我的同事对图书馆的热情不高,所以它的使用仍然受限于这个小的子项目。