问题标签 [constantfolding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
269 浏览

c++ - 在 C++ 类中折叠断言?

所以,在非类的情况下,我可以做这样的事情:

如果改为val_to_check声明const,则编译器可以折叠该断言。

我很好奇是否可以使用类的成员变量获得类似的常量折叠。例如,我可以执行以下操作:

所以在定义类时必须知道 val_,a-la:

(我知道这些都是人为的例子)。似乎有时应该可以将断言折叠起来,但我测试过的简单示例似乎并没有这样做。我得到的最好的是将断言代码移动到函数的末尾(使用 -O3 编译时)

0 投票
2 回答
1256 浏览

java - java中是否有任何称为“恒定折叠”的概念?

java中是否有任何称为“恒定折叠”的概念?如果是,那是什么?

0 投票
2 回答
4523 浏览

java - java编译器中的常量折叠是什么?

可能重复:
java中是否有任何称为“常量折叠”的概念?

嗨,我遇到了行 Java 编译器使用称为常量折叠的东西。这是什么?以及它如何影响?

0 投票
2 回答
896 浏览

perl - O=Deparse 是如何工作的,Perl 有和折叠常量数组吗?

我想知道,是否-MO=Deparse向您展示了所有 Perl 优化,为什么不将其折叠到 Perl 5.10 中?

IRC 上的一些人认为这O=Deparse可能没有显示全部,但它肯定显示了一些不断的折叠。

如果我显式编写常量 sub,结果相同。constant.pm虽然可以预测,但其中的文档让您创建一个常量列表而不是一个常量数组也很有趣。我假设这不仅不像标量常量那样折叠,而且它需要在每次调用时创建一个新数组的开销。

我能得出的唯一结论-MO=Deparse是显示所有折叠,而常量数组只是没有在 Perl 中优化?是这样吗?有技术原因吗?

0 投票
1 回答
988 浏览

java - 为什么要避免 Java 中的常量折叠?什么时候?

我在 slf4j 中看到了一些代码,如下所示。我不知道为什么要避免在这里不断折叠。有必要这样做吗?或者只是最佳实践。这样做有什么好处?

谢谢。

0 投票
3 回答
18315 浏览

floating-point - 为什么 D 中有 0.1 + 0.2 == 0.3?

是我最喜欢的检查语言是否使用本机浮点运算。

C++

输出:

http://ideone.com/ErBMd

Python

输出:

http://ideone.com/TuKsd

其他示例

为什么这对 D 不成立?据了解,D 使用本机浮点数。这是一个错误吗?他们是否使用某些特定的数字表示?还有什么?相当混乱。

D

输出:

http://ideone.com/mX6zF


更新

感谢卢克H。这是那里描述的浮点常量折叠的效果。

代码:

输出:

http://ideone.com/z6ZLk

0 投票
3 回答
1000 浏览

java - Java 编译器是否包含字符串常量折叠?

我发现Java支持原始类型的常量折叠,但是Strings呢?

例子

如果我创建以下源代码

编译后的代码中有什么?

合体版?out.write("<markup><nested>Easier to read if it is split into multiple lines</nested></markup>");

还是效率较低的运行时串联版本?out.write(new StringBuilder("").append("<markup>").append("<nested>").append("Easier to read if it is split into multiple lines").append("</nested>").append("</markup>").append(""));

0 投票
1 回答
795 浏览

xml - 递归地将模板应用于 XSLT 中的结果树(常量折叠)

我正在尝试将常量折叠应用于简单数字表达式的 XML 表示。常量折叠是将常量(子)表达式替换为其文字值的过程。常量折叠的一部分是用计算的文字结果替换应用于两个文字值的每个二进制操作。所以说我们有一个表达式:

及其 XML 表示:

我们可以替换

随后我们可以替换

最终结果应该是这样的(可以进一步简化,但现在就足够了):

我的 XSLT 样式表的一部分如下所示:

这个模板的想法是递归地用包含计算值的单个值元素替换所有操作元素(加法,乘法,...),其中两个操作数(子)都是值元素。树的其余部分(包含变量的操作)将保持不变。

然而,这个样式表只会应用一次常量折叠,只会用它们的字面值替换最深的二元操作元素。我可以让这个样式表工作的唯一方法是继续转换最后一次转换的输出,直到输入和输出文档相同。我是 XSLT 的新手,所以我很确定应该有一种更自然的方法来做到这一点。

0 投票
2 回答
1547 浏览

c - C 编译器中的常量折叠有多有效?

我的问题可能太简单了,但我还没有找到答案,抱歉。

如果我有这样的代码:

那么,编译之后,这段代码会变成这样吗?

换句话说,常量部分会在编译时计算,对吧?

先感谢您。

0 投票
2 回答
135 浏览

perl - __LINE__ 在这个 Perl 单行代码中是恒定折叠的吗?

在探索 sarathi 的当前文件行号问题的替代答案时,我写了这个单行代码,期望它会打印提供的所有文件的第一行:

这没有按预期工作;所有的行都被打印出来了。

运行单行-MO=Deparse显示条件不存在。我认为这是因为它在编译时已被常量折叠:

但为什么?

在 Perl 5.8.8 下运行。