AspectJ使用新概念扩展了Java语言。
是否有其他语言可以同时扩展多种语言?如果是这样,请举个例子。
编辑:我不太清楚。 Java程序仍被认为是正确的AspectJ程序。
我正在寻找这种延伸:
扩展A
和B
的语言C
,但仅在B
或C
中编写的程序仍然是{{{{}的有效程序1}}。
答案 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等)针对各种平台,因此可以说是扩展这些平台的主要语言。可能还有很多其他人。