#channel #arena #arena-allocator #companion #macro #proc #bookcase

已下架 bookcase_macros

为书架提供的伴随过程宏crate

1.0.0 2022年12月5日

#34 in #companion

MIT/Apache

8KB

📚 书架 - 一个区域分配器

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

🕐 项目状态

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

📖 术语表

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

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

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

🎯 目标

  • 线程安全
  • 安全接口
  • 易用性
  • 快速
  • 精简
  • 可配置
  • 数据结构构建块
  • 最小依赖
  • 文档化

🚫 让步

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

🚀 进展

按大致优先级顺序

  • CI
  • CD
  • 线程局部笔记本
  • 线程安全笔记本(《code>SendSync
  • 增量分配
  • 释放分配
  • 在稳定Rust上编译
  • 发布第一个稳定版本
  • 类型化笔记本(《code>MonoNotebook
  • 非类型化笔记本(《code>MultiNotebook
  • 所有分配都是对齐的
  • MultiNotebookAllocator(需要nightly版本)
  • 可配置页面基本大小
  • 可配置页面增长率
  • 非释放句柄(《code>allocalloc_zeroedalloc_init
  • 自动释放句柄(《code>new
  • 笔记本合并

🌳 版本控制

  1. 向后兼容性正在沉睡在海滩上波浪拍打的声音中。
  2. 假设 向后兼容性是在折磨小狗。

结论:SemVer 是 🐍🛢

不幸的是,Cargo 与 SemVer 紧密相连。幸运的是,SemVer 具有版本号。这意味着我可以创建自己的 SemVer 版本!😈 可以叫它 SemVer Maggie.1.0。以下是它的工作原理

铁的规则

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

格言

努力将破坏性更改减少到最低限度。

发布通道

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

稳定

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

测试版

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

实验

此通道是狂野西部,所有赌注都无效。

格式: stable.beta.experimental

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

示例

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

但是我喜欢 bookcase = "^1"

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

... Maggie?

Maggie 是我的宠物 🐷。一开始她很差劲,但最终你会喜欢她的。

例外

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

贡献

我创建了一个 discord 通道。截至本文写作时,它只有我一个人。阅读目标、让步和进展部分以获取要工作的想法,并与我讨论如何进行我可能会接受的更改。你也可以只是给我反馈,告诉我我的代码很糟糕,或者我太激进。所有反馈都受欢迎!

无运行时依赖