许多包含过程宏的库由两个 crate 组成:一个proc-macro
实现实际宏的 crate 和一个重新导出或包装 proc 宏的普通“main” crate。这样做是因为proc-macro
crates 不能公开导出除 proc 宏以外的任何内容。假设主 crate 被调用foo
,宏 crate 通常被称为foo-derive
or foo-macros
。
这带来了几个关于如何对proc-macro
crate 进行版本控制的问题。当然,main crate 遵循语义版本控制。但是宏箱也应该跟随它吗?我不希望人们直接使用宏板条箱,而只能通过主板条箱。我在 proc-macro crate 的描述中明确说明了这一点。我想将宏箱视为实现细节。
在那种情况下,我可以不需要遵循语义版本控制,对吗?然后,主 crate 将只需要一个确切的版本,通过foo-macro = "=0.0.4"
.
这样好吗?或者这种方法可以打破什么?社区中是否有一些既定的最佳实践?