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.1 | 2021年7月15日 |
#375 在 Rust 模式
在 2 crates 中使用
300KB
5K SLoC
BellFrame
BellFrame 是一个用于变奏敲钟的标准库。
换句话说,BellFrame 的目标是提供高质量且符合 Rust 风格的基本实现,这些实现是变奏敲钟所必需的(例如,借用/所有行的类型,位置符号解析,方法分类,访问 CC 方法库等)。这些可以跨项目共享,以加快开发速度并减少错误。
BellFrame 的两个基本目标是 可靠性 和 性能,按照这个顺序。可靠性意味着 BellFrame 的行为始终是明确定义的,并且永远不会因不合理的输入而导致未定义行为。性能意味着,具体来说,BellFrame 的代码不应成为项目的限制因素。然而,可靠性比无与伦比的性能更重要;我不会在没有至少知道一个操作是瓶颈之前编写复杂的优化代码。简单的代码更容易维护。
内容
核心数据类型
Truth
,Parity
,Stroke
:类型安全的版本,使用类型系统来防止它们被混淆。Stage
,Bell
:类型安全的表示,再次为了避免常见的错误,例如将高音称为1
(对人类有用)或0
(用于索引数组)。Row
,RowBuf
:借用和所有行的类型(分别)。从概念上讲,Row
类似于[Bell]
,而RowBuf
类似于Vec<Bell>
,除了它们都保证包含有效的排列。
方法
Method
,Call
:方法处理和分类代码。分类算法与框架完全兼容(在实现它时,我发现 CompLib 的分类器中存在错误,现在已经修复)。MethodLib
:访问方法库,使用MethodLib::cc_lib()
加载中央委员会的库的最新副本。支持在库中进行搜索,并且对于未成功的搜索返回建议的方法名。
块操作
SameStageVec
,Block
:在单个连续的内存块中存储Row
序列的方法(从而允许巨大的缓存效率和优化潜力)。SameStageVec
只是具有相同Stage
的Row
序列;Block
允许其Row
具有任何类型的注释。
其他有用类型
Mask
:类似于RowBuf
,除了钟声可能缺失(用x
表示)。例如,1xxx5678
是一个Mask
,其中2、3、4可以以任何顺序出现。Pattern
:表示音乐模式的默认方式——类似于Mask
,除了*
匹配任意数量的钟声。例如,*x7x8x*
是一个Pattern
。
依赖关系
~2–17MB
~190K SLoC