вы использовали какой-либо из интерпретаторов c++ (не компиляторы)?

<p>мне любопытно, если кто-нибудь использовал underc, cint, cling, ch или любой другой интерпретатор c++ и мог бы поделиться своим опытом.</p>

<p><strong>примечание:</strong> то, что следует, скорее зависит от cint, но, учитывая, что это, вероятно, наиболее <a href="http://www.google.com/search?hl=en&q=c%2b%2b%20interpreter">широко используемый</a> c++ интерпретатор, он может быть действительным для них всех.</p><p>как аспирант по физике элементарных частиц, который широко использовал cint, я должен вас предупредить. хотя он «работает», он <a href="http://root.cern.ch/drupal/content/do-we-need-yet-another-custom-c-interpreter">находится в процессе поэтапного отказа</a> , и те, кто проводит физику элементарных частиц более года, обычно учатся избегать этого по нескольким причинам: </p><ol> <li><p>из-за своих корней как интерпретатора c, он не может интерпретировать некоторые из наиболее важных компонентов c++. например, шаблоны не всегда работают, поэтому вам не рекомендуется использовать вещи, которые делают c++ настолько гибким и удобным. </p></li> <li><p>это медленнее (по крайней мере, в 5 раз), чем минимально оптимизированный c++. </p></li> <li><p>сообщения отладки гораздо более загадочны, чем сообщения, создаваемые g ++. </p></li> <li><p>область видимости несовместима с откомпилированным c++: довольно часто можно увидеть код вида </p> <pre><code>if (energy > 30) { float correction = 2.4; } else { float correction = 6.3; } somevalue += correction; </code></pre> <p>тогда как любой работающий компилятор c++ будет жаловаться, что <code>correcton</code> вышел из области видимости, cint позволяет это. в результате код cint на самом деле не является c++, а выглядит так. </p></li> </ol><p>короче говоря, cint не имеет ни одного из преимуществ c++, и все недостатки плюс некоторые. </p><p>тот факт, что cint все еще используется вообще, скорее всего, является исторической катастрофой из-за его включения в структуру root. назад, когда это было написано (20 лет назад), была реальная потребность в интерпретируемом языке для интерактивного черчения/подгонки. сейчас есть много пакетов, которые выполняют эту роль, многие из которых имеют сотни активных разработчиков. </p><p>ни один из них не написан на c++. зачем? проще говоря, c++ не предназначен для интерпретации. например, статическая типизация дает вам большие преимущества в оптимизации во время компиляции, но в основном служит для загромождения и чрезмерного ограничения вашего кода, если компьютеру разрешено видеть его только во время выполнения. если у вас есть возможность пользоваться интерпретированным языком, изучать python или ruby, вам потребуется меньше времени, чтобы научиться понимать cint, даже если вы уже знаете c++. </p><p>по моему опыту, более старые исследователи, работающие с root (пакет, который необходимо установить для запуска cint), в конечном итоге компилируют библиотеки root в обычные исполняемые файлы c++, чтобы избежать cint. те, кто в молодом поколении, следуют этому примеру или используют python для написания сценариев. </p><p>между прочим, root (и, следовательно, cint) занимает примерно полчаса, чтобы скомпилировать на довольно современном компьютере, и иногда происходит сбой с более новыми версиями gcc. это пакет, который служил важной цели много лет назад, но теперь он ясно показывает его возраст. изучая исходный код, вы найдете сотни устаревших приведений в стиле c, огромные пробелы в безопасности типов и интенсивное использование глобальных переменных. </p><p>если вы собираетесь писать на c++, пишите на c++ так, как это должно быть написано. если вам абсолютно необходимо иметь интерпретатор c++, cint, вероятно, хорошая ставка. </p>

<p>существует <strong> <a href="http://cern.ch/cling">cling</a> проект cern</strong> интерпретатора c++, основанный на <a href="http://clang.llvm.org/">clang</a> - это <em>новый подход</em>, основанный на 20-летнем опыте <em>root cint</em>, и это довольно стабильный и рекомендованный парнями cern.</p><p>вот что приятно <a href="http://www.youtube.com/watch?v=f9xfh8pv3fs">google talk: представляем cling, интерпретатор c++ на основе clang/llvm</a> .</p>

<p>cint - командный процессор для пакета анализа физики элементарных частиц <a href="http://root.cern.ch/">root</a> . я использую это регулярно, и это работает очень хорошо для меня.</p><p>он довольно полный и хорошо работает со скомпилированным кодом (вы можете загрузить скомпилированные модули для использования в интерпретаторе ...)</p><p><strong>late edit ::</strong> скопировано из более позднего дубликата, потому что постер по этим вопросам, похоже, не хотел публиковать здесь: <a href="http://sourceforge.net/projects/igcc/">igcc</a> . никогда не пробовал лично, но веб-страница выглядит многообещающе.</p>

<p>я (около года назад) поиграл с <a href="http://www.ddj.com/cpp/184402054">ch</a> и нашел, что это довольно хорошо.</p>

<p>давным-давно я использовал интерпретатор c++ под названием codecenter. это было довольно приятно, хотя он не мог справиться с такими вещами, как битовые поля или причудливое искажение указателя. обе замечательные вещи заключались в том, что вы можете наблюдать, когда меняются переменные, и что вы можете оценивать код c/c++ на лету во время отладки. сегодня я думаю, что отладчик, такой как gdb, в основном так же хорош.</p>

<p>также давным-давно я использовал продукт instant c, но я не знаю, развился ли он дальше</p>

<p>существует программа под названием <a href="http://neugierig.org/software/c-repl/">c-repl</a> , которая многократно компилирует ваш код в разделяемые библиотеки с помощью gcc, а затем загружает полученные объекты. похоже, что он быстро развивается, учитывая, что <a href="http://packages.ubuntu.com/lucid/i386/c-repl">версия</a> в репозитории ubuntu написана на ruby (конечно, не считая gcc), тогда как <a href="http://neugierig.org/software/git/?url=c-repl/">последний git</a> находится на haskell. :)</p>

<p>я посмотрел на использование ch некоторое время назад, чтобы посмотреть, смогу ли я использовать его для тестирования dll черного ящика, за который я несу ответственность. к сожалению, я не мог понять, как заставить его загружать и выполнять функции из dll. с другой стороны, я не был так мотивирован, и вполне может быть способ. </p>