是否有编程语言同时扩展多种语言? [编辑问题]

时间:2011-02-05 14:19:49

标签: programming-languages

AspectJ使用新概念扩展了Java语言。

是否有其他语言可以同时扩展多种语言?如果是这样,请举个例子。


编辑:我不太清楚。 Java程序仍被认为是正确的AspectJ程序。

我正在寻找这种延伸:

扩展AB的语言C,但仅在BC中编写的程序仍然是{{{{}的有效程序1}}。

3 个答案:

答案 0 :(得分:2)

PFront(及其基础语言MBase)扩展了多种目标语言 - 直接.NET CLR(通过类似Csharp的嵌入式DSL),运行在此CLR之上的Lisp和LLVM IR (并且实际上是LLVM支持的任何目标平台)通过类似C的嵌入式DSL。

在此框架内创建的任何语言都可以针对任何底层平台或语言,并且可以使用其他语言进行扩展 - 即语言形成层次结构,每种新语言都扩展一种或多种已定义的语言。

更新:反映更新的问题 - 有两种方法可以在pfront中扩展语言。首先,通过添加新的结构和表单,明确地扩展语言。其次是实现仅允许目标语言的子集的语言的受限超集。两种方式都被使用 - 例如,大多数Csharp程序都是PFront的有效子集,以及Lisp程序。

答案 1 :(得分:1)

Clojure是一个在JVM上运行的Lisp方言。 JRuby是在JVM上运行的Ruby实现。 Scala是一种非常酷的语言(你猜对了!)也在JVM上运行。所有人都可以调用现有的Java API,因此您可能会考虑“扩展”Java语言。

答案 2 :(得分:0)

Fantom是一种面向对象的语言,它面向JVM(因此可以说是“扩展Java”),CLR(因此可以说是“扩展C#”)和JavaScript(并且可以因此可以说,“扩展JavaScript”)。

Mercury是一种逻辑编程语言,其目标是C(因此可以说是“扩展C”),Java(因此可以说是“扩展Java”),C#(因此可以说是“扩展C#”)和Erlang(因此可以说是“扩展Erlang”)用于四个当前活跃的后端。

这是我头脑中的两种语言。如果你眯着眼睛我确信你可以说Ruby是这样做的,因为各种方言(Ruby,JRuby,IronRuby等)针对各种平台,因此可以说是扩展这些平台的主要语言。可能还有很多其他人。