用标准C或C ++编写的口译员

时间:2012-01-27 23:27:40

标签: c++ c interpreter

是否有任何可扩展的解释型编程语言是用标准的,独立于平台的C或C ++编写的?

我希望能够简单地将所有源代码放在一个目录中,使用任何符合标准的C或C ++编译器编译源代码,并生成一个可执行文件,用指定的脚本语言读取和解释脚本文件。

似乎许多编程语言“用C语言编写”通常包含许多依赖于它们所在平台的功能,因此,需要一些配置程序来运行基于您的目标系统(例如Autoconf),这会使问题复杂化限制跨平台兼容性。

提问的理由:

我有兴趣学习编程语言设计。在完成了涉及yacc,lex和llvm的教程之后,我玩了一些玩具编程语言。然而,最近我对研究用可移植C / C ++编写的编程语言感兴趣,因此,我可以在任何支持标准C或C ++编译器(甚至可能在我的ipad上)的机器上研究程序和代码,有一个相当统一的经验。

由于这只是出于教育目的,脚本语言不需要支持像C这样的超低级功能,也不需要像Java一样使用GUI(我不认为你可以编写任何类型的GUI限制无论如何要使用标准C / C ++)或任何复杂的io。但是,我希望语言足够完整,以便在语言中编写一些有用的程序是可行的(例如,应该可以使用C / C ++扩展语言,以便您可以像tty上的shell一样使用它)

感谢。

编辑:

@AndréCaron如果至少语言的核心是100%独立于平台,我会更喜欢它。如果该语言包含一个依赖于其他库以使其“更有用”的大型标准库,那就没关系了,但是,我希望能够剥离标准库并仅使用该语言的核心(可能使用自定义)手写的图书馆)如果我想。

4 个答案:

答案 0 :(得分:9)

也许embedded Lua

实际上core Lua本身可能更好。乍一看,虽然eLua声称它在许多不同的系统上运行意味着它具有高度可移植性,但事实上它需要核心Lua并添加了一堆硬件驱动程序,这显然不那么便携。

Ocaml将是另一个很好的选择。它声称"The bytecoded system currently runs on any POSIX-compliant operating system with an ANSI-compliant C compiler"而且Caml Light特别适合学习。 “运行时系统和字节码解释器是用标准C编写的,因此Caml Light很容易移植到几乎任何32或64位平台。”

答案 1 :(得分:7)

Lua真的是你最好的选择。核心Lua解释器尽可能简约。发行版包含一个makefile,但它的内容与它一样简单。甚至还有说明解释了构建核心语言所需的文件,哪些是Lua标准库,哪些是命令行解释器。

核心语言本身不会触及任何特定于平台的API或标头。标准库可以,但只能以最小的方式。如果你不喜欢它,你就不会拥有来构建标准库。

您可以使用一些#defines来配置构建,但这主要用于构建DLL之类的东西。

注意:autotools和其他特定于平台的构建配置实用程序的目的是允许库有效地将平台特定的东西包含在平台中立的界面中。在具有纯平台中立的C或C ++标准库的大多数平台上,您无法做很多事情。您甚至无法访问目录树并搜索文件,更不用说打开窗口这些非常有用的东西了。对于简单的stdin / stdout应用程序,这可能就足够了。但对于绝大多数情况而言,事实并非如此。

我的建议是你习惯于为特定平台配置构建。除非您的域名是科学应用程序(在某些情况下,甚至不是那样),否则您不会从平台无关的编程中获得太多。你将不得不学习使用这些类型的库。

对于图书馆来说,Lua是一个异常值。大多数库都不是文件列表,您只需将其推入目录并进行编译即可。你越早弄清楚如何使用图书馆使用的工具,你就会越好。

答案 2 :(得分:0)

LUA和TCL是两种最简单的解释语言,因此请获取这两种语言的源代码副本并进行检查。但是,我认为您的问题与静态链接和共享链接更相关。静态链接的程序除了内核接口之外没有系统依赖性,但动态链接的程序会重新定义要安装的正确的共享库集。

使用像Python这样的语言,您需要担心Python自己的库(称为模块)以及模块所依赖的任何二进制共享库。 Python本身通常使用共享库构建,但it can be built statically。另外,我在自己的文件夹层次结构中构建了一个Python二进制文件that uses the Linux shared library RUNPATH feature so that all binary dependencies can be bundled with Python

如果您的问题更多是关于链接,请查看与标准动态Python和使用RUNPATH的Pybuild构建脚本相比如何构建StaticPython。

答案 3 :(得分:0)

几乎所有最近的脚本语言都是用CC++编写的:Perl,bash,csh,PHP,html,Javascript,make,vim,tcl等等。

构建它们需要配置这一事实并不是解释器的一个特征,因为它适用于在多个平台上构建 - 通常被视为是一件好事。

在您可以编写创建新功能的函数的意义上,它们都是可扩展的。