小编Dol*_*000的帖子

为什么Python新样式类中的__new__不是类方法?

Python 2.2的Changelog(引入了新式类)说明了关于该__new__函数的以下内容:

__new__是一个静态方法,而不是类方法.我最初认为它必须是一个类方法,这就是我添加classmethod原语的原因.不幸的是,使用类方法,upcalls在这种情况下不能正常工作,因此我不得不将它作为静态方法,并将显式类作为其第一个参数.

但是,我无法想到为什么类方法不能用于此目的,它肯定会更好看.为什么最终不会__new__以类方法结束?当Guido说"在这种情况下上调不能正常工作"时,Guido会提到什么?

python language-design new-operator new-style-class

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

INVD指令有什么用?

显然,x86 INVD使高速缓存层次结构无效,而不将内容写回内存.

我很好奇,这样的教学有什么用?鉴于人们对各种缓存级别的数据控制得很少,甚至对异步刷新的内容控制得更少,这似乎只是一种确保你不知道什么数据的方法.再也不在记忆中了.

x86 assembly cpu-cache

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

Java"ANSI常量"

我在浏览Java代码约定时遇到了这个小小的问题:

声明类常量和ANSI常量的变量名称应全部为大写,并用下划线("_")分隔.(为了便于调试,应避免使用ANSI常量.)

(从这里开始.)

这个文件中提到的这些"ANSI常量"是什么?他们如何使调试更难?

该文本听起来好像在"变量声明类常量"(我将其解释为普通static final变量)和这些"ANSI常量" 之间存在二分法,但我不知道在Java中声明常量的任何方法除了让他们static final变量.

java history naming-conventions

19
推荐指数
2
解决办法
2649
查看次数

UIViewController旋转方法

什么对象负责UIViewController旋转旋转方法调用,即:

  • shouldAutorotateToInterfaceOrientation:
  • willRotateToInterfaceOrientation:duration:
  • willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
  • willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
  • didRotateFromInterfaceOrientation:

我想它是UIApplication(但可能是AppDelegate或UIWindow).

接下来的问题是,对象如何知道UIViewController要与谁交谈?

它如何知道哪个UIViewController视图作为窗口的子视图?

是否有可以发送的消息或您可以设置的属性(某些对象)UIViewController为应用程序设置"活动" ?

iphone cocoa-touch uiviewcontroller ios

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

-funsafe-math-optimizations中包含哪些优化?

GCC的手册页指出-funsafe-math-optimizations允许优化"(a)假设参数和结果有效,(b)可能违反IEEE或ANSI标准",但这不是很精确,是吗?

在这种情况下,什么可能是"无效"的论点?NaN的?Infinites?次归?负数到sqrt()

结果允许偏离IEEE或ANSI标准多远?它是"仅仅"像操作关联性和排序的东西,还是可能包括例如.与NaN的真实比较或与无限的不正确比较?可以存储变量进行重新四舍五入已被使用后(使得对变量 xy,(x == y) + (x == y)可以评估到1)?可以isinf()/ isnan()停止工作吗?

GCC开发人员是否遵循任何特定的系统或纪律来解决这些问题,或者答案在不同版本之间是否会有很大不同?

c floating-point optimization gcc

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

是否可以通过mmap的匿名内存"打孔"?

考虑一个使用大量页面大小的内存区域(比如64 kB左右)的程序,每个区域都是相当短暂的.(在我的特定情况下,这些是绿色线程的备用堆栈.)

如何最好地分配这些区域,以便一旦该区域不再使用,它​​们的页面可以返回到内核?天真的解决方案显然只是mmap单独的每个区域,munmap一旦我完成它们就会再次出现.不过,我觉得这是一个坏主意,因为它们有很多.我怀疑VMM可能会在一段时间后开始严重缩放; 但即使没有,我仍然对理论案例感兴趣.

如果我只是mmap自己一个巨大的匿名映射,我可以根据需要分配区域,有没有办法通过映射"打孔"我已完成的区域?有点像madvise(MADV_DONTNEED),但不同之处在于应该将页面视为已删除,以便内核实际上不需要将其内容保留在任何位置,但只要再次出现故障就可以重用已归零的页面.

我正在使用Linux,在这种情况下,我并不打算使用特定于Linux的调用.

c linux mmap

12
推荐指数
2
解决办法
1471
查看次数

为什么SSE指令保留YMM寄存器的高128位?

似乎是一个反复出现的问题,许多英特尔处理器(直到Skylake,除非我错了)在将AVX-256指令与SSE指令混合时表现不佳.

根据英特尔的文档,这是由SSE指令定义为保留YMM寄存器的高128位引起的,因此为了能够通过不使用AVX数据路径的高128位来节省功耗,CPU会存储这些位当执行SSE代码并在输入AVX代码时重新加载它们时,存储和加载是昂贵的.

但是,我找不到明显的理由或解释为什么SSE指令需要保留那些高128位.相应的128位VEX指令(使用它避免了性能损失)通过始终清除YMM寄存器的高128位而不是保留它们来工作.在我看来,当英特尔定义AVX架构,包括将XMM寄存器扩展到YMM寄存器时,他们可以简单地定义SSE指令也将清除高128位.显然,由于YMM寄存器是新的,可能没有遗留代码依赖于保留这些位的SSE指令,而且在我看来,英特尔可以很容易地看到这一点.

那么,英特尔定义SSE指令以保留YMM寄存器的高128位的原因是什么?它有用吗?

performance x86 avx

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

为什么GCC在获取void表达式的地址时开始发出警告?

在几个GCC版本之前,我可以做这样的事情:

$ objcopy -I binary -O elf64-x86-64 -B i386 foo.png foo.png.o
Run Code Online (Sandbox Code Playgroud)

...在C中加入以下内容,作为SDL图像加载的示例:

extern void _binary_foo_png_start;
extern void _binary_foo_png_start;
SDL_Surface *image = IMG_Load_RW(SDL_RWFromMem(&_binary_foo_png_start, &_binary_foo_png_end));
Run Code Online (Sandbox Code Playgroud)

然后我将foo.png.o与C文件中的目标文件链接在一起,并获得一个整齐地包含的可执行文件foo.png.

这些天,我仍然可以这样做,但海湾合作委员会警告我:

foo.c:57:19: warning: taking address of expression of type ‘void’
foo.c:57:44: warning: taking address of expression of type ‘void’
Run Code Online (Sandbox Code Playgroud)

显然它仍然有效,据我所知,它确实做到了它应该做的事情.符号本身没有明确定义的类型,因此将它们声明为合适似乎是合适的void.我的意思是,当然,我也可以给他们任何其他任意类型,它仍然可以正常工作,就像我只是想要他们的地址一样,但声明它们void似乎比组成某种类型更好.

那么为什么GCC突然决定开始警告我这个呢?还有其他一些首选的方式吗?

c gcc

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

查找支持的GLSL版本

如何才能以可编程方式可靠地使用的方式找到OpenGL实现支持的GLSL版本?

获取GL_SHADING_LANGUAGE_VERSION字符串并尝试解析它的最佳方法是什么?可以依赖于以明确定义的格式返回吗?我的英特尔驱动程序返回的1.20内容很简单,可以解析,但我的nVidia卡会返回4.20 NVIDIA via Cg compiler.它是否可以被(\d+)\.(\d+)( .*)?正则表达式匹配?这个答案似乎表明不然,回归OpenGL ES GLSL ES 1.0.

这是否正确,和/或是否有其他方式?具体来说,我想检查一下,至少支持GLSL 1.20.

opengl glsl

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

编写java.net.SocketImplFactory

SocketImplFactory的javadoc特别提到"通过更改创建套接字实现的套接字工厂,应用程序可以自行配置以创建适合本地防火墙的套接字."

但是,为了连接到有问题的防火墙,需要一个真正的套接字来进行真正的连接.替换了默认的SocketImplFactory,如何获得真正的套接字?

我知道在Java的Java上可以使用java.net.PlainSocketImpl和java.net.SocksSocketImpl,但有没有什么方法可以在JVM之间移植?

java sockets

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