dsl - 领域特定语言/功能的工具
问题描述
我们的用户可以输入学生回答的问题。我们的用户需要一种可扩展、灵活的方式来定义这些问题的正确答案(存储为一个简单的字符串)。
我想公开一个特定领域的函数库,用户可以调用它来描述正确的答案。例如:
exact_match("puppy") // means the correct answer is the string 'puppy'
或者
contains("yesterday") // means any answer with the word 'yesterday' is correct
天真的实现将涉及在沙盒运行时(如 javascript vm 或 ruby vm)中评估用户提供的字符串。但我想更进一步,只允许调用特定的函数。任何其他脚本都将被丢弃。这样:
puts("foo"); contains("yesterday")
将是非法的。由于我们不公开或允许puts()
.
如何将执行环境限制为仅运行功能白名单?或者是否有不同的方法来构建这种面向外部的 DSL,而不是试图将现有语言限制为功能子集?
解决方案
如果我是你,我会检查 JetBrains 的MPS,它是一个开源 DSL 创建工具。我自己从未使用过它,但从我所看到的一切来看,它非常直观;他们所有的其他产品都非常强大。
推荐阅读
- python - 这应该计算出投资翻倍需要多长时间。返回值太长了。我需要使用 while 循环
- php - 根据数据可用性显示方面
- javascript - 如何将值转换为 p5.js 中的 html 元素?
- python - 递归查找字符串中小写字母的数量
- r - 根据按列名分组的列计算矩阵每一行的汇总统计
- bash - 在 Bash 中计算 PowerShell 刻度
- r - 获取行索引以更新循环中的另一个数据帧
- reactjs - Axios 和 Typescript 给出一个类型的 promise 拒绝错误
- javascript - 以编程方式从输入中删除选中的属性
- python-3.x - 迭代数组列表以用作函数的输入