SeqAn 库的深度剖析与发展探讨
1. 编程约定与定制化问题
编程约定虽优于不进行访问管理,但难以替代语言特性。研究表明,若缺乏技术手段强制实施,编程约定易被违反。对流行的 SeqAn 应用进行粗略检查发现,它们都会使用一些“私有”库函数或访问“私有”数据成员。由于这些库和应用分布在同一仓库,且持续集成中能看到“私有”库接口的重大变更,这使得维护应用功能状态的负担落在了库维护者身上。
SeqAn 选择的定制化方法较为宽松,但并非最用户友好,也不能保证代码的高质量。库设计的最佳实践建议将可定制性限制在明确指定的定制点,并在设计时格外小心。
2. 集成方面的问题
2.1 源代码级集成
SeqAn 的集成能力体现在源代码级别和项目级别。在源代码级别,Gogol - Döring 提出将扩展性应用到标准库或第三方库的许多或所有类型。SeqAn 有标准库 basic_string 及其迭代器、C 风格字符串的适配器,也能轻松集成其他第三方库。
然而,这种方法在集成单个类型时效果良好,但在扩展到库的规模时表现不佳。例如,将 std::basic_string 适配为 SeqAn1/2 中的 Sequence,接口包含 30 多个函数和 15 个以上的元函数,若为标准库的所有容器添加重载/特化,会产生 270 多个函数/元函数和数千行“复制粘贴”代码,这违背了泛型编程原则且易出错。
此外,为类型添加特化与基于模板子类化的现有细化形式完全正交,例如无法清晰表达 std::basic_string 的重载应如何表现,需要
超级会员免费看
订阅专栏 解锁全文
41

被折叠的 条评论
为什么被折叠?



