【发布时间】: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