it-swarm.com.de

Haben Sie C++ - Interpreter (keine Compiler) verwendet?

Ich bin gespannt, ob jemand UnderC, Cint, Cling, Ch oder einen anderen C++ - Interpreter verwendet hat und seine Erfahrungen teilen könnte.

65
Allan Wind

HINWEIS: Was folgt, ist eher CINT-spezifisch, aber angesichts dessen, dass es wahrscheinlich der am häufigsten verwendete verwendete C++ - Interpreter ist es kann für alle gelten.

Als Doktorand in Teilchenphysik, der CINT ausgiebig genutzt hat, sollte ich Sie warnen. Während es "funktioniert", wird es allmählich eingestellt , und diejenigen, die mehr als ein Jahr in der Teilchenphysik verbringen, lernen normalerweise, es aus folgenden Gründen zu vermeiden:

  1. Aufgrund seiner Wurzeln als C-Interpreter werden einige der wichtigsten Komponenten von C++ nicht interpretiert. Vorlagen funktionieren beispielsweise nicht immer, sodass Sie davon abgehalten werden, Dinge zu verwenden, die C++ so flexibel und benutzerfreundlich machen.

  2. Es ist langsamer (um mindestens den Faktor 5) als minimal optimiertes C++.

  3. Das Debuggen von Nachrichten ist viel kryptischer als die von g ++.

  4. Der Gültigkeitsbereich ist mit kompiliertem C++ nicht vereinbar: Code des Formulars wird häufig angezeigt

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

    während sich jeder funktionierende C++ - Compiler darüber beschweren würde, dass correcton den Rahmen verlässt, lässt CINT dies zu. Das Ergebnis ist, dass CINT-Code nicht wirklich C++ ist, sondern nur so aussieht.

Kurz gesagt, CINT hat keinen der Vorteile von C++ und alle Nachteile sowie einige.

Die Tatsache, dass CINT überhaupt noch verwendet wird, ist wahrscheinlich eher ein historischer Unfall, da es in das ROOT-Framework aufgenommen wurde. Als es vor 20 Jahren geschrieben wurde, gab es einen echten Bedarf an einer interpretierten Sprache für interaktives Zeichnen/Anpassen. Jetzt gibt es viele Pakete, die diese Rolle ausfüllen, viele, die Hunderte von aktiven Entwicklern haben.

Keines davon ist in C++ geschrieben. Warum? Ganz einfach, C++ ist nicht dazu gedacht, interpretiert zu werden. Die statische Eingabe zum Beispiel bringt Ihnen große Vorteile bei der Optimierung während der Kompilierung, dient jedoch hauptsächlich dazu, Ihren Code zu überfrachten und einzuschränken, wenn der Computer ihn nur zur Laufzeit sehen darf. Wenn Sie den Luxus haben, eine interpretierte Sprache zu verwenden, Python oder Ruby zu lernen, ist die Zeit, die Sie zum Lernen benötigen, geringer als die, die Sie verlieren, wenn Sie über CINT stolpern, selbst wenn Sie C++ bereits kennen.

Nach meiner Erfahrung kompilieren die älteren Forscher, die mit ROOT (dem Paket, das Sie installieren müssen, um CINT auszuführen) arbeiten, die ROOT-Bibliotheken zu normalen C++ - Programmdateien, um CINT zu vermeiden. Jene der jüngeren Generation folgen entweder diesem Beispiel oder verwenden Python für die Skripterstellung.

Übrigens dauert die Kompilierung von ROOT (und damit von CINT) auf einem recht modernen Computer ungefähr eine halbe Stunde und schlägt gelegentlich mit neueren Versionen von gcc fehl. Es ist ein Paket, das vor vielen Jahren einen wichtigen Zweck erfüllt hat, aber jetzt zeigt es deutlich, wie alt es ist. Wenn Sie sich den Quellcode ansehen, werden Sie Hunderte veralteter C-Darstellungen, große Lücken in der Typensicherheit und eine starke Verwendung globaler Variablen finden.

Wenn Sie C++ schreiben möchten, schreiben Sie C++ so, wie es geschrieben werden soll. Wenn Sie unbedingt einen C++ - Interpreten haben müssen, ist CINT wahrscheinlich eine gute Wahl.

29
Shep

Es gibt cling Cerns Projekt eines C++ - Interpreters basierend auf clang - es ist neuer Ansatz basierend auf 20 Jahren Erfahrung in ROOT cint und dessen ziemlich stabil und von Cern Jungs empfohlen.

Hier ist Nizza Google Talk: Einführung von cling, einem auf clang/LLVM basierenden C++ - Interpreter .

23

cint ist der Befehlsprozessor für das Analysepaket für die Teilchenphysik ROOT . Ich benutze es regelmäßig und es funktioniert sehr gut für mich.

Es ist ziemlich vollständig und kommt gut mit kompiliertem Code aus (Sie können kompilierte Module für die Verwendung im Interpreter laden ...)

late edit :: Aus einem späteren Duplikat kopiert, da das Poster zu diesen Fragen anscheinend nicht hier veröffentlicht wurde: igcc . Ich habe es nie persönlich ausprobiert, aber die Webseite sieht vielversprechend aus.

19
dmckee

Ich habe (vor etwa einem Jahr) mit Ch rumgespielt und fand es ziemlich gut.

4
Alan

Vor langer Zeit habe ich einen C++ - Interpreter namens CodeCenter verwendet. Es war ziemlich schön, obwohl es mit Bitfields oder ausgefallenem Zeigermangel nicht umgehen konnte. Die zwei coolen Dinge dabei waren, dass Sie beobachten konnten, wenn sich Variablen geändert haben, und dass Sie während des Debugging den C/C++ - Code im laufenden Betrieb auswerten können. Ich denke, ein Debugger wie GDB ist im Grunde genauso gut.

2
jfm3

Ich habe auch vor langer Zeit einen Produkt-Aufruf mit Instant C verwendet, weiß aber nicht, dass er sich jemals weiterentwickelt hat

2
user11269

Es gibt ein Programm namens c-repl , das den Code wiederholt in gemeinsam genutzte Bibliotheken mithilfe von GCC kompiliert und dann die resultierenden Objekte lädt. Es scheint sich schnell zu entwickeln, da die Version in Ubuntus Repository in Ruby geschrieben ist (natürlich nicht GCC), während latest git in Haskell ist. :)

0

Ich habe mit ch eine Weile zurückgeschaut, um zu sehen, ob ich es für Blackbox-Test-DLLs verwenden könnte, für die ich verantwortlich bin. Leider konnte ich nicht recht herausfinden, wie man Funktionen aus DLLs lädt und ausführt. Andererseits war ich nicht so motiviert und es könnte einen Weg geben. 

0
Jon Trauntvein