3

维基百科说:

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

例如,Tcl 允许您编写自己的控制结构。见这里

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

4

7 回答 7

5

LISP 家族中的语言(Common Lisp、Guile 等)具有极强的可扩展性——比我使用过的任何其他语言都强。把它想象成类固醇上的 C 宏系统。如果你够无聊,你可以将 + 运算符重新定义为减法:现在这就是可扩展性!

LISP 在许多地方已经过时,但Guile(Scheme 的一种方言)是GNU 项目的官方扩展语言。

于 2009-12-17T20:39:57.473 回答
3

Ruby 并不是严格意义上的可扩展语言,但其语法足够灵活和强大,如果你眯着眼睛看,它看起来就像是……对于许多用途来说,这已经足够好了。

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

于 2009-12-17T20:33:58.467 回答
1

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

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

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

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

于 2013-05-13T14:51:04.863 回答
1

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

纯粹是用来形容事物的,现在...

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

(我在 Jeebox 之上构建了一种普通的、不可扩展的编程语言,仅仅是因为将可扩展性构建到编程语言中不仅仅是一种语言特性。它需要一种递归,您可以在其中编写可以创建更多代码的代码。正确地做到这一点需要比我可用的时间更多的时间。但是很高兴知道我使用的语言 Jeebox 可以支持这一点,一旦我有时间去做。)

于 2013-03-16T15:20:24.633 回答
1

Scala 也不是严格可扩展的,但您可以定义看起来像运算符的内容。例如,在定义地图时,您可以使用:

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

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

于 2009-12-17T20:42:31.133 回答
1

关于可扩展编程的 Wikipedia 文章提到了语言Seed7。Seed7 的维基百科文章将其描述为:

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

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

于 2014-06-18T12:48:29.533 回答
0

TCL 语言是一种动态语言,基本规则很少:

Tcl 的精神是“一切都是字符串”,“一切都是命令”,甚至是控制流构造。

例如,让用自定义循环替换 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 语言接口,可以很容易地将 Tcl 集成到现有程序中。Tcl 在EDA 工具中的使用非常广泛。

最后是TCL强大到无法定义Tcl BNF,带来很多头疼的问题

于 2014-12-03T14:53:49.593 回答