UnderC、Cint、Cling、Ch、またはその他の C++ インタープリターを使用したことがあり、その経験を共有できる人がいるかどうかに興味があります。
8 に答える
Clangに基づく C++ インタプリタのcling Cern のプロジェクトがあります。これは、 ROOT cintでの20 年の経験に基づいた新しいアプローチであり、非常に安定しており、Cern 関係者に推奨されています。
これは素敵なGoogle トークです: clang/LLVM に基づく C++ インタープリターである cling の紹介。
注:以下はどちらかというと CINT 固有のものですが、おそらく最も広く使用されているC++ インタープリターであることを考えると、それらすべてに有効である可能性があります。
CINT を広範囲に使用してきた素粒子物理学の大学院生として、私は警告しておく必要があります。それは「機能」しますが、段階的に廃止される過程にあり、素粒子物理学に1年以上費やす人は通常、いくつかの理由でそれを避けることを学びます:
C インタープリターとしてのルーツがあるため、C++ の最も重要なコンポーネントの一部を解釈できません。たとえば、テンプレートは常に機能するとは限らないため、C++ を非常に柔軟で使いやすくするものを使用することはお勧めできません。
最小限に最適化された C++ よりも遅くなります (少なくとも 5 倍)。
デバッグ メッセージは、g++ によって生成されるメッセージよりもはるかに不可解です。
スコープはコンパイルされた C++ と一致しません: 次の形式のコードがよく見られます。
if (energy > 30) { float correction = 2.4; } else { float correction = 6.3; } somevalue += correction;
動作中の C++ コンパイラは
correcton
、範囲外になったと文句を言うでしょうが、CINT はこれを許可します。その結果、CINT コードは実際には C++ ではなく、C++ に似たものになります。
要するに、CINT には C++ の利点がまったくなく、すべての欠点といくつかの欠点があります。
CINT がまだまったく使用されているという事実は、ROOT フレームワークに含まれているため、歴史的な事故の可能性が高いです。それが書かれたとき (20 年前) には、インタラクティブなプロット/フィッティングのためのインタープリター言語が本当に必要でした。現在、その役割を果たしている多くのパッケージがあり、その多くには何百人ものアクティブな開発者がいます。
これらはいずれも C++ で記述されていません。なんで?簡単に言えば、C++ はインタープリタを意図したものではありません。たとえば、静的型付けは、コンパイル中の最適化に大きなメリットをもたらしますが、コンピューターが実行時にのみコードを参照できる場合、ほとんどの場合、コードが乱雑になり、過度に制約されます。インタープリター言語を使用できる余裕があり、Python や Ruby を学べる場合は、たとえ C++ を既に知っていたとしても、CINT につまずくよりも習得にかかる時間は短くなります。
私の経験では、ROOT (CINT を実行するためにインストールする必要があるパッケージ) を扱う年配の研究者は、CINT を回避するために ROOT ライブラリを通常の C++ 実行可能ファイルにコンパイルすることになります。若い世代は、これに従うか、Python を使用してスクリプトを作成します。
ちなみに、ROOT (および CINT) は、かなり最新のコンピューターでコンパイルするのに約 30 分かかり、新しいバージョンの gcc では失敗することがあります。何年も前に重要な目的を果たしたパッケージですが、今では明らかに古くなっています. ソース コードを調べると、何百もの非推奨の C スタイル キャスト、タイプ セーフの巨大な穴、グローバル変数の多用が見つかります。
C++ を作成する場合は、C++ を本来の目的どおりに作成してください。絶対に C++ インタープリターが必要な場合は、CINT をお勧めします。
私は (約 1 年前に) Chをいじってみたところ、かなり良いことがわかりました。
また、ずっと前にInstant Cという製品を使用しましたが、それがさらに発展したかどうかはわかりません
昔、CodeCenter という C++ インタープリターを使用していました。ビットフィールドや派手なポインタマングリングなどを処理できませんでしたが、かなり良かったです。この 2 つの優れた点は、変数が変更されたときに監視できることと、デバッグ中にその場で C/C++ コードを評価できることです。最近では、GDB のようなデバッガーも基本的には同じくらい優れていると思います。
しばらく前に ch を使用して、自分が担当している DLL のブラック ボックス テストに使用できるかどうかを調べました。残念ながら、DLL から関数をロードして実行する方法がよくわかりませんでした。繰り返しますが、私はそれほどやる気がありませんでした。方法があるかもしれません.