web-dev-qa-db-ja.com

C ++インタープリター(コンパイラーではない)を使用しましたか?

UnderC、Cint、Cling、Ch、またはその他のC++インタープリターを使用した経験があり、経験を共有できる人がいるかどうか興味があります。

67
Allan Wind

注:以下はむしろCINT固有ですが、おそらく最も多くの 広く使用されている C++インタープリターが有効であることを考えるとモール。

粒子物理学の大学院生として、CINTを広範囲に使用しているので、私はあなたに警告するべきです。それは「機能」しますが、 段階的に廃止される過程にあります であり、粒子物理学に1年以上を費やす人は通常、いくつかの理由でそれを避けることを学びます。

  1. Cインタープリターとしてのルーツのため、C++の最も重要なコンポーネントの一部を解釈できません。たとえば、テンプレートは常に機能するとは限らないため、C++を非常に柔軟で使いやすいものにすることはお勧めできません。

  2. 最小限に最適化されたC++よりも遅くなります(少なくとも5倍)。

  3. デバッグメッセージは、g ++によって生成されるメッセージよりもはるかにわかりにくいです。

  4. スコープはコンパイルされたC++と矛盾します。次の形式のコードを見るのは非常に一般的です

    if (energy > 30) { 
        float correction = 2.4;
    }
    else {
        float correction = 6.3;
    }
    
    somevalue += correction; 
    

    動作しているC++コンパイラはcorrectonがスコープ外になったと文句を言うでしょうが、CINTはこれを許可しています。その結果、CINTコードは実際にはC++ではなく、そのように見えます。

つまり、CINTにはC++の利点はなく、すべての欠点に加えていくつかの利点があります。

CINTがまだ使用されているという事実は、ROOTフレームワークに含まれているために、おそらく歴史的な事故の可能性が高いです。それが書かれたとき(20年前)、インタラクティブなプロット/フィッティングのためのインタープリター言語が本当に必要でした。現在、その役割を満たす多くのパッケージがあり、その多くには何百人ものアクティブな開発者がいます。

これらはいずれもC++で書かれていません。どうして?簡単に言えば、C++は解釈されることを意図したものではありません。たとえば、静的型付けは、コンパイル中に最適化を大幅に向上させますが、ほとんどの場合、コンピューターが実行時にのみコードの表示を許可されている場合、コードを乱雑にし、過剰な制約を与えます。インタプリタ言語を使用できる贅沢がある場合は、PythonまたはRubyを習得してください。学習にかかる時間は、すでにC++を知っています。

私の経験では、ROOT(CINTを実行するためにインストールする必要のあるパッケージ)を扱う古い研究者は、CINTを回避するためにROOTライブラリを通常のC++実行可能ファイルにコンパイルすることになります。若い世代のものは、このリードに従うか、スクリプトにPythonを使用します。

ちなみに、ROOT(したがってCINT)は、かなり最新のコンピューターでコンパイルするのに約30分かかり、新しいバージョンのgccでは時々失敗します。それは何年も前に重要な目的を果たしたパッケージですが、今ではそれが年齢であることを明確に示しています。ソースコードを調べると、非推奨のCスタイルキャストが何百もあり、型安全性に大きな穴があり、グローバル変数が多用されています。

C++を作成する場合は、C++を作成するつもりで作成してください。 C++インタープリターが絶対に必要な場合は、おそらくCINTが適切です。

29
Shep

clingclang に基づいたC++インタープリターのCernのプロジェクトがあります-新しいアプローチROOT cintでの20年の経験に基づいており、非常に安定しており、Cernの男性によって推奨されています。

これがいいですね Googleトーク:clingの紹介、clang/LLVMベースのC++インタープリター

23

cintは、粒子物理学解析パッケージ [〜#〜] root [〜#〜] のコマンドプロセッサです。私はそれを定期的に使用し、私にとって非常にうまく機能します。

それはかなり完全であり、コンパイルされたコードでうまくいきます(インタープリターで使用するためにコンパイルされたモジュールをロードできます...)

late edit ::その質問の投稿者がここに投稿したくないようだったため、後の複製からコピーされました: igcc =。個人的に試したことはありませんが、Webページは有望に見えます。

19
dmckee

私は(約1年前) Ch で遊んでみましたが、かなり良いことがわかりました。

4
Alan

ずっと前に、CodeCenterと呼ばれるC++インタープリターを使用しました。ビットフィールドやファンシーポインターのマングリングなどを処理することはできませんでしたが、かなりいい感じでした。それについての2つの素晴らしいことは、変数がいつ変更されたかを見ることができ、デバッグ中にその場でC/C++コードを評価できることでした。最近では、GDBのようなデバッガーは基本的に同じように優れていると思います。

2
jfm3

またずっと前に、Instant Cという製品を使用していましたが、それがさらに発展したことはわかりません

2
user11269

c-repl というプログラムがあります。これは、GCCを使用してコードを共有ライブラリに繰り返しコンパイルし、結果のオブジェクトをロードすることで機能します。 Ubuntuのリポジトリにある バージョン がRuby(もちろんGCCをカウントしない)で記述されている一方で、 最新のgit はHaskellにあります:)

0

しばらく前にchを使用して、担当しているDLLのブラックボックステストに使用できるかどうかを確認しました。残念ながら、DLLから関数をロードして実行する方法を理解できませんでした。繰り返しになりますが、私はやる気がありませんでした。

0
Jon Trauntvein