【问题标题】:Technical considerations in dropping support for old compiler versions?放弃对旧编译器版本的支持的技术考虑?
【发布时间】:2010-12-03 18:15:08
【问题描述】:

我从事一个以源代码和二进制形式免费分发的项目,因为我们的许多用户需要专门为他们的系统编译它。这需要一定程度的考虑来保持与旧主机系统的向后兼容性,主要是它们的编译器。

其中一些最笨拙的,例如 GCC 3.2 (2003!)、ICC 9、MSVC(几乎是废弃软件,而不是 C++!)和 Sun 的编译器(在我们仍然关心的一些旧版本中)缺乏对语言的支持使开发更容易的功能。当然,在某些情况下,让用户坚持使用这些编译器会降低很多性能,这与我们提供的目标背道而驰。

那么,我们在什么时候说足够了?我可以看到几个停止支持特定编译器的论点:

  • 生成代码性能不佳(相对于较新版本,询问here
  • 缺乏对语言功能的支持
  • 开发系统的可用性较差(专有系统比 GCC 更重要,但使用旧 GCC 也存在系统管理员问题)
  • 可能存在未修复的错误(我们已在 ICC 和 xlC 中隔离了 ICE,还有什么可能潜伏着?)

我确定我错过了其他一些,我不知道如何衡量它们。那么,我错过了哪些论点?还需要考虑哪些其他技术因素?

注意:这个问题之前的措辞更为广泛,导致许多受访者指出,决策从根本上说是一个业务流程,而不是工程流程。我知道“业务”方面的考虑,但这不是我在这里寻找的更多内容。我想听听那些不得不支持旧编译器或选择放弃它们的人的经验,以及这对他们的开发有何影响。

【问题讨论】:

  • 在我看来这是一个商业决策(不仅仅是技术决策);但我不知道你为什么和/或不向客户提供软件,我不知道为什么有些客户想要使用旧的编译器,我不知道数字是多少(即有多少客户和/或客户的比例)。
  • 看,我们是大学研究实验室。我们的客户不付钱给我们,他们在论文中引用我们。因此,“业务考虑”是我们是否可以通过减轻支持负担来更快地获得更好的结果,以及其他群体对我们软件的使用是否会因更快的开发而得到帮助,或者会因限制他们的工具选择而受到阻碍。
  • 我们面临的问题是 MSVC 是一个古老的 C 编译器 - 它不支持有用的 C99 功能(例如指定的初始化程序)。很难决定放弃它 - 可悲的是。
  • @Jonathan:这是我们必须忍受的,但实际上问题不大。我们 99% 的代码是 C++,只有 C 中的一些可移植层位。我们可能可以减少这些的传播。让 // cmets 在任何地方都可以工作会很好——当我们把它搞砸时,在 Windows 上每天构建中断很烦人。

标签: backwards-compatibility compiler-version


【解决方案1】:

我不认为旧编译器技术的功效特别重要。这是一个商业决策,真正归结为您是想留住客户还是失去他们。客户不处理技术,他们处理业务和业务决策。

理想情况下,您希望定义某种基于您有多少客户的指标 有,针对他们使用的不同编译器版本,针对成本 维护每种编译器类型的特定版本。

从根本上说,您确实需要小心何时以及如何告诉您的客户 基于您将淘汰部分产品集。你怎么告诉他们的。只是 把它放在他们的腿上。计划一下。

您需要一个内部批准的受控政策,然后开始推出它,也许会告诉 他们在用户组会议上,然后确保您有足够的时间(2 年是 好,允许客户完成当前的实施(1 年)加上一些时间, 在您开始实施并建立支持框架之前,以帮助客户 及时迁移。

您的计划方式将决定您的客户的反应。几年过去了,我在 软件公司,出售用于控制电网的非常复杂的高端产品。该产品的完整包装售价为 200 万英镑,每个客户都签了 25 年的支持合同。不知何故,我们决定使硬件合理化。我们曾经 在 AIX、Solaris、Tru64 和 HPUX 上提供它。但出于某种原因,我们决定将其合理化 在 AIX 上,我认为我们达成了协议。无论如何,其中一位客户是 Solaris 商店 对此感到非常沮丧,然后在接下来的 4 年里,我们再也没有听到他们的消息。 没有电话,打补丁,现场审核。没有。

我们决定改变它的原因,因为我们做了一个 6 sigma 项目,它表明我们 每年将节省约 1900 万英镑,购买合理化 AIX 和 NT 的基础设施。但在 最终,我们最终关闭了我们的一个主要客户,实际上摧毁了我们的用户群社区。

这个决定是仓促做出的,结果适得其反。所以我认为你最好的想法是计划它。

【讨论】:

    【解决方案2】:

    从概念上讲,您的问题与想知道何时应该停止支持 Internet Explorer 6 的 Web 开发人员相同。答案是您必须进行研究。

    1. 有多少人使用旧版编译器?
    2. 有多少人使用较新的?
    3. 有多少人愿意升级?
    4. 您将失去多少用户? (这可以从 1、2 和 3 的答案中计算出来)。
    5. 放弃对旧编译器的支持可以为您节省多少时间和工作量?

    基本上,您的决定归结为将答案与 4 和 5 进行比较。根据您的描述,这似乎是一个开源项目,但如果它是一项业务,您可以通过数字进行比较(如果损失的钱少于节省的钱) ,放弃支持)。如果不是生意,那就有点复杂了,因为你必须猜测人力成本,这可能有点棘手。

    【讨论】:

      【解决方案3】:

      嗯,解决这个问题的通常方法是先询问。我假设你有一个网页的邮件列表或其他东西来促进这一点。所以问问:如果我们放弃对任何这些编译器的支持,谁会受到影响,升级会有多困难。这样做之后,您就会知道继续支持这些编译器是否值得。

      最好为您决定放弃支持的每个编译器版本标记最后一个工作版本,以便真正关心的任何人都可以继续使用该旧版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-07
        • 2020-12-19
        • 2016-03-15
        • 1970-01-01
        • 2020-01-17
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        相关资源
        最近更新 更多