是用C+编写的*任意*流行编程语言解释器的主要实现+;? 目前我正在考虑是否重写我在C++中维护的一个程序语言解释器。解释器目前是用C语言实现的 但是我想知道,主要的实现是因为,人们已经使用了一种语言,而不是使用目前使用的任何流行的编程语言解释器的原始作者使用的语言,而这些语言是用C++编写的。 如果没有,有没有一个很好的理由来解释C++中的解释器?我的理解是,C++代码如果写得正确,可以非常便携,并且可以编译成运行速度和编译C代码一样快。同样的事情。 < P>最流行的编程语言是在有很多优秀的C++编译器之前创建的。因此,这些语言的主要解释器不是在C++中启动的,一旦你把大量的工作放到了一个工作解释器中,你通常不会把它扔掉,因为它现在也可以用C++编写。 如果你开始用C++编写一个新的翻译程序,它就必须要成为一个主要的实现方式。 < P> GNU基金会刚刚宣布,所有的GCC新版本都将用C++编写。 < P>如果你写了当前的实现,并且正如你在评论中所说的,它有:

是用C+编写的*任意*流行编程语言解释器的主要实现+;? 目前我正在考虑是否重写我在C++中维护的一个程序语言解释器。解释器目前是用C语言实现的 但是我想知道,主要的实现是因为,人们已经使用了一种语言,而不是使用目前使用的任何流行的编程语言解释器的原始作者使用的语言,而这些语言是用C++编写的。 如果没有,有没有一个很好的理由来解释C++中的解释器?我的理解是,C++代码如果写得正确,可以非常便携,并且可以编译成运行速度和编译C代码一样快。同样的事情。 < P>最流行的编程语言是在有很多优秀的C++编译器之前创建的。因此,这些语言的主要解释器不是在C++中启动的,一旦你把大量的工作放到了一个工作解释器中,你通常不会把它扔掉,因为它现在也可以用C++编写。 如果你开始用C++编写一个新的翻译程序,它就必须要成为一个主要的实现方式。 < P> GNU基金会刚刚宣布,所有的GCC新版本都将用C++编写。 < P>如果你写了当前的实现,并且正如你在评论中所说的,它有:,c++,c,interpreter,C++,C,Interpreter,笨拙的符号处理和大量的 内存泄漏 在C++中改写对你没有帮助。首先,尝试理解当前实现出错的原因。另一方面,如果您不是最初的开发人员,那么只需选择您最熟悉的语言和端口即可 更新: 我认为,为什么许多语言是用C语言实现而不是C++来解释的。关于完全重写的话题,< P>我在C++中编写了一个解释器(经过多年的C语言),我认为C++是一个很好的语言。关于实现,我只想回到过去,改变我对实现的选择,让几个不同的解释器同时运行(每个解释器都是多线程的),因为这会使代码更加复杂,而且这是从未使用过的。多线程是非

笨拙的符号处理和大量的 内存泄漏

在C++中改写对你没有帮助。首先,尝试理解当前实现出错的原因。另一方面,如果您不是最初的开发人员,那么只需选择您最熟悉的语言和端口即可

更新:
我认为,为什么许多语言是用C语言实现而不是C++来解释的。关于完全重写的话题,

< P>我在C++中编写了一个解释器(经过多年的C语言),我认为C++是一个很好的语言。关于实现,我只想回到过去,改变我对实现的选择,让几个不同的解释器同时运行(每个解释器都是多线程的),因为这会使代码更加复杂,而且这是从未使用过的。多线程是非常有用的,但是解释器的多个实例是毫无意义的

然而,现在我最大的遗憾是,我编写了这个解释器,因为现在它在生产中使用,有相当数量的代码编写和人员接受过培训,而且因为这种语言比python更丑陋,功能也更弱。。。但现在转向python会增加成本。我不知道它有什么虫子。。。但是它比python更糟糕,这是一个bug(除了无理由支付编写成本的错误之外)

我最初应该使用python(或者lua或任何其他易于嵌入且具有合理许可证的现成解释器)。。。我唯一的理由是当时我不知道python或lua

虽然编写解释器作为编程练习是一件很有趣的事情,但我建议您避免为生产编写自己的解释器,特别是(请不要把它当作个人问题)如果低级别复杂度所需的注意超出了您的能力范围(例如,我发现存在多个内存泄漏非常令人震惊)

C++仍然是一种低级语言,虽然您可以获得一些帮助,例如在内存处理方面,但该语言的主要假设是您的代码是100%正确的,因为没有运行时错误会帮助您(只有未定义的行为守护进程)


<>如果你错过了C(100%个简单的语言)的正确的代码的假设,那么我不知道你怎么能自信你会在C++中编写正确的代码(比较复杂的怪物)。我怀疑你最终会有另一个BUGGY解释器,你必须扔掉。

< P> Adobe和Mozilla EcMAScript解释器是用C++编写的。作为原始语言作者负责的一个,它可能被认为是主要的一个(IIRC ECMA参考实现是用OCaml编写的,但除了作为参考之外,它实际上没有被使用)

Google Chrome V8 Javascript引擎实现ECMA-262,速度非常快。也许你可以用C++重写,但是你应该考虑其他的特性,比如实现字节码规范,而不是在C++中改写你的自动化。重写它只会有助于组织代码(这对于小组工作来说是一件好事),但在性能方面却没有任何帮助。

是的,很多都是这样。IIVC热点C++ java是用C++编写的,Haskel-GHC,… 正如这里的许多人指出的,您应该真正了解一下,它是一个用于构建编译器、解释器和虚拟机的工具包。您基本上完成了前端工作(即解析您的语言+语义分析+LLVM IR中的codegen),LLVM将立即为您提供针对不同平台的构建、jit、优化、编译为本机代码等功能。。。
它还具有一些解析和AST的工具,以及错误处理和通知(但可能是CLAN子项目的一部分)。

< P>太阳的java实现似乎主要是C++编写的。

< P>如果内存泄漏是当前程序的唯一问题,那么尝试ValGRAND。我的软件从来没有出现过valgrind无法为我追踪的内存泄漏。事实上,它在很多场合都救了我的命

这里有一个教程

我想我不能(或不想)给这条毯子说“是”。我认为这是一个实用主义的问题,结合了个人语言的需要,也取决于它是编译语言(或字节码编译)还是解释语言,或者

如果您试图编写跨平台代码,您会发现最低公分母i