可运行的伪代码?

3

我正在尝试确定以下想法的先前技术:

1) 用户在一种名为(insert_name_here)的语言中输入一些代码;

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

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

4) 然后,处理器根据所选择的语言使用相应的系统调用来运行代码。

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

免责声明:这显然不会产生“优美”的代码,也不会很好地适应目标语言。它只是进行了基本的翻译,以便开发人员能够快速地在几种不同的语言中实现算法,用于那些情况下他们不想重新发明轮子,但由于某种原因需要在特定项目中使用特定语言。)

这已经存在了吗?

5个回答

5
.NET CLR被设计成C++.Net、C#.Net和VB.Net都可以编译成相同的机器语言,并且你可以将CLI“反编译”回任何一种语言。所以,是的,我认为它已经存在了,虽然不完全符合你的描述。

1
确实,使用Red Gate的Reflector工具,您可以轻松地在不同编程语言之间进行转换。 - Greg Beech
很不幸,软件专利系统是建立在“并非完全按照您描述的方式”上的。您可以将一个两步骤的过程变成一个一步骤的过程,并使其具有专利性。 - paxdiablo

3
有适用于不同语言的转换器。你将面临的问题是处理库。虽然在语句之间进行映射可能很容易,但在库函数之间查找映射将非常困难。
我不确定那种代码生成器有多有用。为什么要用一种语言编写某些内容,然后立即将其转换为其他语言呢?我可以理解将图表或模型转换为代码的4GL语言的合理性,但我真的看不出你的努力有什么意义。

3
是的,存在一种将程序从一种表示形式转换为另一种表示形式的程序,它被称为“编译器”。
至于你是否总是可以这样做:只要你的目标语言至少与源语言一样强大,那么就可能。因此,如果你的目标语言是图灵完备的,那么就总是可能的,因为没有比图灵完备语言更强大的语言。
然而,并不需要愚蠢的1:1映射。
例如:微软Volta编译器将CIL字节码编译为JavaScript源代码时会遇到问题:.NET有线程,JavaScript没有。但是你可以使用continuations实现线程。好吧,JavaScript也没有continuations,但是你可以使用exceptions来实现continuations。因此,Volta将CIL转换为CPS,然后使用exceptions实现CPS。(JavaScript的新版本具有生成器形式的半协程;这些也可以使用,但是Volta旨在跨越广泛的JavaScript版本工作,包括Internet Explorer中的JScript。)

2
这似乎有些离奇。如果你使用"先前技术"一词的最常见形式,那么你正在讨论一个可能受专利保护的想法。如果是这样的话,你需要:
1/ 发布了这个想法,开始专利申请的计时 - 我假设,也许不正确,你可能在美国。其他司法管辖区可能有其他规定。
2/ 告诉整个地球你的想法,这意味着试图获得专利几乎是没用的,除非你行动非常迅速。
如果你不考虑对此进行专利申请,只是以普通人的方式使用"先前技术"一词,我很抱歉。我为一家非常重视专利的公司工作,我们被深入地灌输了,在提交申请之前可以用哪些信息。
话虽如此,可专利的想法必须是新颖、有用且非显而易见的。我认为你的想法在第三个方面不会通过,因为你正在描述一种语言翻译器,而这已经有了许多pascal到c和fortran到c的转换器的先前技术。
唯一的希望是你的想法能够生成多种输出语言(p2c和f2c都做不到),但我认为即使是这样也会被交叉编译器(如gcc)覆盖,它们将源代码转换成多种不同的目标语言。
IBM有一个名为Visual Age Generator的产品,你可以使用一种(专有)语言编码,然后将其转换为COBOL/C/Java等以在不同的目标平台上运行,从个人计算机到巨大的System z主机,所以你的第一个问题就来了(考虑专利申请IBM已经在使用的想法,而IBM是世界上最大的专利申请者)。

2

有很多种编译器。p2c、f2c以及C++和Objective C的原始实现马上就能让我想起来。除此之外,很难把你所描述的与其他编译器区分开来,特别是对于我们这些编译器生成了中间表示的老手。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接