维基百科说:
可扩展编程是计算机科学中使用的一个术语,描述一种计算机编程风格,重点关注扩展编程语言、编译器和运行时环境的机制。
例如,Tcl 允许您编写自己的控制结构。请参阅此处。
我有兴趣编译实际代码中使用的可扩展编程语言列表。如果您也能为您的语言提供一个示例,那就太好了。
LISP 家族中的语言(Common Lisp、Guile 等)具有“极大”的可扩展性——比我使用过的任何其他语言都更可扩展。可以将其视为类固醇的 C 宏系统。如果你足够无聊,你可以将 + 运算符重新定义为减法:现在这就是可扩展性! LISP 在很多地方已经过时了,但是
Guile(Scheme 的一种方言)是 GNU 项目的官方扩展语言。
无论如何,人们确实在使用 Ruby :-)
val romanNumeral = Map(
1 -> "I", 2 -> "II", 3 -> "III"
)
-> 实际上是在对象 1 上调用的方法,但看起来像一个运算符。
提供基于投影编辑器的可扩展语言工作台。它可以帮助您为语言扩展创建编辑器、类型系统、约束、重构和代码生成器。它附带了一些 Java 语言实现和扩展。
mbeddr是利用该技术的 C 实现。它具有组件系统、发送/接收+客户端/服务器接口、依赖项注入、状态机、测试和 PLE 扩展。它还包含一个可扩展的调试系统,因此您可以将扩展映射到 gdb 并提供舒适的调试体验。几乎所有 C 语言功能都已映射,因此代码生成主要可以通过简化为 C 结构而不是愚蠢的 M2T 转换来处理。
Aynth是一个使用 mbeddr 编写的简单单音合成器,用于演示组件和发送/接收接口。 无论如何,如果您使用它,您首先会注意到的是,在很多情况下投影编辑并不像文本编辑那么舒服。我们非常习惯基于文本的编辑。但可扩展语言有很多好处。
的维基百科文章提到了Seed7语言。 Seed7 的维基百科文章将其描述为:
除了许多其他功能之外,它还提供了扩展机制。 Seed7 支持将新语法及其语义引入到语言中,并且允许使用 Seed7 语言本身定义新的语言结构。例如:程序员可以引入新语句的语法和语义以及用户定义的运算符符号。Seed7 被设计为从头开始的可扩展语言。整个语言并不是在编译器中硬编码的。相反,Seed7 是在库中定义的,这些库在编译程序时加载。恕我直言,Seed7 是唯一一种将可扩展性作为基本特征并且其他一切都基于它的语言。其他方法使用传统语言,其中编译器使用硬编码语法和语义分析,并在其上附加一些扩展机制。
,甚至是控制流结构。 例如让我们用自定义循环替换 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,这带来了很多头痛。