FMc*_*FMc 10
Perl的Text :: Template模块的作者Mark-Jason Dominus 有一些可能相关的见解:
当人们制作像这样的模板模块时,他们几乎总是从发明一种特殊的替换语法开始.例如,他们构建它以便像%% VAR %%这样的字符串替换为$ VAR的值.然后他们意识到需要额外的格式化,所以他们为格式化添加了一些特殊的语法.然后他们需要一个循环,所以他们发明了一个循环语法.很快他们就有了一个新的小模板语言.
这种方法有两个问题:第一,他们的小语言瘫痪.如果你需要做一些作者没有想到的事情,那你就输了.第二:谁想学习另一种语言?
如果你编写自己的迷你语言,你可能会陷入同样的困境 - 维护一个语法和一个解析器来获得一个因设计而瘫痪的工具.
如果真正的编程语言看起来有点过于低级,那么解决方案可能不是放弃语言,而是为最终用户提供更高级别的实用功能,这样他们就可以使用熟悉的概念进行操作而不会陷入困境.基础语言的杂草.
这允许初级用户在高级别操作; 但是,您和任何具有诀窍的最终用户 - 您的超级用户 - 仍然可以充分利用Ruby或Python的全部功能.
听起来您可能需要为您的用户创建某种域特定语言(DSL),这些语言可以在目标语言之上松散地构建.Ruby,Python和Lua都有各种关于语法的怪癖,并且在某种程度上,其中一些可以用巧妙的函数定义进行按摩.
相当强大的DSL的一个例子是Cucumber,它实现了一种有趣的策略,即通过应用于输入数据的一系列正则表达式将用户指定的措辞转换为实际的可执行代码.
另一个候选者可能是JavaScript,或某种DSL到JavaScript桥接器,因为这将允许策略在客户端或服务器端运行.这可能有助于扩展您的应用程序,因为与负载很重的服务器相比,客户机通常具有过剩的计算能