問題タブ [clang]
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++ - LLVM JITコードを静的LLVMライブラリにリンクしますか?
私は、財務データの多くのCPU集中分析を行うクロスプラットフォーム(Mac OS X、Windows、およびLinux)アプリケーションを実装している最中です。分析エンジンの大部分は、速度の理由からC ++で記述され、ユーザーがアクセスできるスクリプトエンジンがC++テストエンジンとインターフェイスします。既存の大規模なユーザーベースで他の人気のあるソフトウェアをエミュレートするために、時間をかけていくつかのスクリプトフロントエンドを作成したいと思います。最初のフロントは、VisualBasicのようなスクリプト言語になります。
LLVMは私のニーズにぴったりだと思います。データ量が非常に多いため、パフォーマンスは非常に重要です。回答を得るためにテストを1回実行するのに、数時間または数日かかる場合があります。LLVMを使用すると、単一のバックエンドソリューションを使用できるようになると同時に、スクリプト言語のさまざまなフレーバーに対してさまざまなフロントエンドを実装できるようになると思います。
テストエンジン自体はインターフェイスから分離され、テストは別のプロセスで行われ、進行状況と結果がテスト管理インターフェイスに報告されます。テストは、テストエンジンコードと統合されたスクリプトコードで構成されます。
私が書いた同様の商用テストシステムの以前の実装では、C ++で記述され、テストエンジンライブラリに直接リンクされているため、テストライブラリと簡単にインターフェイスできる高速インタプリタを構築しました。スクリプトコードからライブラリオブジェクトのテストへのコールバックには、かなりのオーバーヘッドを伴うフォーマット間の変換が含まれていました。
LLVMを使用すると、コールバックをC ++に直接実装して、スクリプトコードをC++で記述されているかのように機能させることができると想像しています。同様に、すべてのコードがLLVMバイトコード形式にコンパイルされた場合、LLVMオプティマイザーはスクリプト言語とC++で記述されたテストエンジンコードの間の境界を越えて最適化できるようです。
毎回テストエンジンをコンパイルする必要はありません。理想的には、スクリプトコードのみをJITコンパイルしたいと思います。小規模なテストの場合は、いくつかの最適化パスをスキップしますが、大規模なテストの場合は、リンク中に完全な最適化を実行します。
それで、これは可能ですか?テストエンジンを.oオブジェクトファイルまたは.aライブラリファイルにプリコンパイルしてから、JITを使用してスクリプトコードにリンクできますか?
最後に、理想的には、スクリプトコードに特定のC++クラスのサブクラスとして特定のメソッドを実装してもらいたいと思います。したがって、C++テストエンジンはC++オブジェクトのみを認識しますが、JITセットアップコードは、オブジェクトのメソッドの一部を実装するスクリプトコードをコンパイルします。正しい名前マングリングアルゴリズムを使用した場合、スクリプト言語のLLVM生成を、テストエンジンにリンクできるC++メソッド呼び出しのように設定するのは比較的簡単なようです。
したがって、リンク段階は2つの方向に進みます。つまり、スクリプト言語からテストエンジンオブジェクトを呼び出して価格情報とテスト状態情報を取得し、テストエンジンから特定のC++オブジェクトのメソッドを呼び出します。コードはC++からではなくC++から提供されます。スクリプト言語から。
要約すれば:
1)JITコンパイル、コード生成プロセスの一部として、プリコンパイルされた(.bc、.o、または.aのいずれかの)ファイルにリンクできますか?
2)すべてC ++で記述されているかのように動作するコードを作成できるように、上記の1)のプロセスを使用してコードをリンクできますか?
xcode - C++ および Objective-C++ コードを静的に解析する方法は?
「ビルドと分析」オプションは、.cpp および .mm ファイルでは機能しないようです。標準の #include を使用せずに個々のファイルで「clang --analyze」を試してみましたが、うまくいきました。ただし、Xcode プロジェクトでは実行できません。UIKit.h のように、clang に標準の #includes を見つけさせる方法がわかりませんでした。手がかりはありますか?
objective-c - このclang警告を修正するにはどうすればよいですか:「+ 0の保持カウントを持つオブジェクトが、+ 1(所有)の保持カウントが期待される呼び出し元に返されます」?
次のようなObjective-Cコードがあります。
コードは、次のような初期化子から呼び出されます。
clang static Analyzerを実行すると、path
変数に対して次の警告が表示されます。
41行目に割り当てられ、「パス」に格納されたオブジェクトの潜在的なリーク
+0の保持カウントを持つオブジェクトは、+ 1(所有)の保持カウントが期待される呼び出し元に返されます
よくわかりません。私の理解ではstringByAppendingPathComponent
、自動解放された文字列を返す必要があるため、正味保持カウントは0である必要があります(明らかに、保持したくありません)。
私はcopyData:
以下を返すように変更しようとしましたが、警告を取り除くことができませんでした:
では、この警告はどうなるのでしょうか。
llvm - clang 1.1および1.0(llvm 2.7および2.6)によって生成された末尾呼び出し
clang -O2(またはオンラインデモ)を使用して次のコードスニペットをコンパイルした後:
llvmアセンブリの次のスニペットを次の場所で取得していflip
ます:
これは、現在のスタックをドロップすることを意味すると思いましたtail call
(つまり、リターンは上位フレームに戻るので、次の命令はret %5
)である必要がありますが、このコードによれば、それはそれを実行mul
します。そして、ネイティブアセンブリではcall
、テールの最適化なしで単純です(llcに適切なフラグがある場合でも)
誰かがclangがそのようなコードを生成する理由を説明できますか?
同様に、llvmが、nextがprevの結果を使用し、後で適切な最適化を実行するか、末尾呼び出し命令と同等のネイティブを生成するtail call
ことを単純にチェックできる場合、なぜllvmが持つのか理解できません。ret
call
xcode - Xcode 静的解析 (Clang) メッセージを無効にするにはどうすればよいですか?
エラー、警告、または静的分析メッセージを生成せずに、Xcode プロジェクトで Build And Analyze ステップを実行したいと考えています。これに関する問題は、私のプロジェクトに、(おそらく無害な) 警告と静的分析メッセージを生成するライブラリが含まれていることです。
「私の」コードが問題なくビルドされるように、特定の Clang 警告を無効にする方法が見つかりません。これは可能ですか?
c++ - Clang は Lock Prefix をサポートしていません。どうすれば回避できますか?
次のコードを想定します。
Clang コンパイラは lock プレフィックスをサポートしていません (まだ?)。私は今何をすべきですか?
c++ - clang アプリケーションの問題
私はclangライブラリを使用してアプリケーションを構築しています.問題が発生しています.誰かが指示を与えることができれば非常に役に立ちます.
#./a.out /home/nmathew/Desktop/algorithms/array.cpp
与える
私のインクルード検索ディレクトリは以下のとおりです。
#include "..."
検索はここから開始します:
#include <...>
検索はここから開始します:
/usr/include/linux
/usr/lib/gcc/i686-redhat-linux/4.4.3/include
/usr/include/c++/4.4.3
/usr/include/c++/4.4 .3/backward
/usr/include/c++/4.4.3/i686-redhat-linux
/usr/local/ include /
usr /include
検索リストの終わり。
char_traits.h は /usr/include/c++/4.4.3/bits/ にあり、Fedora 12 32 ビット システムを使用しています。
私のコードは以下のとおりです
tut01_pp.cpp
PPContext.h
配列.cpp
optimization - Clang vs GCC-どちらがより高速なバイナリを生成しますか?
現在GCCを使用していますが、最近Clangを発見し、切り替えについて考えています。ただし、決定要因が1つあります-生成するバイナリの品質(速度、メモリフットプリント、信頼性)gcc -O3
-1%速く実行されるバイナリを生成できる場合、またはClangバイナリがより多くのメモリを消費するか、コンパイラのバグが原因で失敗する場合、それは取引です-ブレーカ。
Clangは、GCCよりも優れたコンパイル速度と低いコンパイル時のメモリフットプリントを誇っていますが、コンパイルされたソフトウェアのベンチマーク/比較に本当に興味があります-既存のリソースまたは独自のベンチマークを教えていただけますか?
gcc - llvm-gcc と clang バイナリは gcc と互換性がありますか? - 特に Windows の mingw gcc
llvm-gcc で静的ライブラリをビルドし、それを mingw gcc を使用してコンパイルされたプログラムとリンクすると、結果は機能しますか?
llvm-gcc、clang、および通常の gcc の他の組み合わせについても同じです。これが Linux (もちろん通常の非 mingw gcc を使用) やその他のプラットフォームでどのように機能するかに興味がありますが、重点は Windows にあります。
私はすべての言語にも興味がありますが、特に C と C++ に重点を置いています。明らかに、clang は Fortran などをサポートしていませんが、llvm-gcc はサポートしていると思います。
それらはすべて ELF ファイル形式を使用していると思いますが、呼び出し規則、仮想テーブル レイアウトなどはどうでしょうか。
c++ - Any tutorial for embedding Clang as script interpreter into C++ Code?
I have no experience with llvm or clang, yet. From what I read clang is said to be easily embeddable Wikipedia-Clang, however, I did not find any tutorials about how to achieve this. So is it possible to provide the user of a c++ application with scripting-powers by JIT compiling and executing user-defined code at runtime? Would it be possible to call the applications own classes and methods and share objects?
edit: I'd prefer a C-like syntax for the script-languge (or even C++ itself)