- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Rosette 的一些教程使用 shallow embedding 介绍程序合成和其他人使用 deep embedding .
阅读 Torlak et Bodik 的 "Growing Solver-Aided Languages with ROSETTE" 后,似乎浅嵌入有利于快速原型(prototype)设计(因为它不需要定义 DSL 和解释器),而深层嵌入有利于进行具有更强正确性保证的查询。这是决定使用哪个嵌入的好经验法则吗?
使用 Rosette 的浅嵌入与深层嵌入进行程序合成的充分理由是什么?
最佳答案
作为一般经验法则,浅嵌入最适合使用求解器来搜索程序处理的值的应用程序,这对于程序验证和天使执行是典型的。
如果您正在进行程序合成和搜索(表示的值)代码,那么深度嵌入是最佳选择。
如果您的应用程序将只搜索常量,那么浅嵌入可能是程序合成的不错选择。但是,如果您正在搜索更复杂的东西(例如,表达式或语句),那么深度嵌入是您的最佳选择。
使用浅嵌入,您对 Rosette 将搜索的程序空间的控制有限。基本上,您仅限于可以使用 Rosette 基于宏的草图构造进行编码的任何内容。这些允许您定义基本搜索空间并编写快速原型(prototype),但如果您想构建一个可扩展的工具,您将需要严格控制搜索空间。
通过深度嵌入,您可以完全控制要搜索的程序空间。本质上,您可以编写任意 Rosette/Racket 函数来生成表示要搜索的所有具体程序的符号程序。然后,您还可以完全控制最后一步,即代码生成。一旦 Rosette 返回一个代表深度嵌入中的程序的值(例如 AST),您就可以处理它,但要生成代码。使用浅嵌入,您只能使用 Rosette 的内置代码生成器。
因此,总而言之,如果您正在或计划进行合成,请使用深度嵌入。对于其他一切(验证和天使执行),浅嵌入将更容易和更快。
关于racket - 我什么时候应该使用 Rosette 的浅嵌入与深层嵌入进行程序合成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53699744/
免责声明 这篇文章是关于术语“浅拷贝”和“深拷贝”的正确用法,特别是在谈论复制一个不包含任何引用的对象时。这个问题并不意味着(也不应该)基于意见,除非真的没有关于这个话题的共识。我已将此问题标记为 C
我有这个功能 int getrelation(string name, RELATION& output){ bool found=0; int index=0;
与 why should I make a copy of a data frame in pandas 有关 我注意到在流行的backtesting图书馆, def __init__(self, d
我的问题很基础,但我想 100% 理解所有内容。 SO中的很多问题都引用了我的帖子,但我没有找到满意的答案。 我们知道java中的枚举是引用类型。让我们考虑以下片段: public static cl
请引用这个 fiddle 的问题。 http://jsfiddle.net/AQR55/ 1)为什么附加到隔离范围属性的 watch - 双向绑定(bind)到父属性,不会在更改父范围属性时触发。 在
我想使用 UP3 来完成一项非常具体的任务,我应该能够使用 API 来实现该任务。我想了解是否可以编写以下应用程序。 基于https://jawbone.com/support/articles/00
如何在辅助方法中传递上下文并提取数据? 请参阅以下代码片段: import AppContext from '../../context/AppContext' import extractDatta
我正在尝试使用 simple-git 创建浅克隆。我正在尝试创建与此命令等效的命令:git clone --depth 1 https://github.com/steveukx/git-js.git
我是一名优秀的程序员,十分优秀!