问题标签 [backwards-compatibility]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 6 源代码向后兼容和 SQL
我的理解是,为了保持源代码兼容性,Java 从不向公共接口引入新方法,因为这会破坏实现接口的现有客户端。 Java 发行说明状态
一般来说,该政策如下,除了下面进一步列出的任何不兼容性:
维护版本(例如 1.4.1、1.4.2)不引入任何新的语言功能或 API。它们将保持彼此的源兼容性。
功能版本和主要版本(例如 1.3.0、1.4.0、5.0)保持向上但不向下的源兼容性。
然而,这些包java.sql
并javax.sql
继续发展并引入了许多不兼容的变化。例如,我注意到以下不兼容的更改(在 Java 6 中引入):
java.sql.Statement
extendsjava.sql.Wrapper
,需要新的两个新方法。java.sql.Statement
引入 3 种新方法java.sql.PreparedStatement
介绍19种新方法!java.sql.ResultSet
介绍48种新方法!
你知道这些方法是如何以及为什么被添加的吗?是否java.sql
受到与平台其他部分不同的对待?你知道围绕这些添加的讨论/JSR 吗?
iphone - 保持向后兼容 iPhone OS 2.2.1
我目前在 App Store 上有一个使用 2.2.1 版本构建的应用,即 Base SDK 和 Deployment Target 都设置为 2.2.1。该应用程序运行良好。从那时起,我已将我的 XCode 版本升级到 3.1.3,并且我正在对我的应用程序进行更新,其中 Base SDK 设置为 3.0,部署目标设置为 2.2.1。这在我运行 OS 3.0 的测试 iPhone 设备上运行良好。问题是我没有在 2.2.1 上测试的设备,所以我使用模拟器,并且某些 UI 元素(主要是图像)在我当前的构建中没有显示。奇怪的是,当我在模拟器上使用当前版本的 XCode 测试已经在 App Store 上的旧版本应用程序时,我遇到了同样的 UI 消失问题。同一个版本怎么会有不同的结果?XCode 有什么变化吗?什么'
谢谢!
api - API 设计:添加新的异常类型——安全吗?
我需要更改现有的服务 API 来为场景引发额外的异常。该异常将是已抛出异常的子类型。这样做可以吗,还是会被视为向后不兼容?
我的接口在一个单独的 jar 中,所以如果我的服务抛出这个新异常,它是已经抛出的一个子异常并且客户端没有新 jar,它会破坏客户端还是他仍然能够捕获像以前一样的父异常?
问题是我们有一个非常通用的异常,每个异常情况都会抛出,一些客户端想要更好的方法来识别异常 - 除了解析异常中的消息,但如果我们引入新异常,并非所有客户端都可以升级接口- 如何最好地处理这种情况?
谢谢阿文德
git - Git 存储库向后兼容性
我刚刚问了一个关于 git 的简单问题——git 存储库的向后兼容性如何?例如,我使用 git 1.6.4 和 svn2git ruby 脚本创建了一个存储库,但我想把它放在运行 Debian Lenny 的机器上,它有 git 1.5.6.5。我仍然能够正确地与存储库交互吗?
mysql - MySQL 连接器/网络是否向后兼容?
如果我有 MySQL 服务器 5.1,我可以使用 5.1 及更高版本的所有连接器吗?:
- 连接器/网络 6.1
- 连接器/网络 6.0
- 连接器/网络 5.2
- 连接器/网络 5.1
点击http://dev.mysql.com/downloads/connector/net/默认为 6.0...
internet-explorer-8 - 检测 IE8 兼容模式
可能重复:
区分IE7浏览器和IE7兼容模式下的浏览器
我们还没有时间用我们相当广泛的系统全面测试 IE8。我们也达到了不能禁止使用 IE8 的程度。我们的用户很固执,也不是很老练,所以我们觉得我们不能告诉他们使用“兼容模式”按钮。相反,我们将添加“IE=EmulateIE7”元标记作为临时修复。
问题是当使用这个标签时,浏览器仍然报告自己是IE8,然后被我们的页面检测到并被拒绝。我可以理解为什么服务器端检测无法获取元标记(在发送和处理元标记之前,服务器已经拥有用户代理),但客户端检查也失败了。如果在客户端计算机上单击兼容模式按钮,则用户代理是 IE7,但如果我们使用元标记,则不是。
这意味着,除其他外,我们必须禁用检查,然后,如果我们在某处犯了错误而忘记将元标记添加到页面,我们将有损坏的页面。
有没有其他人遇到过这种情况并提出更好的方法?当模式由元标记设置时,是否无法检测到 IE8 正在以兼容模式运行?
而且,我们确实知道有一个有效的思想流派,我们应该让所有页面与 IE8 标准模式兼容,但在我们现实的小角落里,这现在不是一个可行的选择(我会指出我们没有创建必须以非标准方式编写的 4 或 5 个版本的 IE)。
python - 哈希库/md5. 与 python 2.4 的兼容性
python 2.6 报告 md5 模块已过时,应使用 hashlib。如果我import md5
改为import hashlib
我将解决 python 2.5 和 python 2.6,但不是 python 2.4,它没有 hashlib 模块(导致 ImportError,我可以捕获)。
现在,要修复它,我可以做一个 try/catch,并定义一个 getMd5() 函数,以便根据 try 块的结果定义一个正确的函数。这个解决方案好吗?
在更一般的情况下,您将如何解决此问题,例如:您有两个具有相同目标但界面不同的不同库,并且您想使用一个,但如果第一个不是,则退回并使用另一个成立。
iphone - 如何在 iphone os 2.0 以及 3.0 及更高版本的操作系统中运行我的 iphone 2.0 应用程序
我有 iphone 操作系统版本。2.0 我读到对于应用商店,所有应用程序都必须运行 3.0 os。所以我怎样才能让我的应用程序在两个固件中运行。有没有办法我可以检测 os ver.>3.0 然后运行不同的语句或者运行更低的语句超过 3.0 操作系统。目前我正在使用这个。
它会在两个固件上运行吗
我想让我的应用程序在 >=3.0 操作系统上运行并且低于这个...请帮助我
如何检查我的应用程序是否有弃用的方法...我只能将此行视为弃用 cell.text=cellValue;
有什么要改变的吗?我已经安装了名为 iphone_sdk_3.0__leopard__9m2736__final.dmg 的新 sdk
backwards-compatibility - 放弃对旧编译器版本的支持的技术考虑?
我从事一个以源代码和二进制形式免费分发的项目,因为我们的许多用户需要专门为他们的系统编译它。这需要一定程度的考虑来保持与旧主机系统的向后兼容性,主要是它们的编译器。
其中一些最笨拙的,例如 GCC 3.2(2003!)、ICC 9、MSVC(几乎是废弃软件,而不是 C++!)和 Sun 的编译器(在我们仍然关心的一些旧版本中)缺乏对语言特性的支持,使开发更容易。在某些情况下,让用户坚持使用这些编译器会降低很多性能,这与我们提供的目标背道而驰。
那么,在什么时候我们说足够了?我可以看到几个停止支持特定编译器的参数:
- 生成代码的性能不佳(相对于较新的版本,在此处询问)
- 缺乏对语言功能的支持
- 开发系统的可用性差(专有的比 GCC 更多,但旧的 GCC 也存在系统管理员问题)
- 未修复错误的可能性(我们在 ICC 和 xlC 中隔离了 ICE,还有什么可能潜伏着?)
我确定我错过了其他一些,我不知道如何衡量它们。那么,我错过了哪些论点?还有哪些其他技术考虑因素起作用?
注意:这个问题之前的措辞更广泛,导致许多受访者指出决策从根本上说是一个业务流程,而不是一个工程流程。我知道“业务”方面的考虑,但这不是我在这里寻找的更多内容。我想听听那些不得不支持旧编译器或选择放弃它们的人的经验,以及这对他们的开发有何影响。
versioning - 当您破坏向后兼容性时,提供明确的版本号
我已经在我的开源项目上工作了大约 6 个月,我想尽快正式发布它。问题是,我很确定在不久的将来我会想要改变我的项目,以破坏向后兼容性的方式,可能会多次。(我的代码是一个框架,人们必须在其中根据某个 API 构建代码。)
将这个项目标记为处于向后兼容性可能很快被破坏的状态的好方法是什么?
我看到一些项目,如 Python 和 Django,有一个规则,即在共享相同“大版本号”的版本之间保持向后兼容性。(即立即离开点的数字。)
我一直在考虑采用这条规则,但是如果下周我发布 0.1 版,那会有点奇怪,然后我无法打破向后兼容性,直到发布 1 版。
有任何想法吗?