对于ML风格的编程语言,如何确定给定模式是否"良好",特别是它是否详尽且不重叠?
假设您有以下模式:
match lst with
x :: y :: [] -> ...
[] -> ...
Run Code Online (Sandbox Code Playgroud)
要么:
match lst with
x :: xs -> ...
x :: [] -> ...
[] -> ...
Run Code Online (Sandbox Code Playgroud)
一个好的类型检查器会警告第一个不是详尽的,第二个是重叠的.对于任意数据类型,类型检查器如何做出一般性的决策?
以下代码是怎么回事?
#include <cmath>
int
main(int argc, char *argv[])
{
}
Run Code Online (Sandbox Code Playgroud)
在最近的带有GCC 6.1.1的Arch Linux安装中编译时,-isystem /usr/include
它会生成以下标志:
$ g++ -isystem /usr/include math.cc
In file included from math.cc:1:0:
/usr/include/c++/6.1.1/cmath:45:23: fatal error: math.h: No such file or directory
#include_next <math.h>
^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
这是一个非常简化的示例;原始命令行为:
$ g++ ... -isystem `llvm-config -includedir` ...
Run Code Online (Sandbox Code Playgroud)
使用LLVM的程序的一部分。在Arch Linux上,LLVM软件包安装时带有其标头目录/usr/include
,该标头目录为llvm-config
。...包括了-Wextra
和-Wconversion
,它们在LLVM标头中引起警告。与-isystem
标志相反-I
,该标志通过将LLVM目录视为“系统头” 来防止警告。有关更多信息,请参见GNU C预处理程序文档。
但是,如果升级到GCC 6.1.1,则上述错误会显示在内部版本中。
我正在为Java Web应用程序构建一个Active Directory单点登录身份验证系统(使用SPNEGO/Kerberos),一切都可以正常使用Firefox或(据报道)Safari,但Internet Explorer会导致异常:
GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!)
Run Code Online (Sandbox Code Playgroud)
事实上,我认为IE在安装Windows补丁之前有效.