人们今天使用的可扩展语言是什么?

时间:2009-12-17 20:31:17

标签: language-agnostic extensible

维基百科说:

  

可扩展编程是计算机科学中用来描述计算机编程风格的术语,它侧重于扩展编程语言,编译器和运行时环境的机制。

例如,Tcl允许您编写自己的控制结构。请参阅here

我有兴趣编译正在实际代码中使用的可扩展编程语言列表。如果你能为你的语言提供一个例子,那就太好了。

7 个答案:

答案 0 :(得分:4)

LISP系列中的语言(Common Lisp,Guile等)非常可扩展 - 比我曾经使用的任何其他语言都要多。可以把它想象成类固醇的C宏系统。如果你觉得无聊,可以将+运算符重新定义为减法:现在这是可扩展性的!

LISP在许多地方已经不再流行,但Guile(Scheme的方言)是GNU Project的官方扩展语言。

答案 1 :(得分:3)

Ruby并不是一种严格意义上的可扩展语言,但语法灵活且功能强大,如果你眯眼,它看起来就像是......对于很多目的而言,它已经足够好了。

无论如何,人们实际上使用Ruby: - )

答案 2 :(得分:1)

Scala也不是严格可扩展的,但你可以定义看起来像运算符的东西。例如,在定义Map时,您可以使用:

val romanNumeral = Map(
    1 -> "I", 2 -> "II", 3 -> "III"
)

- >实际上是一个在对象1上调用的方法,但看起来像一个操作符。

答案 3 :(得分:1)

Jetbrains MPS (Meta-programming System)提供基于投影编辑器的可扩展语言工作台。它可以帮助您为语言扩展创建编辑器,类型系统,约束,重构和代码生成器。它附带了一些Java语言实现和扩展。

mbeddr是使用此技术的C实现。它具有组件系统,发送/接收+客户端/服务器接口,依赖注入,状态机,测试和PLE扩展。它还包含一个可扩展的调试系统,因此您可以将扩展映射到gdb并提供舒适的调试体验。几乎所有的C语言特性都被映射,因此代码生成主要可以通过简化为C构造而不是哑巴M2T转换来处理。

Aynth是一个简单的单声道合成器,使用mbeddr编写,用于演示组件和发送/接收接口。

无论如何,如果您使用它,首先要注意的是,在许多情况下,投影编辑不如文本编辑那么舒服。我们习惯于基于文本的编辑。但可扩展的语言有很多好处。

答案 4 :(得分:1)

关于Extensible programming的维基百科文章提到了语言Seed7。 Seed7的维基百科文章将其描述为:

  

除了许多其他功能外,它还提供了一种扩展机制。 Seed7支持在语言中引入新语法及其语义,并允许使用Seed7语言本身定义新的语言结构。例如:程序员可以引入新语句的语法和语义以及用户定义的运算符符号。

Seed7被设计为从头开始的可扩展语言。整个语言在编译器中没有硬编码。而是在库中定义Seed7,它们在编译程序时加载。恕我直言Seed7是唯一的语言,其中可扩展性是一个基本功能,其他一切都是基于它。其他方法使用传统语言,编译器使用硬编码语法和语义分析,并在其上加入一些扩展机制。

答案 5 :(得分:0)

Jeebox是一种可扩展的语言,可以描述任何内容,包括代码。

它现在纯粹用于描述事物......

但是,可扩展的编程语言可以很容易地在Jeebox上构建。

(我正在Jeebox上构建一个普通的,不可扩展的编程语言,仅仅因为将可扩展性构建到编程语言中不仅仅是一种语言特性。它需要一种递归,你可以编写可以创建的代码正确地执行此操作需要的时间比我可用的时间长。但很高兴知道我正在使用的语言Jeebox可以支持这一点,一旦我有时间这样做。)

答案 6 :(得分:0)

TCL language是一种动态语言,只有fundamental rules

Tcl的精神是"Everything is a string", "everything is a command",甚至是控制流程结构。

例如,让我们用自定义的循环替换while循环。

# rename original while to orig_while for future usage.
rename while orig_while; 

#redefine while
proc while {cond body} {
# add customization code

# calculate while call count.
global while_call_count;
incr while_call_count;

# call original while in uper level stack 
 uplevel orig_while $cond $body;

# add customization code
}

Tcl有C language interface,它允许很容易地将Tcl集成到存在的程序中。 Tcl非常广泛地用于EDA tools

最后TCL如此强大以至于无法定义Tcl BNF,这会带来lot of headaches