Python 嵌入式自定义表达式的安全实现策略

Python 嵌入式自定义表达式的安全实现策略,python,functional-programming,interpreter,dsl,Python,Functional Programming,Interpreter,Dsl,我正在设计/原型化一种特定领域的语言。。。至少就目前而言,在Python中是这样。设计很简单-但需要支持指定任意函数(其域是从标签到整数的映射-范围是整数)。在许多情况下,函数仅会选择域中的标签以产生结果。。。但我想允许任何可以在通用编程语言中轻松(高效)实现的函数的规范 需要注意的是,我希望函数是“安全的”。。。我的意思是: “纯”功能:确定性,无副作用。(即没有外部状态;没有与文件、i/O、设备等的交互) 终止-成功或在特定(小规模)分配的计算资源过期后终止 我非常希望这个功能能够有效地

我正在设计/原型化一种特定领域的语言。。。至少就目前而言,在Python中是这样。设计很简单-但需要支持指定任意函数(其域是从标签到整数的映射-范围是整数)。在许多情况下,函数仅会选择域中的标签以产生结果。。。但我想允许任何可以在通用编程语言中轻松(高效)实现的函数的规范

需要注意的是,我希望函数是“安全的”。。。我的意思是:

  • “纯”功能:确定性,无副作用。(即没有外部状态;没有与文件、i/O、设备等的交互)
  • 终止-成功或在特定(小规模)分配的计算资源过期后终止
我非常希望这个功能能够有效地实现——我希望很少提供定义——并经常进行评估。我还希望使用熟悉的语法定义函数

我考虑过支持python函数的实现。。。我知道我可以,而且我发现了一种方法——建议使用一种涉及到对AST进行解析的方法,然后解释(或在评估之前验证)AST树。我还阅读并定制了一种定制的、解释的语言

我不禁认为,试图阻止eval()中的不良行为就是“向后”解决问题(试图事后阻止不良功能),而实现定制语言则需要重新发明轮子

Python是否已经有了一个安全、高效、可嵌入的表达式解释器?

如果您在Web浏览器中运行此操作(通常是不可信代码关注的地方),请考虑用类似的方式运行IT客户端。没有人关心用户是否入侵了自己的机器

如果您确实实现了一个定制的解释器,那么您不必重新实现所有的程序。在不受信任的代码上使用
compile()
被认为是相对安全的,但要小心大常量消耗时间和内存。在可以终止的单独进程中运行编译器。然后,您只需要编写一个Python字节码解释器,它无法访问任何重要的内容