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

Мне любопытно, если кто-либо использовал UnderC, Cint, Cling, Ch или любой другой интерпретатор C ++ и мог поделиться своим опытом.

    ПРИМЕЧАНИЕ: то, что следует, скорее специфично для CINT, но учитывая, что его, вероятно, наиболее широко используемый интерпретатор C ++, он может быть действительным для всех.

    Будучи аспирантом по физике частиц, который широко использовал CINT, я должен предупредить вас. Хотя он «работает», он находится в процессе постепенного прекращения деятельности , и те, кто проводит больше года в физике частиц, обычно учатся избегать его по нескольким причинам:

    1. Из-за его корней как интерпретатора C он не может интерпретировать некоторые из наиболее важных компонентов C ++. Шаблоны, например, не всегда работают, поэтому вам не рекомендуется использовать вещи, которые делают C ++ настолько гибкими и пригодными для использования.

    2. Он медленнее (по крайней мере в 5 раз), чем минимально оптимизированный C ++.

    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, время, затрачиваемое вами на обучение, будет меньше, чем вы теряете спотыкание над CINT, даже если вы уже знаете C ++.

    По моему опыту, более старые исследователи, которые работают с ROOT (пакет, который вы должны установить для запуска CINT), в конечном итоге собирают библиотеки ROOT в обычные исполняемые файлы на C ++, чтобы избежать CINT. Те, кто в младшем поколении, либо следуют этому примеру, либо используют Python для написания сценариев.

    Кстати, ROOT (и, таким образом, CINT) занимает примерно полчаса, чтобы скомпилироваться на довольно современном компьютере, и иногда будет терпеть неудачу с более новыми версиями gcc. Это пакет, который служил важной целью много лет назад, но теперь он ясно показывает, что это возраст. Изучая исходный код, вы найдете сотни устаревших отливок c-стиля, огромные дыры в типе безопасности и интенсивное использование глобальных переменных.

    Если вы собираетесь писать C ++, напишите C ++, поскольку он предназначен для написания. Если у вас обязательно должен быть C ++-интерпретатор, CINT, вероятно, хорошая ставка.

    Существует цельный проект Cern для переводчика C ++ на основе clang – это новый подход, основанный на 20-летнем опыте работы с ROOT cint, и он довольно стабилен и рекомендован парнем Cern .

    Вот хороший Google Talk: Знакомство с cling, C ++ Interpreter на основе clang / LLVM .

    cint – командный процессор для пакета анализа физики частиц ROOT . Я использую его регулярно, и он работает очень хорошо для меня.

    Это довольно полно и хорошо справляется с скомпилированным кодом (вы можете загружать скомпилированные модули для использования в интерпретаторе …)

    late edit :: Скопировано из более позднего дубликата, потому что плакат по этим вопросам, похоже, не хочет размещать здесь: igcc . Никогда не пробовал это лично, но веб-страница выглядит многообещающей.

    Я (около года назад) играл с Ch и нашел, что это очень хорошо.

    Давным-давно я использовал интерпретатор C ++, называемый CodeCenter. Это было довольно хорошо, хотя он не мог справиться с такими вещами, как бит-поля или причудливое манипулирование указателями. Эти две интересные вещи касались того, что вы могли наблюдать, как изменяются переменные, и что вы можете оценивать код C / C ++ на лету во время отладки. В эти дни, я думаю, что отладчик, такой как GDB, в основном так же хорош.

    Также давно я использовал вызов продукта Instant C, но я не знаю, что он когда-либо развивался

    Я посмотрел, как использовать ch некоторое время назад, чтобы посмотреть, могу ли я использовать его для DLL для тестирования черного ящика, за что я несу ответственность. К сожалению, я не мог понять, как заставить его загружать и выполнять функции из DLL. Опять же, я не был таким мотивированным, и вполне может быть способ.

    Существует программа c-repl, которая работает путем многократной компиляции вашего кода в разделяемые библиотеки с использованием GCC, а затем для загрузки результирующих объектов. Кажется, он быстро развивается, учитывая, что версия в репозитории Ubuntu написана в Ruby (не считая GCC, конечно), в то время как последний git находится в Haskell. 🙂

    Interesting Posts

    Уравнения Word 2010 меняют без моего одобрения

    Можете ли вы объяснить принцип замены Лискова хорошим примером C #?

    Как использовать перфорирование отверстий UDP для туннеля / сеанса SSH

    Как создать пользовательские методы для использования в выражениях выражения выражения весны безопасности

    Сравнение изображений с OpenCV в Android

    Также Accent Mark находится на клавиатуре

    вложенный тип не может скрывать закрытый тип

    Post-Redirect-Получить с помощью ASP.NET

    C # JSON Сериализация словаря в {key: value, …} вместо {key: key, value: value, …}

    Awesome Window Manager – Open Chromium Developer Tools на разных экранах, чем Chromium

    Как выбрать страtagsю генерации идентификатора при использовании JPA и Hibernate

    Можно сохранить процесс как файл дампа на диск, а затем перезагрузить процесс позже?

    Как я могу выполнить что-то только один раз за запуск приложения?

    Как регистрировать производительность всех процессов в Windows 7?

    Развертывание и настройка ODP.NET для работы без установки с Entity Framework

    Давайте будем гением компьютера.