当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《你使用过任何C++解释器(不是编译器)吗?》经验,为你挑选了4个好方法。

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



1> Shep..:

注意:接下来是CINT特定的,但考虑到它可能是最广泛使用的 C++解释器,它可能对它们都有效.

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

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

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

    调试消息比g ++生成的消息更加神秘.

    范围与编译的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来编写脚本.

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

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


虽然您对cint的所有投诉都是完全有效的(而且您错过了一些),但您可以接受我的说法,即PAIS的COMIS解释器更糟糕.此外,PAW提供了一个适当的交互式绘图环境 - 它只是具有你期望的Fortran 77编码风格的缩放问题.
@Sergei我不知道我是否理解你:解释器比编译代码慢

2> Grzegorz Wie..:

还有就是坚持 CERN的项目基于C++解释的铛 -这是新的方法基于20年的经验ROOT CINT这是相当稳定的,由欧洲核子研究中心的家伙建议.

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


Cling实际上是通过交互式编译来工作的,它更像是JIT编译器而不是解释器.此外,作为"CERN家伙",我觉得有必要评论"CERN家伙推荐":我们中的许多人都认为,经过20年ROOT的主要教训是基于单一语言(C++)的单片软件(ROOT)是一个错误.Cling对于那些继续将C++作为全部语言进行战争的人来说是一个很好的拐杖,但是我们并不是在另一个C++解释器上躲避CINT:对于互穿代码,你可以做得比C++好得多,使用Python或Ruby.

3> dmckee..:

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

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

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


我认识几个物理学专业的研究生,他们使用cint/root进行大部分编码,虽然他们并不总是有好的东西可以说它满足了他们对性能和灵活性的需求.
@littlenag说根"满足[我们]需要"有点慷慨.该框架在几个基本层面上存在严重缺陷,并且只能继续广泛使用,因为它完全是非模块化的,因此几乎不可能删除.当你想要做的就是在数据文件中读取时,CINT就是你要安装的东西的一个主要例子.

4> Alan..:

我(大约一年前)与Ch一起玩耍,发现它相当不错。

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有