#change #row #classification #ringing #idiomatic #place #notation

bellframe

快速且符合 Rust 风格的变奏敲钟基本工具

29 个版本

0.13.2 2024年2月24日
0.13.1 2023年10月20日
0.12.0 2023年9月9日
0.11.5 2023年1月4日
0.3.0-alpha.12021年7月15日

#375Rust 模式


2 crates 中使用

MIT 许可证

300KB
5K SLoC

BellFrame

BellFrame 是一个用于变奏敲钟的标准库。

换句话说,BellFrame 的目标是提供高质量且符合 Rust 风格的基本实现,这些实现是变奏敲钟所必需的(例如,借用/所有行的类型,位置符号解析,方法分类,访问 CC 方法库等)。这些可以跨项目共享,以加快开发速度并减少错误。

BellFrame 的两个基本目标是 可靠性性能按照这个顺序。可靠性意味着 BellFrame 的行为始终是明确定义的,并且永远不会因不合理的输入而导致未定义行为。性能意味着,具体来说,BellFrame 的代码不应成为项目的限制因素。然而,可靠性比无与伦比的性能更重要;我不会在没有至少知道一个操作是瓶颈之前编写复杂的优化代码。简单的代码更容易维护。

内容

核心数据类型

  • TruthParityStroke:类型安全的版本,使用类型系统来防止它们被混淆。
  • StageBell:类型安全的表示,再次为了避免常见的错误,例如将高音称为 1(对人类有用)或 0(用于索引数组)。
  • RowRowBuf:借用和所有行的类型(分别)。从概念上讲,Row 类似于 [Bell],而 RowBuf 类似于 Vec<Bell>,除了它们都保证包含有效的排列。

方法

  • MethodCall:方法处理和分类代码。分类算法与框架完全兼容(在实现它时,我发现 CompLib 的分类器中存在错误,现在已经修复)。
  • MethodLib:访问方法库,使用MethodLib::cc_lib()加载中央委员会的库的最新副本。支持在库中进行搜索,并且对于未成功的搜索返回建议的方法名。

块操作

  • SameStageVecBlock:在单个连续的内存块中存储Row序列的方法(从而允许巨大的缓存效率和优化潜力)。SameStageVec只是具有相同StageRow序列;Block允许其Row具有任何类型的注释。

其他有用类型

  • Mask:类似于RowBuf,除了钟声可能缺失(用x表示)。例如,1xxx5678是一个Mask,其中2、3、4可以以任何顺序出现。
  • Pattern:表示音乐模式的默认方式——类似于Mask,除了*匹配任意数量的钟声。例如,*x7x8x*是一个Pattern

依赖关系

~2–17MB
~190K SLoC