2个稳定版本

2.0.0 2022年12月9日
1.0.0 2022年12月5日

#30#companion


bookcase_alloc 中使用

MIT/Apache

9KB

📚 Bookcase - 一个区域分配器

我想学习区域,所以我实现了自己的。然后我发现现有的区域crate不符合我的要求。

🕐 项目状态

实验性,除非你是 🤡,否则不要使用。

📖 术语表

  • 人:线程
  • 笔记本:区域
  • 章节:一组常用对齐页面
  • 页面:固定大小的原始字节数据缓冲区
  • 工具:分配实现

笔记本一开始是空的。一个人可以写入笔记本。根据他们使用铅笔还是钢笔,他们可能无法擦除笔记。一个人可以将笔记本传给另一个人。任何一个人都可以在笔记本上写,但一次只能一个人。任何时候都可以有任意数量的人同时从笔记本中读取。

这个类比并不完美,但比'区域'能提供的要好得多! 😁

🎯 目标

  • 线程安全
  • 安全接口
  • 人体工程学
  • 快速
  • 精简
  • 可配置
  • 数据结构构建块
  • 无外部依赖
  • 有文档记录

🚫 让步

  • 不安全的实现细节
  • 查找范围外(这不是一个ECS库)

🚀 进展

按粗略优先级顺序

  • CI
  • CD
  • 无依赖
  • 有良好的文档记录
  • 线程局部笔记本 (Personal*Notebook: Send)
  • 线程安全笔记本 (Public*Notebook: Send + Sync,非常不安全)
  • 增量分配 (Pen)
  • 释放
  • 在稳定的Rust上编译
  • 发布第一个实验版本
  • 发布第一个beta版本
  • 发布第一个稳定版本
  • 异构笔记本 (*MultiNotebook: Notebook)
  • 同质笔记本(*MonoNotebook<T>: TypedNotebook<T>
  • 所有分配均对齐
  • *MultiNotebook: Allocator(需要夜间版本)
  • 可配置页面基本大小(SizeStrategy
  • 可配置页面增长率(GrowthStrategy
  • 不丢弃独占引用(alloc*() -> &mut T
  • 自动释放句柄(new*() -> Handle<T>
  • 笔记本合并

🌳 版本控制

理念

  1. 向下兼容性正在被海滩上波浪拍打的声音哄睡。
  2. 假设向下兼容性正在折磨小狗。

结论:SemVer是 🐍🛢

后果

不幸的是,cargo与SemVer绑定。幸运的是,SemVer是版本化的。这意味着我可以创建自己的SemVer版本! 😈 称之为 SemVer Maggie.1.0。这是它的工作方式

铁律

假设所有版本都是破坏性的。

座右铭

努力将破坏性更改降至最低。

发布渠道

每个点分隔的数字代表一个发布渠道

稳定

此通道是唯一适合生产使用的。

测试版

此通道用于收集准备稳定化的成熟想法。

实验版

此通道是荒野西部,一切皆有可能,小丑行为是常态。

格式: stable.beta.experimental

  1. experimental > 0 时,版本在实验通道中,否则...
  2. beta > 0 时,版本在测试版通道中,否则...
  3. stable > 0 时,版本在稳定通道中,否则...
  4. 版本无效。

因此,所有稳定版本都是对“主要”版本的提升,这表明下游开发者应该考虑铁律,即使他们不熟悉 SemVer Maggie.1.0

示例

  • =1.0.0 - 稳定 v1
  • =1.2.0 - 测试版 v2 基于稳定 v1
  • =1.2.3 - 实验 v3 基于测试版 v2 基于稳定 v1
  • =2.0.1 - 基于v2的实验性v1
  • =0.0.0 - 无效

但我喜欢 bookcase_alloc = "^1"

然后习惯于编译器错误。发布渠道内的版本只有在启用其相应的功能时才能编译。默认功能当然是stable。启用多个也会编译失败。这是为了防止在生产用户代码中意外使用测试和实验渠道。

... 玛吉?

玛吉是我的宠物 🐷。她一开始很糟糕,但最终你会开始喜欢她的。

异常

bookcase_alloc_macros 本身需要强制执行SemVer Maggie.1.0的规则。因此,它将只有一个稳定发布渠道。

贡献

我创建了一个discord频道。截至本文写作时,频道内只有我一个人。阅读目标、妥协和进展部分,了解要做什么,并与我讨论如何进行我可能接受的变化。你也可以只是问我问题,给我反馈:功能请求,告诉我我的代码很糟糕或者我太有棱角了。所有反馈都受欢迎!

无运行时依赖