我找到了一个示例,其中输出根据优化设置而不同(-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) 如果你编写一个在.NET Core上运行的C#或F#程序,那么同样的字节码也会在.NET上运行(没有安装.NET Core)吗?
我听说反射的工作方式不同,但我不清楚这些差异是否是API的一部分.
是否有任何最新的 Prolog 实现基准(带有结果)?
我在汞网站上找到了这个。令人惊讶的是,它显示了swi-prolog和 Aquarius之间的 20 倍差距。我怀疑这些结果已经很老了。这个差距还成立吗?就我个人而言,我还希望看到一些与启用发生检查的比较,因为它对性能有重大影响,并且某些编译器在优化它方面可能比其他编译器更好。
最近比较,我发现这个要求是GNU的序言是2X比SWI更快,YAP为4x比SWI快于一个特定的代码库。
编辑:
实际问题需要发生检查的特定情况
当然:在 Haskell、OCaml、Swift或定理证明器(例如this one)中进行类型推断。我还认为程序员有责任证明他的代码不需要发生检查。测试只能证明你确实需要它,而不是你不需要它。
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临时删除的副作用.
为什么在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
在封闭世界假设下,
目前不知道是真的,是假的
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 是错误的吗?
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
英特尔内在函数指南列出的吞吐量是每个线程还是每个核心?
我使用键绑定来添加/删除给定行中的注释.
由于我不希望Vim在使用它之后突出显示所有注释的开头,因此键绑定包括
<CR>:nohlsearch<CR>
Run Code Online (Sandbox Code Playgroud)
这样做的一个问题是它会杀死所有突出显示.我真正想要做的是恢复之前突出显示的内容.
这可能在Vim?
火炬\xef\xbc\x9a\'1.9.0+cu111\'
\nTensorflow-gpu\xef\xbc\x9a\'2.5.0\'
\n我遇到一个奇怪的事情,当使用tensorflow 2.5的Batch Normal层和Pytorch 1.9的BatchNorm2d层计算相同的Tensor时,结果有很大不同(TensorFlow接近1,Pytorch接近0)。我一开始以为是动量和epsilon的区别,但是把它们改成相同后,结果是一样的。
\nfrom 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)\nRun Code Online (Sandbox Code Playgroud)\n
