我对Perl所执行的常量折叠优化很好奇,但是当涉及Moose的代码时,可能不会执行常量折叠(如果我错了,请纠正我)。
我有Moose代码,其中包含如下方法:
sub foo {
my ($self) = shift;
my $test_y = $self->pos->[1];
#...
if ($self->is_map_val($self->pos->[0]+8, $test_y+32) ||
$self->is_map_val($self->pos->[0]+32-8, $test_y+32))
语言: java
版本: 12.0.2
字符串源代码如下:
/* @implNote
* The actual value for this field is injected by JVM. The static
* initialization block is used to set the value here to communicate
* that this static final field is not statically foldable, and to
* avoid any possible circular dependency during vm in
我知道c++编译器在某些情况下通常不会为const int分配存储空间,而是求助于const折叠。我尝试了一个简单的程序来测试这个:
int main()
{
const int num = 5;
int a[num];
}
我使用-g标志进行编译,并在gdb中运行它。当尝试访问这里的变量num的地址时,它显示了一些有效地址。我没想到会这样。这里有什么见解吗?
示例代码(t50.c):
#pragma fenv_access (on)
float d = 0.0 + 0.0;
int main(void)
{
return 0;
}
调用:
$ cl t50.c /fp:strict
Microsoft (R) C/C++ Optimizing Compiler Version 19.25.28611 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
t50.c
t50.c(2): error C2099: initializer is not a cons
让我们看一看折叠代码片段:
String s1 = "Hello";
String s2 = "Hello";
由于实习,这两个变量都指向同一个对象。由于字符串是不可变的,因此只创建了一个对象,并且都引用了同一个对象。
constant pool也是一种东西,它包含所有常量(整数、字符串等)。在类中声明的。这是每个班级的具体情况。
System.out.println("Hello"); // I believe this Hello is different from above.
问题:
string pool是指常量池中的
我见过很多类似这样的GLSL代码:
vec2 x = y * 0.00390625;
通常,为了清楚起见,我会这样写:
vec2 x = y * (1.0 / 256.0);
或如下所示:
vec2 x = y / 256.0;
使用最高版本是否合理?在我看来,如果你的编译器不支持常量折叠,或者不支持简单的强度缩减,那么你的编译器将会非常可悲。
所以我的问题可以换个说法:你是否真的会遇到GLSL编译器不支持常量折叠或强度降低的情况?我只是在考虑OpenGL实现中的GLSL编译器,而不是GLSL优化器。
我想将折叠SQL语句重写为动态PreparedStatement java:
UPDATE table SET field='C' WHERE id=3;
INSERT INTO table (id, field)
SELECT 3, 'C'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
特别是我不知道如何将SELECT 3, 'C'行重写为动态语句。
UPDATE table SET name=:name WHERE id=:id
INSERT INTO tab