我什么时候应该使用 Rosette 的浅嵌入与深嵌入进行程序综合?

2024-01-20

一些教程Rosette https://docs.racket-lang.org/rosette-guide/index.html引入程序综合使用浅嵌入 https://docs.racket-lang.org/rosette-guide/ch_essentials.html#%28part._sec~3asynthesize%29和其他人使用深嵌入 https://homes.cs.washington.edu/~bornholt/post/building-synthesizer.html.

阅读 Torlak 和 Bodik 的文章后“使用 ROSETTE 发展求解器辅助语言” https://homes.cs.washington.edu/~emina/pubs/rosette.onward13.pdf,似乎浅嵌入有利于快速原型设计(因为它不需要定义 DSL 和解释器),而深嵌入有利于进行具有更强正确性保证的查询。这是决定使用哪种嵌入的良好经验法则吗?

使用 Rosette 的浅嵌入与深嵌入进行程序综合的充分理由是什么?


作为一般经验法则,浅嵌入最适合使用求解器搜索程序处理的值的应用程序,这对于程序验证和天使执行来说是典型的。

如果您正在进行程序综合并搜索(表示的值)代码,那么深度嵌入是最佳选择。

如果您的应用程序仅搜索常量,则浅嵌入可能是程序综合的不错选择。但是,如果您正在搜索更复杂的内容(例如表达式或语句),那么深度嵌入就是正确的选择。

通过浅嵌入,您对 Rosette 将搜索的程序空间的控制有限。基本上,您只能使用 Rosette 的基于宏的草图结构编码的任何内容。这些允许您定义基本搜索空间并编写快速原型,但如果您想构建可扩展的工具,您将需要严格控制搜索空间。

通过深度嵌入,您可以完全控制要搜索的程序空间。本质上,您可以编写任意 Rosette / Racket 函数来生成代表要搜索的所有具体程序的符号程序。然后,您还可以完全控制最后一步,即代码生成。一旦 Rosette 返回一个代表深度嵌入中的程序的值(例如 AST),您就可以根据需要生成代码来处理它。对于浅嵌入,您只能使用 Rosette 的内置代码生成器。

因此,总而言之,如果您正在进行或计划进行综合,请使用深度嵌入。对于其他一切(验证和天使执行),浅嵌入将更容易、更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该使用 Rosette 的浅嵌入与深嵌入进行程序综合? 的相关文章

随机推荐

  • 如何将整数 ArrayList 添加到 MultipartBody

    我有一个整数 ArrayList 需要将其放入 MultipartBody Builder 中 我尝试过使用 addFormDataPart 的不同方法 甚至尝试将 arraylist 转换为 JSONObject 然后将 JSONObje
  • 解析 Xml 时发生 Android 错误 - android.os.NetworkOnMainThreadException

    我收到以下错误 08 18 00 02 19 230 D CLIPBOARD 17993 Hide Clipboard dialog at Starting input finished by someone else 08 18 00 0
  • 使用Excel在PHP应用程序中进行核心分析?

    我认为这确实是一个关于方法的问题 我们有一个来自第三方的核心 Excel 电子表格 它提供了对原始数据的一些复杂分析 原始数据直接来自客户的第二个电子表格 我们希望创建一个基于网络服务器的自动化系统 可以上传原始数据 Excel 文件并进行
  • 有没有办法连接 html 属性中的字符串?

    我正在使用 MVC3 并且想使用分部视图来创建动态 DOM 元素 这是我目前的部分观点 model MVCApp ViewModels TitlesViewModel div class display label Name div div
  • 犰狳安装

    您好 我按照 README txt 的说明将 Armadillo3 0 1 安装在我自己的工作目录 home me package armadillo3 0 1 中 但是当我尝试一个例子时 g I home me package armad
  • 在 OSX 上替换 libstdc++.dylib (4.0) 全局新建和删除运算符

    我正在努力用 XCode 3 2 GCC 4 2 libstdc 4 0 动态版本替换全局 new 和删除运算符 我直接从标题 new 中获取原型并实现它们 它们粘贴在下面 该项目是一个 plugin 因此是一个动态库 该插件必须将分配委托
  • 了解 Python 如何“编译”或“解释”函数对象

    我已阅读以下帖子 但我仍然不确定某些事情 Python编译 解释过程 https stackoverflow com questions 3299648 python compilation interpretation process 为
  • 处理 Ember.js 中的验证错误

    我有一个 Rails 应用程序 为 Ember 前端提供 json 服务 我正在尝试在客户端的表单上显示验证错误 Rails 返回这个 json errors hometown is too long maximum is 64 chara
  • 同时将 AuthorizeAttribute 应用于控制器类和操作

    是否有一种方法可以在具有 Authorize 属性的控制器类的一个操作中忽略 Authorize 属性 Authorize public class MyController Controller Authorize Users I tri
  • 根据添加到主屏幕的 URL 在 Web 应用程序清单中设置 start_url

    我的网站有几个小部分 当用户将网站添加到他们的主屏幕时 我想确保主屏幕图标将他们启动到他们添加到主屏幕时所在的小部分 我可以为每个小节注册不同的清单 但这对于没有页面重新加载的单页应用程序不起作用 我正在考虑将小节存储在 cookie 中
  • 使用 C# 编码波斯语字符串

    我正在开发一个短信应用程序 使用C 对于通过 SMS 网关向客户发送交易警报 即 ATM 交易 的银行 该应用程序工作正常 唯一的问题是编码波斯语文本 它没有正确编码波斯语文本 以下是将波斯语文本编码为 UTF 16 格式的方法 publi
  • 如何从 .pb 转换为 .tflite?

    我使用创建了一个对象检测模型Pytorch然后转换自 pth to onnx进而 pb 但现在我需要将其转换为 tflite适用于 Android 应用程序 怎么做 这是我第一次 input arrays 64 3 224 224 outp
  • 编译Linux内核错误xt_CONNMARK.h

    由于非常具体的原因 我尝试编译 Linux 2 6 32 6 内核 并在内核中内置了多个模块 我已将根文件系统包含在 NFS 上 以尝试通过 LAN PXE 启动我自己的自定义救援 Live CD 在包含 ROOT NFS 所需的依赖项和模
  • 是否可以在不编写新文件的情况下将文本合成语音?

    我想使用 GCP 文本到语音 API 合成文本到语音 几乎我能找到的每个示例都会写入一个新文件 我想在该函数输入文本并通过计算机扬声器读取它时执行此操作 我一直在尝试转换 GCP 上传的代码 表示 你好 世界 我还没有找到一种方法可以在转换
  • 将 SelectSingleNode 与 XPath 结合使用会返回 NULL

    我尝试修改 XML 文件SelectSingleNode 文件的结构是
  • Rails 安装错误:“原子”本机 gem 需要安装构建工具[重复]

    这个问题在这里已经有答案了 我正在我的 Windows 上安装 Rails 3 我安装了最新的 ruby 2 0 0 并更新了 gems 但是当我使用 gem install Rails 安装 Rails 时 成功的消息来了 但最后我发现
  • 自定义字体连字

    我正在使用 Visual Studio Code 我看到所有这些很酷的字体连字 用于双等号和三等号 箭头等 我不禁想知道是否有任何方法可以向字体或 VS Code 添加新的自定义连字 我尝试进行一些网络搜索 但似乎找不到任何内容 例如 当我
  • Ansible 内置 Lineinfile 到 ~/.bashrc

    我对 ansible 比较陌生 所以如果这个问题遗漏了一些东西 我很抱歉 我的目标是添加一行 bashrc使用 ansible 文件 我认为最好的方法是ansible builtin lineinfile module 不幸的是 我已经运行
  • AttributeError:无法设置 python 列表属性的属性

    我正在与python docx来自分叉的库version https pypi org project bayoo docx 并且我在编辑元素列表时遇到问题 因为它被定义为属性 docx document Document property
  • 我什么时候应该使用 Rosette 的浅嵌入与深嵌入进行程序综合?

    一些教程Rosette https docs racket lang org rosette guide index html引入程序综合使用浅嵌入 https docs racket lang org rosette guide ch e