it-swarm.cn

你使用过任何C++解释器(不是编译器)吗?

我很好奇是否有人使用过UnderC,Cint,Cling,Ch或任何其他C++解释器并且可以分享他们的经验。

67
Allan Wind

注意: 后面的内容是CINT特定的,但鉴于它可能是最 广泛使用 C++解释器,它可能对它们都有效。

作为一名广泛使用CINT的粒子物理专业的研究生,我应该警告你。虽然它确实“有效”,但是 正在逐步淘汰 ,而那些在粒子物理学上花费一年多时间的人通常会因为以下几个原因而学会避免它:

  1. 由于其作为C解释器的根源,它无法解释C++的一些最关键的组件。例如,模板并不总是有效,因此不鼓励使用使C++如此灵活和可用的东西。

  2. 它比最低限度优化的C++慢(至少5倍)。

  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框架中,因此CINT仍在使用的事实可能更具历史意外。回到它写的时候(20年前),真正需要一种用于交互式绘图/拟合的解释语言。现在有很多软件包可以填充这个角色,其中很多都有数百个活跃的开发人员。

这些都不是用C++编写的。为什么?很简单,C++并不意味着被解释。例如,静态类型可以在编译期间为优化带来巨大的收益,但如果只允许计算机在运行时看到它,则主要是为了使代码混乱和过度约束。如果您能够使用解释性语言,学习Python或Ruby,那么即使您已经了解C++,您学习的时间也会比您在CINT上失败的要少。

根据我的经验,使用ROOT(您必须安装以运行CINT的软件包)的老研究人员最终将ROOT库编译为普通的C++可执行文件以避免CINT。年轻一代的人要么遵循这个主导,要么使用Python来编写脚本。

顺便说一下,R​​OOT(以及CINT)大约需要半个小时才能在相当现代的计算机上进行编译,并且偶尔会因新版本的gcc而失败。它是多年前一个重要目的的包装,但现在它显然已经显示出它的年龄。查看源代码,你会发现数百个不赞成的c风格的演员表,类型安全的巨大漏洞,以及大量使用全局变量。

如果您要编写C++,请编写C++,因为它是要编写的。如果你绝对必须拥有C++解释器,那么CINT可能是一个不错的选择。

29
Shep

cling Cern的项目 基于 clang的C++解释器 - 它是新方法基于20年的经验ROOT cint它非常稳定,并由Cern家伙推荐。

这是Nice Google Talk:介绍cling,一个基于clang/LLVM的C++解释器

23
Grzegorz Wierzowiecki

cint是粒子物理分析包的命令处理器 _ root _ 。我经常使用它,它对我来说非常好用。

它相当完整,并且可以很好地使用已编译的代码(您可以加载已编译的模块以便在解释器中使用...)

晚编辑:: 从以后的副本复制,因为那些问题的海报似乎不想在这里发布: igcc 。从来没有亲自尝试过,但网页看起来很有希望。

19
dmckee

我(大约一年前)玩过 Ch 并发现它非常好。

4
Alan

很久以前,我使用了一个名为CodeCenter的C++解释器。这很不错,虽然它无法处理像bitfields或花式指针修改这样的东西。关于它的两个很酷的事情是,你可以观察变量何时发生变化,以及你可以在调试时动态评估C/C++代码。这些天,我认为像GDB这样的调试器基本上同样好。

2
jfm3

很久以前我用了一个产品叫做Instant C,但我不知道它有进一步的发展

2
user11269

有一个名为 c-repl 的程序,它通过使用GCC将代码重复编译到共享库中,然后加载生成的对象来工作。它看起来很快发展,考虑 Ubuntu的存储库中的版本 是用Ruby编写的(当然不算GCC),而 最新的git 在Haskell中。 :)

0
Matthew Flaschen

我看了一会儿使用ch,看看我是否可以用它来测试我负责的黑盒测试DLL。不幸的是,我无法弄清楚如何从DLL加载和执行函数。然后,我没有那么积极,可能有办法。

0
Jon Trauntvein