当我想检测IE时,我使用此代码:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
Run Code Online (Sandbox Code Playgroud)
但IE11正在返回"你没有使用Internet Explorer".我该如何检测它?
debugging internet-explorer browser-detection forward-compatibility internet-explorer-11
向后二进制兼容性(或向下兼容性) - 使用旧版本库API构建的客户端在新版本(wiki)上运行的能力.
向上二进制兼容性(或向前兼容性) - 使用新版本的库API构建的客户端在旧版本(wiki)上运行的能力.
关于自1.4.2以来J2SE 5.0中 JDK 不兼容性的一般Sun文档(以及Java SE 6与J2SE 5.0的兼容性)描述了JDK的兼容性,如下所示:
除了下面列出的不兼容性之外,JDK 5.0 与Java 2 SDK v1.4.2 向上二进制兼容.这意味着,除了指出的不兼容性之外,使用1.4.2版编译器构建的类文件将在JDK 5.0中正确运行.
我认为文档编写者在这句话中混淆了 "向上"和"向后"兼容性术语.它们描述了"向后"兼容性,但将此功能称为"向上"兼容性.
这是一个错字,错误或预期的术语吗?JDK"向上"还是"向后"兼容?
java backwards-compatibility binary-compatibility forward-compatibility
通常情况下,Java源代码已向前兼容.在Java 8之前,据我所知,编译类和源代码都已经与后来的JDK/JVM版本向前兼容.[更新:这是不正确的,请参阅下面的注释'en en'等.]但是,在Java 8中添加了默认方法后,似乎不再是这种情况.
例如,我一直使用的库的实现java.util.List包括一个List<V> sort().此方法返回已排序的列表内容的副本.这个库作为jar文件依赖项部署,在使用JDK 1.8构建的项目中运行良好.
但是,后来我有机会使用JDK 1.8重新编译库本身,我发现库不再编译: - List使用自己的sort()方法实现的类现在与Java 8 java.util.List.sort()默认方法冲突.Java 8 sort()默认方法对列表进行排序(返回void); 我的库的sort()方法 - 因为它返回一个新的排序列表 - 具有不兼容的签名.
所以我的基本问题是:
也:
以下是在1.7下编译和运行并在1.8下运行的一些代码示例 - 但不在1.8下编译:
import java.util.*;
public final class Sort8 {
public static void main(String[] args) {
SortableList<String> l = new SortableList<String>(Arrays.asList(args));
System.out.println("unsorted: "+l);
SortableList<String> s = l.sort(Collections.reverseOrder());
System.out.println("sorted : "+s);
}
public static class SortableList<V> extends ArrayList<V> { …Run Code Online (Sandbox Code Playgroud) 这是一个问题分为两个部分,第一部分是现在最重要的问题:
第二部分是关于新标准一旦成为最终的后续行动:
编辑:原来真是太争论了; 但是,我仍然对基本问题感兴趣,所以我试图将其清理干净,希望能让它接受.这似乎是一个比复制更好的途径 - 即使一些答案回应了议论语,他们仍然适用于他们解决问题的程度,并且所有答案都是适当的社区财产.
我们将使用C++作为编程语言开始一个持久的项目.
我读到C++ 0x将在2011年问世,所以他们称之为C++ 11.
当C++ 11出现时,我们仍然会开发该项目,并且想知道现在是否可以使用新C++标准的任何功能,以便能够:
我在windows上有nodejs的基本webserver hello world app,它可以在localhost上运行.但是,当我从互联网上测试时,它无法连接.我在netgear路由器中设置端口转发.我错过了一步让我的nodejs服务器对外界可见吗?
谢谢.
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
Run Code Online (Sandbox Code Playgroud) 我正在研究一些想要引入 Python 3.6 以便在以 3.5 为标准的环境中使用的软件。阅读Python的文档我找不到任何关于是否:
事实上,这个关于移植到 3.7 的页面的存在让我强烈认为不,但我看不到关于版本号含义的官方文档(如果有的话,ala Linux 内核版本控制)
从更一般的意义上来说 - 3.X 版本流中是否存在围绕兼容性标准的 PEP?
python backwards-compatibility forward-compatibility python-3.x
或多或少的标题暗示.虽然我还没有使用C++ 0x,但是我想在它发生时做好准备,而且我还想减少我必须重写的代码量才能使用它的一些功能.这样我就可以一次性地向前和向后兼容.
我发现的最有趣的一个是nullptr,我最近经常使用它.
在检查了"官方解决方法"和Meyer的建议之后,我决定在我的C++和未来的C++ 0x程序中使用它.第二部分很简单 - 作为关键字,nullptr只需支持.但第一部分让我感到有些不适.
Meyers提案的功能如下:
class nullptr_t { // ? this is my issue
// definition of nullptr_t
} nullptr = { };
Run Code Online (Sandbox Code Playgroud)
该提议的问题在于它声明了要声明为std::nullptr_tC++ 0x所需的类型.这意味着对于"感觉原生"的解决方法,必须通过重新打开std::命名空间来添加类型.我理解在C++程序中这是非法的(不像添加特殊化,这显然是皱眉和放开警告).
我想用nullptr在舒适和在C++程序合法的方式.我想到的一个选项是在另一个命名空间中声明类型然后使用它using:
namespace mylibrary {
class nullptr_t {
....
} nullptr = { };
// end namespace
}
// These would have to go in the header file.
using mylibrary::nullptr;
using …Run Code Online (Sandbox Code Playgroud) 想象一下你10年前写的这篇文章(在英特尔MPX和bnd0.. bnd3注册表甚至在路线图上之前):
section .data
; define some globals which are part of an ABI so you can't just rename them
global bnd0 ; MPX bound register name conflict
bnd0: dd 123
global k0 ; AVX512 mask register name conflict
k0: dq 12345
Run Code Online (Sandbox Code Playgroud)
如何使用当前版本的NASM进行组装? 即NASM(或YASM)是否与支持新注册名称的新版本具有向前兼容性?
显然,在单个文件或项目中搜索/替换很容易解决.但理论上,您可以将全局变量名称作为库ABI的一部分,您可以从NASM导出或需要导入到NASM中extern ymm0.(必须声明外部符号,因此无法识别的寄存器名称永远不会汇编为符号引用.)
NASM语法已经不适合作为平台上C编译器输出的格式,这些平台不会为符号名称添加前缀_或执行其他类型的名称修改(例如Linux ELF).你无法编译全局int eax = 1;. 这就是AT&T语法%eax用于寄存器名称的原因.对该答案的评论中的讨论是启发这个问题的原因.请注意,GAS不需要声明外部符号; 无法识别的名称被视为符号(即使在.intel_syntax noprefix使用类似于MASM的语法的模式中).
相关:MASM如何处理新扩展的前向源兼容性?
你能以某种方式禁用MPX支持吗?
YASM支持一个CPU指令,允许您禁用对某些助记符的支持,但即使禁用AVX支持也不允许您将其ymm0用作符号名称.(YASM …
Google正在弃用Google Cloud消息,转而使用Firebase云消息传递:
Firebase云消息传递(FCM)是GCM的新版本.它继承了可靠且可扩展的GCM基础架构以及新功能!请参阅常见问题以了解更多信息 如果要在新应用程序中集成消息传递,请从FCM开始.强烈建议GCM用户升级到FCM,以便从当前和未来的新FCM功能中受益.
根据我在服务器上进行的一些测试,FCM URL(https://fcm.googleapis.com/fcm/send)适用于GCM项目,反之亦然 - GCM URL(https://android.googleapis.com)/gcm/send)适用于FCM项目.
将所有现有GCM推送发送代码迁移到FCM将节省大量麻烦和重构(对于每次推送,我都不必检查应用程序版本是FCM还是GCM).
这种向后和向前兼容性是否得到官方支持或记录?
backwards-compatibility forward-compatibility google-cloud-messaging firebase-cloud-messaging