問題タブ [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.
c++ - C ++クラスでアサーションを折りたたむ?
したがって、クラス以外のタイプの状況では、次のようなことができます。
val_to_check
代わりにが宣言されている場合const
、アサーションはコンパイラーによって折りたたむことができます。
クラスのメンバー変数を使用して同様の定数畳み込みを取得できるかどうか知りたいです。たとえば、次のようなことができますか?
したがって、クラスを定義するときにval_を知っている必要があります、a-la:
(私はこれらが不自然な例であることを知っています)。アサーションを折りたたむことは時々可能であるように思われますが、私がテストした単純な例ではそれができないようです。私が得た最善の方法は、アサーションコードを関数の最後に移動することです(-O3を使用してコンパイルする場合)
java - Javaに「コンスタントフォールディング」と呼ばれる概念はありますか?
Javaに「コンスタントフォールディング」と呼ばれる概念はありますか? はいの場合、それは何ですか?
java - javaコンパイラの定数折りたたみとは何ですか?
こんにちは、Java コンパイラがコンスタント フォールディングと呼ばれるものを使用しているのを見つけました。これは何ですか? そしてそれはどのように影響しますか?
perl - O=Deparse はどのように機能し、Perl には定数配列があり、折りたたまれていますか?
Perl の最適化のすべてを示しているのだろうか、-MO=Deparse
なぜこれが Perl 5.10 で折りたたまれていないのだろうか?
IRC の何人かはO=Deparse
、それがすべてを示しているわけではないかもしれないと考えていましたが、一定の折り畳みを示していることは確かです。
定数サブを明示的に記述しても同じ結果になります。予測可能ではありますが、 のドキュメントでは定数配列ではなく定数リストconstant.pm
を作成していることも興味深い点です。これはスカラー定数のように折りたたまれていないだけでなく、呼び出しごとに新しい配列を作成するオーバーヘッドが必要になると思います。
私が到達できる唯一の結論は-MO=Deparse
、すべての折り畳みを示すことであり、定数配列はPerlで最適化されていないだけですか? そうですか?技術的な理由はありますか?
java - Javaで一定の折り畳みを避けるのはなぜですか? いつ?
以下に示すように、slf4jでいくつかのコードを見ました。ここで一定の折りたたみを避ける理由がわかりません。そうする必要がありますか?または単にベストプラクティス。これを行う利点は何ですか?
ありがとう。
floating-point - なぜDで0.1+0.2 == 0.3なのですか?
言語がネイティブ浮動小数点演算を使用していることを確認するのが私のお気に入りです。
C ++
出力:
Python
出力:
その他の例
- Java: http: //ideone.com/EPO6X
- C#: http: //ideone.com/s14tV
なぜこれはDには当てはまらないのですか?理解しているように、Dはネイティブの浮動小数点数を使用します。これはバグですか?特定の数値表現を使用していますか?他に何かありますか?かなり紛らわしい。
D
出力:
アップデート
LukeHに感謝します。これは、そこで説明されている浮動小数点定数畳み込みの効果です。
コード:
出力:
java - Java コンパイラには文字列定数の折りたたみが含まれていますか?
Java がプリミティブ型の定数折りたたみをサポートしていることがわかりましたが、String
s はどうでしょうか。
例
次のソースコードを作成すると
コンパイルされたコードには何が入りますか?
合体バージョン?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(""));
xml - テンプレートを再帰的に適用して、XSLTの結果ツリー(定数畳み込み)
単純な数式のXML表現に定数畳み込みを適用しようとしています。定数畳み込みは、定数(サブ)式をリテラル値に置き換えるプロセスです。定数畳み込みの一部は、2つのリテラル値に適用されるすべての2項演算を、計算されたリテラル結果に置き換えることです。つまり、次の式があるとします。
およびそのXML表現:
交換できます
と
そしてその後、私たちは置き換えることができます
と
最終結果は次のようになります(さらに簡略化できますが、今のところこれで十分です)。
XSLTスタイルシートの一部は次のようになります。
このテンプレートのアイデアは、両方のオペランド(子)が値要素であるすべての演算要素(加算、乗算など)を、計算された値を含む単一の値要素に再帰的に置き換えることです。ツリーの残りの部分(変数を含む操作)は同じに保たれます。
ただし、このスタイルシートは定数畳み込みを1回だけ適用し、最も深い二項演算要素をリテラル値に置き換えるだけです。このスタイルシートを機能させる唯一の方法は、入力ドキュメントと出力ドキュメントが同じになるまで、最後の変換の出力を変換し続けることです。私はXSLTを初めて使用するので、これを行うためのより自然な方法があるはずです。
c - Cコンパイラでの定数の折りたたみはどのくらい効果的ですか?
私の質問は簡単すぎるかもしれませんが、答えが見つかりませんでした。申し訳ありません。
次のようなコードがある場合:
コンパイル後、このコードは次のようになりますか?
つまり、定数部分はコンパイル時に計算されますよね?
前もって感謝します。
perl - この Perl ワンライナーで __LINE__ は一定に折りたたまれていますか?
sarathi の現在のファイル行番号の質問に対する別の回答を検討する中で、提供されたすべてのファイルの最初の行を出力することを期待して、このワンライナーを書きました。
これは期待どおりに機能しませんでした。すべての行が印刷されました。
ワンライナーを実行する-MO=Deparse
と、条件が存在しないことが示されます。これは、コンパイル時に定数が折りたたまれているためだと思います。
しかし、なぜ?
Perl 5.8.8 で実行します。