弃用是否有害?[关闭]


27

我一直-std=c++0x在用GCC中的标志编译自己的代码,因为我想隐约地跟上所有年轻人的行为(前提是他们留在草坪上),最后我得到了很多警告关于auto_ptr被弃用 当然,我知道auto_ptr在C ++ 0x 中已弃用,但是...

弃用不是浪费时间和精力吗?不弃用的原因(以auto_ptr为例):

  • 仍然有大量代码需要得到支持,产生数百万条警告只会诱使人们关闭警告。

  • auto_ptr 是个小问题,但实际上确实可以做到。

  • 如果我们真的想弃用东西,我提名printf()。但是,请想象将会发生的尖叫声。auto_ptr没有太多的朋友,但是至少在我的C ++代码中,它的使用量大于printf,根本没有使用。

  • 该委员会对此有不好的记录-他们在名称空间范围内弃用了static,现在似乎已经弃用了-如果auto_ptr做出类似的复出,我不会感到惊讶

  • 最后,无论委员会怎么说,编译器实施者都不会理ignore它们-他们根本不能冒险破坏客户代码,他们所能做的就是发出令人讨厌的警告。

所以我的问题是-您是否认为弃用(任何东西,不仅是auto_ptrs,而且不只是C ++)是个好主意,如果可以,为什么?


2
@TheLQ-我将其理解为“为什么要贬值”,但仅auto_ptr作为示例。
克里斯·

4
它在锡罐上说“如果用在几乎任何种类的容器中都会伤心”吗?使用unique_ptr并变得更快乐。
凯特·格雷戈里

13
@Neil-您的语言有点发人深省,并且(反省)它确实比一个严肃的问题更棘手。如果您希望它保持打开状态,则可能需要“将其调低”。
克里斯·

4
@Neil-我很高兴您原本希望它幽默,但是正如我说的那样,经过反思,它比我想像的要更为“保证”。
克里斯·

10
如果您打算放弃弃用,则应首先真正弃用。否则,许多现有的语言/ API将会中断。使用过时折旧,您可以给他们一些时间来摆脱他们过时的折旧。
Joachim Sauer

Answers:


32

弃用的原因(通常):

  • 它清楚地向人们表明某事是不好的做法(并希望提出其他选择)。
  • 弃用期使人们有机会在编译器将其彻底删除之前更改其代码。

我也不同意最后一点。编译器不会忽略委员会,他们最终会删除不推荐使用的内容(例如>?=<?=在GCC中,先不要使用然后删除*)。

我认为重要的一点是:出于各种原因,应该删除某些内容,并且我认为弃用是唯一可行的方法。在这种情况下,auto_ptr应将其删除,因为它已被取代unique_ptr。切换非常容易,人们将有足够的时间这样做。

(*)是的,我知道它们是扩展而不是标准的,但重点是,编译器供应商一旦进入弃用状态,便最终会删除它们,无论代码是否仍然依赖它们。


6
对不起,我无法抗拒:这些>?=<?=运算符是什么?
brandizzi 2011年

7
在旧版GCC中,您可以编写a >?= b;简写形式if (a > b) a = b;,也可以简写为<?=
彼得·亚历山大

2
gh ...我明白他们为什么要添加它。然后为什么要删除它。对于仅显示它们公开发布后的问题的“整洁”功能,可能需要弃用。
菲尔(Phil)2013年

25

任何足够复杂的API都有可能存在一些缺陷,直到使用了一段时间后才发现。我们的选择:

  • 保持原样。这意味着随着时间的推移,API将继续收集越来越多的废纸ft。即使添加了新版本和改进版本,旧版本也需要维护。
  • 无需警告即可将其删除。这可能会破坏很多代码。
  • 弃用并在更高版本中将其删除。这样就可以花时间修复现有代码,同时确保数量不多。

折旧是这些替代方案中最合理的一种。


12

没事 弃用可能是一件好事。它可以防止技术陷入旧的无用行李中。

只是在C ++领域,我记得Microsoft的“功能”不正确支持for语句中的变量声明。这种情况持续了大约十年,并使许多代码不可移植。这是我很高兴被弃用的一个“功能”。

更普遍地说,自80年代以来,苹果就习惯了将笨拙的旧API标记为“已弃用”达5-7年,然后才将其废弃。我只是在与WWDC的Apple工程师讨论过不赞成使用某些古老的QuickTime C API时,我真的很高兴听到他们这样做,因为对1990年左右开发的模型的持续支持完全阻碍了人们期望的在现代64位多核CPU上运行。

在实践中,编译器编写者需要很长时间转储auto_ptr,并且他们可能会支持某种向后兼容模式达一,二十年,但是imo是一件好事。


11

如果我们真的想弃用东西,我提名printf()

printf是有用的功能。它允许格式化事物的方式比iostream短。这是一个C函数。C ++存在并被使用的根本原因是因为它与C兼容。因此,弃用printf似乎没什么用处。

那么,还有其他人反对反折旧改革吗?

委员会知道当前废弃的假定含义存在的一些问题。请参见弃用的含义


5

语言和API必须向前发展。即使可能有大量的代码取决于某些旧功能,也可能有一种新的更好的方法来执行某些操作,并且支持旧功能的成本实在太大了。

弃用还警告您将来会删除该功能。如果开发人员可以跟上新的API,这将使他们有时间更新其代码。这比替代方案要好得多:彻底清除。请记住,折旧只是警告,而不是错误。

而且,如果这是您不想更新的旧程序,那么没有什么可以阻止您使用旧API(或本例中的编译器)。


1

就目前而言,弃用至少具有两个含义。

  • 它将在将来的版本中删除
  • 我们创建了更好的替代方案,现在该功能是多余的(但并非完全没有用)。新手最好在学习语言时跳过此步骤。但是,它不会很快被删除。

我认为static属于后一类,但是只有时间才能证明auto_ptr是否确实值得删除,或者最好将其保留在语言中。


0

如果可以在1个工作日内完成替代方案的弃用,则无害。使用新功能轻松搜索/替换旧功能,或轻松设置兼容层。

如果由于弃用而需要重写软件的大部分内容,那么这是有害的。

一个很好的例子可能是PHP的mysql API,基本上,您只需要用mysqli_ *替换所有mysql_ *并提供指向它们的链接ID即可。

一个不好的例子是从OpenGL中弃用和删除glBegin,glEnd和所有矩阵计算的东西,如果您想让代码在OpenGL3或更高版本上工作,则需要重写整个渲染代码以使用顶点缓冲区。


-1

我认为这是让人们知道更好的方法的好方法。我更喜欢一个不错的弃用,而不是一个功能刚刚消失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.