小编Max*_*axB的帖子

根据优化选项的不同行为

我找到了一个示例,其中输出根据优化设置而不同(-O3vs none),但即使使用-std=c++11 -Wall -pedantic选项,GCC 4.8.2也不会产生警告.

在这种特殊情况下,我假设"遗忘"的注释行中header.h是错误的,并与-O3,c<int>::get()被内联.

但是,有没有办法保护自己免受这些错误的影响 - 也许是编译器或链接器选项?

header.h:

#ifndef HEADER_H
#define HEADER_H

template<class T>
struct c
{
   int get() { return 0; }
};

// template<> int c<int>::get();

#endif
Run Code Online (Sandbox Code Playgroud)

imp.cpp:

#include "header.h"

template<> 
int c<int>::get()
{
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include <iostream>
#include "header.h"

int main()
{
    c<int> i;
    std::cout << i.get() << '\n'; // prints 0 with -O3, and 1 without
}
Run Code Online (Sandbox Code Playgroud)

建立:

c++ -std=c++11 -pedantic -Wall …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates c++11

3
推荐指数
1
解决办法
164
查看次数

如果你编写一个在.NET Core上运行的C#或F#程序,那么同样的字节码也会在.NET上运行(没有安装.NET Core)吗?

如果你编写一个在.NET Core上运行的C#或F#程序,那么同样的字节码也会在.NET上运行(没有安装.NET Core)吗?

我听说反射的工作方式不同,但我不清楚这些差异是否是API的一部分.

.net c# f# .net-core

3
推荐指数
1
解决办法
203
查看次数

最新的 Prolog 实现基准?

是否有任何最新的 Prolog 实现基准(带有结果)?

我在网站上找到了这个。令人惊讶的是,它显示了和 Aquarius之间的 20 倍差距。我怀疑这些结果已经很老了。这个差距还成立吗?就我个人而言,我还希望看到一些与启用发生检查的比较,因为它对性能有重大影响,并且某些编译器在优化它方面可能比其他编译器更好。

最近比较,我发现这个要求是是2X比SWI更快,YAP为4x比SWI快于一个特定的代码库。


编辑:

实际问题需要发生检查的特定情况

当然:在 Haskell、OCaml、Swift或定理证明器(例如this one)中进行类型推断。我还认为程序员有责任证明他的代码不需要发生检查。测试只能证明你确实需要它,而不是你不需要它

prolog swi-prolog gnu-prolog

3
推荐指数
1
解决办法
259
查看次数

如何rm -fr*可靠?

rm -fr *
Run Code Online (Sandbox Code Playgroud)

不会删除 .files

另一方面,

rm -fr * .*
Run Code Online (Sandbox Code Playgroud)

会删除太多!

有一种可靠的方法来递归删除Bash中目录的所有内容吗?

我能想到的一种方法是:

rm -fr $PWD
mkdir $PWD
cd $PWD
Run Code Online (Sandbox Code Playgroud)

这具有$PWD临时删除的副作用.

bash glob rm dotfiles

2
推荐指数
1
解决办法
386
查看次数

为什么在Haskell 0 ^ 0 == 1?

为什么在Haskell 0 ^ 0 == 1?为什么不0 ^ 0 == 0?或者也许应该提出一些错误......

*Main> 0^0
1
*Main> 0**0
1.0
Run Code Online (Sandbox Code Playgroud)

谢谢你提前

GHCi,版本7.10.3

haskell

2
推荐指数
1
解决办法
323
查看次数

Prolog 真的基于封闭世界假设吗?

封闭世界假设下

目前不知道是真的,是假的

Prolog 的语义通常被认为遵循封闭世界假设,例如,这里

Prolog 基于封闭世界假设 (CWA)——也就是说,如果一个命题不在事实数据库中并且不能从事实数据库中推导出来,那么它就不是真的。

但是,它的行为并不完全如此。在 CWA 下,我希望

?- a.
false.
Run Code Online (Sandbox Code Playgroud)

但相反,在 SWI-Prolog 中,我得到:

?- a.
ERROR: Undefined procedure: a/0 (DWIM could not correct goal)
Run Code Online (Sandbox Code Playgroud)

这是为什么?说 Prolog 基于 CWA 是错误的吗?

prolog

2
推荐指数
1
解决办法
321
查看次数

Curry 中的 N-ary 函数和 Prolog 中的 N+1-ary 关系有什么区别吗?

Curry与它的堂兄 Haskell 不同,它允许您为一个函数赋予多个值:

foo 1 2 = 3
foo 1 2 = 4
Run Code Online (Sandbox Code Playgroud)

它确实回溯(或其他一些搜索)来探索这种非确定性的影响。

这使它类似于 Prolog(特别是?Prolog由于类型系统和语法),您可以在其中声明

foo 1 2 3.
foo 1 2 4.
Run Code Online (Sandbox Code Playgroud)

在语义上,N 元Curry 函数和N+1 元Prolog 关系之间有什么区别吗?

functional-programming prolog logic-programming curry lambda-prolog

2
推荐指数
1
解决办法
84
查看次数

2
推荐指数
1
解决办法
145
查看次数

搜索和替换而不更改突出显示?

我使用键绑定来添加/删除给定行中的注释.

由于我不希望Vim在使用它之后突出显示所有注释的开头,因此键绑定包括

<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)

这样做的一个问题是它会杀死所有突出显示.我真正想要做的是恢复之前突出显示的内容.

这可能在Vim?

vim

1
推荐指数
1
解决办法
61
查看次数

为什么 Keras BatchNorm 产生的输出与 PyTorch 不同?

火炬\xef\xbc\x9a\'1.9.0+cu111\'

\n

Tensorflow-gpu\xef\xbc\x9a\'2.5.0\'

\n

我遇到一个奇怪的事情,当使用tensorflow 2.5的Batch Normal层和Pytorch 1.9的BatchNorm2d层计算相同的Tensor时,结果有很大不同(TensorFlow接近1,Pytorch接近0)。我一开始以为是动量和epsilon的区别,但是把它们改成相同后,结果是一样的。

\n
from torch import nn\nimport torch\nx = torch.ones((20, 100, 35, 45))\na = nn.Sequential(\n            # nn.Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), padding=0, bias=True),\n            nn.BatchNorm2d(100)\n        )\nb = a(x)\n\nimport tensorflow as tf\nimport tensorflow.keras as keras\nfrom tensorflow.keras.layers import *\nx = tf.ones((20, 35, 45, 100))\na = keras.models.Sequential([\n            # Conv2D(128, (1, 1), (1, 1), padding=\'same\', use_bias=True),\n            BatchNormalization()\n        ])\nb = a(x)\n
Run Code Online (Sandbox Code Playgroud)\n

TensorFlow 的结果

\n

Pytorch的结果

\n

deep-learning keras tensorflow pytorch batch-normalization

1
推荐指数
1
解决办法
1641
查看次数