“代码生成器”和“编程语言”之间并没有明显的区别。如果你使用软件生成代码,你就是在编程,即使你不了解细节。 C++、Java 和 C# 是“代码生成器”,因为它们被编译成低级语言,如果程序员选择这样做,这些低级语言本身可以手动编码。许多编程语言一开始是作为宏工具开始的,使用基于 XML 的工具编写脚本并不比用 Perl、Python 或 Ruby 编写相同的脚本更不像“程序”。
一般来说,通过使用软件生成高度重复的代码来节省时间是个好主意。潜在的缺点是您可能会将自己锁定在一个平台中——也就是说,您仅限于代码生成器提供的功能。代码生成器(或编程语言)是否值得使用完全取决于它对给定问题的有效性。
不要误以为某些格式(例如 XML 甚至 HTML)是死“数据”,而其他格式(例如 C++ 和 Python)是“代码”。数据和代码是可以互换的。需要 HTML 中的“代码”示例吗?考虑以下几点:
HTML 是一种声明性语言。在其中,您以“这是一个段落,这是一个标题”等方式指定存在的事物。 Python 和其他编程语言具有命令式部分,您可以在其中指定“现在添加 x 和 y,现在将 x 写入内存”等等。
但是,您可以颠倒这种关系。在 HTML 的情况下,当通过浏览器输入时,它变得势在必行。 “这是一个具有这些属性的段落”被 Firefox 解释为“现在使用这些参数呈现一段文本”。作为一个文件,HTML 只是死数据,但在解释器的上下文中,它变成了活代码。反过来,Python 也会发生同样的情况。在执行期间,您的 Python 指令成为解释器的指令,但 Python 文件本身只是死文本。从某种意义上说,您的 Python 程序作为数据形式的潜在指令的集合坐在那里,直到您通过 Python 解释器运行它。以完全相同的方式,HTML 以数据的形式存在于文件中,直到浏览器对其进行操作。
XML 是一种数据格式,但指令是一种数据。您可以使用 XML 来包含命令式语句,例如数学运算或函数调用。您是否将该 XML 解释为数据或代码完全取决于上下文;从某种意义上说,所有计算机数据既是数据又是代码。数据和代码之间的区别是人类的惯例,而不是计算机固有的现实。
编辑:我想我应该在这里承认,在处理器架构级别上,代码和数据之间通常存在非常具体的区别。代码是通过处理器内核输入并改变机器状态的东西。典型的体系结构将等待执行的位与不代表可执行代码的其他数据保持在单独的内存区域中。但是,当您开始谈论口译员时,这种区别很快就会变得模糊。