我正在寻找一种方法将正式的公共API引入程序(PostgreSQL),该程序目前在扩展可访问接口和仅供内部使用的接口之间缺少任何正式边界。
它有一些标题表示它们仅供内部使用,并且它使用了很多静态,但仍然有很多扩展可以达到......但不应该。这使得甚至在补丁版本中提供二进制兼容性保证是不切实际的。目前的做法归结为“它应该有效,但我们不承诺任何事情”,这并不理想。
这是一个很大的软件,由于在核心代码库之外有如此活跃的扩展社区,所以一次引入硬边界并不实际。但是我们需要一种方法来告诉人们“这个界面是私密的,不要使用它或说出来,并要求它在需要时宣布为公开并且可以证明它是合理的。”
可移植。
到目前为止,我能够提出的是add macros around gcc's __attribute__ ((deprecated))
and MSVC's __declspec(deprecated)
在构建核心服务器时是空的,但在构建扩展时通常是定义的。这可行,但“弃用”不太正确,更多的是“使用非公共内部API”。
有没有比使用弃用注释更好的方法?我非常希望能够使用它们来弃用内核中的功能,因为随着服务器的增长,总是在一次扫描中改变所有内容变得不切实际。