首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译器信号与误差之差(sbcl 1.2.4)

编译器信号与误差之差(sbcl 1.2.4)
EN

Stack Overflow用户
提问于 2014-10-07 15:56:57
回答 2查看 89关注 0票数 1

我从SBCL编译器那里得到了奇怪的错误,所以可能有人可以向我解释那里发生了什么。有关信息,包使用optima和drakma。我确实试图减少已发布的代码,但这一数量需要了解问题。

代码语言:javascript
复制
(defun signal-vk-error (code)
  (error ;; <--- HERE IS THING
    (case code
      (100 'parse-error)
      (otherwise 'error))))

(defmacro match-with-error (response matcher)
  `(match ,response
         ((alist (:ERROR . code))
          (signal-vk-error code))
         ,matcher))

(defun api-call-response (resp)
  (match-with-error
    resp
    ((alist (:RESPONSE . data)) data)))

编译我得到的文件:

代码语言:javascript
复制
; caught ERROR:
;   don't know how to dump CODE (default MAKE-LOAD-FORM method called).
Unhandled TYPE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                  {1002BF6F03}>:
  The value NIL is not of type (AND ATOM (NOT NULL)).

因此,看起来sbcl (1.2.4)不能创建二进制表示,但我不能理解为什么。

如果我只是将错误更改为信号中的信号-vk-错误-每个编译,加载和工作的预期。我也可以只是加载文件的黏液和雪糕,它将工作,没有错误和警告。

所以,问题是,error有什么问题?errorsignal的主要区别是什么?

更新1:有趣的观察,如果我删除信号-vk-错误函数,并将这段代码放入宏防御,它将编译ok。

更新2:感谢@RainerJoswig,声明signal-vk-error不内联解决了问题。向SBCL小组报告,看起来他们正在进行一些优化,在本例中,这就中断了编译。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-15 16:37:47

当它出来的时候,编译器中有一个问题,事实上其中两个,其中一个据称是一个特性。任何感兴趣的人都可以阅读SBCL黑客和optima 车内追踪器作者之间的对话。

就目前而言,通过在宏扩展过程中不显示模式对象,提交d7ec93d0df4920b9a7b4a492e7aadf52480f437c修复了最优的一面。

票数 0
EN

Stack Overflow用户

发布于 2014-10-07 19:23:55

重现问题的最小方法:

代码语言:javascript
复制
(defun signal-vk-error ()
  (error 'error))

(defun api-call-response ()
  (optima:match 1
    ((not 2)
     (signal-vk-error))))

如果我宏展开或遍历match表单,问题就会消失。

下列情况也使问题消失。

代码语言:javascript
复制
(declaim (notinline error))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26240236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档