3

我正在尝试为以下想法确定现有技术:

1) 用户使用称为 (insert_name_here) 的语言键入一些代码;

2) 用户从知名输出候选列表(javascript、ruby、perl、python)中选择目标语言;

3) 处理器将 insert_name_here 翻译成目标语言的可运行代码;

4) 处理器然后使用基于所选语言的相关系统调用运行代码

这样做的原因是因为在从 insert_name_here 到所有受支持的目标语言的所有语言结构之间存在预先建立的 1 对 1 映射。

免责声明:这显然不会产生针对目标语言量身定制的“优雅”代码。它只是做了一个可运行的基本翻译。目的是让开发人员在几种不同的语言用于那些他们不想重新发明轮子但出于某种原因需要在特定项目中使用特定语言的情况。)

这已经存在了吗?

4

5 回答 5

5

.NET CLR 的设计使得 C++.Net、C#.Net 和 VB.Net 都可以编译为相同的机器语言,并且您可以将该 CLI“反编译”回这些语言中的任何一种。

所以是的,我会说它已经存在,尽管不完全像你描述的那样。

于 2008-12-03T21:57:34.433 回答
3

有适用于不同语言的转换器。您将遇到的问题是处理库。虽然语言语句之间的映射可能很容易,但找到库函数之间的映射将非常困难。

我不太确定这种类型的代码生成器会有多大用处。为什么你想用一种语言写一些东西,然后立即将它转换成另一种语言?我可以看到将图表或模型转换为代码的第 4 代语言的基本原理,但我并没有真正看到您的努力的意义。

于 2008-12-03T22:05:36.350 回答
3

是的,确实存在将程序从一种表示形式转换为另一种表示形式的程序。它被称为“编译器”。

至于您的问题是否总是可能的:只要您的目标语言至少与源语言一样强大,那么就有可能。因此,如果您的目标语言是图灵完备的,那么总是有可能的,因为没有比图灵完备的语言更强大的语言了。

但是,不需要一个愚蠢的 1:1 映射。

例如:将 CIL 字节码编译为 JavaScript 源代码的 Microsoft Volta 编译器有一个问题:.NET 有线程,而 JavaScript 没有。但是您可以实现带有延续的线程。好吧,JavaScript 也没有延续,但是您可以实现带有异常的延续。因此,Volta 将 CIL 转换为 CPS,然后在异常情况下实现 CPS。(较新版本的 JavaScript 具有生成器形式的半协同程序;这些也可以使用,但 Volta 旨在跨广泛的 JavaScript 版本工作,显然包括 Internet Explorer 中的 JScript。)

于 2008-12-04T08:22:57.603 回答
2

这似乎有点奇怪。如果您以最常见的形式使用术语“现有技术”,那么您正在讨论一个可能获得专利的想法。如果这种情况,您有:

1/ 发表了这个想法,开始计时专利申请 - 我假设,也许是错误的,你在美国 其他司法管辖区可能有其他规则。

2/ 告诉整个星球你的想法,这意味着尝试申请专利几乎没有用,除非你行动得很快。

如果您没有考虑为此申请专利,而只是在外行意义上使用“现有技术”一词,我深表歉意。我在一家非常重视专利的公司工作,它非常详细地向我们灌输了在提交之前我们可以对信息进行的处理。

话虽如此,可专利的想法必须是新颖的、有用的和非显而易见的。我认为您的想法不会通过其中的第三个,因为您正在描述一种语言翻译器,该翻译器将具有许多 pascal-to-c 和 fortran-to-c 转换器的现有技术。

一线希望是您的想法能够生成多种输出语言中的一种(p2c 和 f2c 不这样做),但我认为即使是这样,交叉编译器(如 gcc)也会涵盖源到许多不同的对象语言之一。

IBM 有一个名为 Visual Age Generator 的产品,您可以在其中使用一种(专有)语言进行编码,并将其转换为 COBOL/C/Java/其他语言,以在从 PC 到大型系统 z 大型机的不同目标平台上运行,所以这是您的第一个问题(考虑为世界上最大的专利商 IBM 已经在使用的想法申请专利)。

于 2008-12-03T23:07:36.537 回答
2

成吨的。p2c、f2c 以及 C++ 和 Objective C 的原始实现立即让我印象深刻。除此之外,很难将您所描述的内容与任何编译器区分开来,尤其是对于我们这些老家伙,他们的编译器无论如何都会生成 ASM 代码以进行中间表示。

于 2008-12-03T23:54:37.830 回答