UnderC、Cint、Cling、Ch、または他のC++インタプリタを使用していて、経験を共有できる人がいれば、私は不思議です。C++インタプリタ(コンパイラではありません)を使用しましたか?
答えて
cintは、パーティクル物理解析パッケージROOTのコマンドプロセッサです。私は定期的にそれを使用し、それは私のために非常にうまく動作します。
それはかなり完了し、その上のポスターので、後で複製からコピーされコンパイルされたコード(あなたはインタプリタで使用するためにコンパイルされたモジュールをロードすることができます...)
後半編集::とうまく乗ります質問はここに投稿したいと思わなかった:igcc。個人的に試したことはありませんが、Webページは有望です。
私はcint/rootでコーディングの大部分を行う物理学のいくつかの大学院生を知っていますが、パフォーマンスや柔軟性のニーズを満たすことは必ずしも良いとは言えません。 –
これは、バイナリコード辞書<-->を構築する必要があるから複雑さが増しているC++です。さらに、ルートクラスツリーは痛みです。しかし、cint作品。 COMISがcernlib時代よりもずっと優れています。 – dmckee
@littlenag根は「私たちのニーズに合っている」と言っても少し寛大です。このフレームワークはいくつかの基本レベルにひどく欠陥があり、モジュラーではないため、削除することはほとんど不可能であるため、広く使用され続けています。 CINTは、実行したいことがすべてデータファイルで読み込まれているときにインストールする必要がある場合の主要な例です。 – Shep
昔、私はCodeCenterというC++インタプリタを使用しました。それはビットフィールドや見事なポインタマングリングのようなものを処理することはできませんでしたが、かなり素晴らしかったです。これについての2つの素晴らしい点は、変数が変更されたときに見ることができ、デバッグ中にその場でC/C++コードを評価できることでした。最近は、GDBのようなデバッガは基本的にはまあまあだと思います。私は(約一年前に)持って
インタプリタがテンプレートインスタンスに遭遇したときに何をするのですか? (またはその他の前処理ビジネス)。テンプレートやプリプロセッサを処理するためのプリコンパイル/前処理のレベルがありましたか? –
はい、すべてのCPPのものとテンプレートはすべて解釈される言語の一部です。かなりいい。 – jfm3
もずっと前に、私は、製品のコールインスタントCを使用しますが、私はそれが今までさらに
を開発したことを知らないChで遊んと、それはかなり良いことがわかりました。
私は責任を負っているDLLをテストするためにブラックボックスのテストに使用できるかどうかを調べるために、chを使って調べました。残念ながら、DLLから関数をロードして実行する方法を理解できませんでした。そして再び、私はそれが動機付けされていなかったし、道があるかもしれない。
c-replというプログラムがあります。このプログラムは、GCCを使用してコードを繰り返し共有ライブラリにコンパイルしてから、結果のオブジェクトをロードします。 Ubuntuのリポジトリのthe versionがRuby(もちろんGCCを数えていない)で書かれており、latest gitはHaskellに書かれていることを考えると、急速に進化しているようです。 :)
注: CINTむしろ具体的な、しかし、そのおそらく最もwidely used Cはそれがそれらすべてに対して有効かもしれインタプリタ++ことを考えると何であるかを、次の。
CINTを広く使用している粒子物理学の大学院生として、私はあなたに警告する必要があります。それは「仕事」をし、それis in the process of being phased out、および素粒子物理学に年以上を過ごす人々は通常、いくつかの理由のためにそれを避けるために学ぶ中:ので、Cの通訳としてのルーツの
、それはに失敗しましたC++の最も重要なコンポーネントのいくつかを解釈します。たとえば、テンプレートは常に機能するとは限りませんので、C++を非常に柔軟に使えるようにすることはお勧めできません。
最小限に最適化されたC++よりも遅い(少なくとも5倍)。
デバッグメッセージは、g ++で生成されたメッセージよりもはるかにわかりにくいです。
スコープは、コンパイル済みのC++と矛盾している:すべての作業をC++コンパイラは
correcton
がスコープの外に出た、CINTがこれを可能にすると文句を言うだろう、一方、それはフォームif (energy > 30) { float correction = 2.4; } else { float correction = 6.3; } somevalue += correction;
のコードを見ることは非常に一般的です。その結果、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が良いでしょう。
cintに関するあなたの苦情は完全に有効ですが(いくつか欠席していますが)、PAWのためのCOMIS通訳がはるかに悪いという私の言葉を聞くことができます。また、PAWはインタラクティブなプロットの適切な環境を提供しました。Fortran 77のコーディングスタイルから予想されるスケーリングの問題がありました。 – dmckee
@dmckee私を信じて、私たちはPAWで働いていないことをうれしく思っています。私のポイントは、CINTが_everything_より悪いということではなく、もっと良いことがたくさんあるということだけです。 – Shep
どうすれば遅くなるのですか? – Sergei
cling CERNのプロジェクトclangに基づいてC++インタプリタのがある - それはROOTのCINTで20年の経験に基づいて新しいアプローチだと、それは非常に安定しており、CERNの人たちが推奨するのです。
ここはいいGoogle Talk: Introducing cling, a C++ Interpreter Based on clang/LLVMです。
Clingは実際にインタラクティブにコンパイルすることで動作しますが、インタープリタよりもJITコンパイラのほうが多くなります。また、「CERNの人」として、私はCERNの推薦をコメントしなければならないと感じています。20年後のROOTの主なレッスンは、単一言語(C++)をベースとしたモノリシックソフトウェア(ROOT)間違いです。 Clingは、すべての言語としてC++を戦争続ける人にとっては良い松葉杖ですが、他のC++インタプリタでCINTから離れているわけではありません。相互侵入型コードの場合、C++よりもはるかに優れています、PythonまたはRubyを使用します。 – Shep
@GeorgFritzscheこの質問はCについてではなく、Cです。 –
投票にはあまりにも広すぎます。 –