Macos lispbuilder sdl不';由于sdl_延迟,无法在osx上工作

Macos lispbuilder sdl不';由于sdl_延迟,无法在osx上工作,macos,lisp,sdl,common-lisp,Macos,Lisp,Sdl,Common Lisp,我的操作系统是OS X 10.11.5,代码为emacs+slime+sbcl 我使用以下命令加载了lispbuilder sdl: (asdf:operate 'asdf:load-op :cocoahelper) (asdf:operate 'asdf:load-op :lispbuilder-sdl) 然后将示例代码复制到 但是什么也没发生,所以我输入'C-C-C'终止进程, 它显示了如下错误: Restarts: 0: [CONTINUE] Continue from break. 1

我的操作系统是OS X 10.11.5,代码为emacs+slime+sbcl
我使用以下命令加载了lispbuilder sdl:

(asdf:operate 'asdf:load-op :cocoahelper)
(asdf:operate 'asdf:load-op :lispbuilder-sdl)
然后将示例代码复制到

但是什么也没发生,所以我输入'C-C-C'终止进程, 它显示了如下错误:

Restarts:
0: [CONTINUE] Continue from break.
1: [RETRY] Retry SLIME REPL evaluation request.
2: [*ABORT] Return to SLIME's top level.
3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003FC0003}>)

Backtrace:
0: ("bogus stack frame")
1: ("foreign function: SDL_Delay")
2: (LISPBUILDER-SDL-CFFI::SDL-DELAY 27)
3: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {10059F6E43}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {10056C6A0B}>)
4: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {10059F6E43}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {10056C6A0B}>) [fast-metho..
5: ((LAMBDA ()))
6: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
7: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))
重新启动:
0:[继续]从中断处继续。
1:[重试]重试SLIME REPL评估请求。
2:[*中止]返回SLIME的顶层。
3:[中止]中止线程(#)
回溯:
0:(“伪堆栈帧”)
1:(“外部功能:SDL_延迟”)
2:(LISPBUILDER-SDL-CFFI::SDL-DELAY 27)
3:((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP)####)
4:(:方法LISPBUILDER-SDL::PROCESS-TIMESTEP:AROUND(LISPBUILDER-SDL::FPS-MANAGER T))。[快速方法。。
5:((LAMBDA()))
6:(SB-INT:SIMPLE-EVAL-IN-lexev(LISPBUILDER-SDL:WITH-INIT NIL(LISPBUILDER-SDL:WINDOW 320 240)(LISPBUILDER-SDL:UPDATE-DISPLAY)(LISPBUILDER-SDL:WITH-EVENTS NIL(:QUIT-EVENT NIL))#
7:(EVAL(LISPBUILDER-SDL:WITH-INIT NIL(LISPBUILDER-SDL:WINDOW 320 240)(LISPBUILDER-SDL:UPDATE-DISPLAY)(LISPBUILDER-SDL:WITH-EVENTS NIL(:QUIT-EVENT NIL)))

是否有人可以帮助我修复此错误?

我尝试复制您的示例(Linux/SBCL)。首先:

然后:

这将在REPL挂起时显示一个空窗口(如预期),直到我关闭窗口并可以再次使用REPL。但是如果在显示窗口时执行C-C C-C,则我将获得与您类似的堆栈跟踪:

Interrupt from Emacs
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [CONTINUE] Continue from break.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003498033}>)

Backtrace:
  0: ("bogus stack frame")
  1: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>)
  2: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>) [fast-metho..
  3: ((LAMBDA ()))
  4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
  5: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))
 --more--

我试图重现您的示例(Linux/SBCL)。首先:

然后:

这将在REPL挂起时显示一个空窗口(如预期),直到我关闭窗口并可以再次使用REPL。但是如果在显示窗口时执行C-C C-C,则我将获得与您类似的堆栈跟踪:

Interrupt from Emacs
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [CONTINUE] Continue from break.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003498033}>)

Backtrace:
  0: ("bogus stack frame")
  1: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>)
  2: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>) [fast-metho..
  3: ((LAMBDA ()))
  4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
  5: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))
 --more--

谢谢你的回答,我也在Linux上尝试了这段代码,效果很好。SDL需要cocoahelper在OSX上与cocoa一起工作,也许cocoahelper有问题,但我不知道如何修复。这可能是与slime的交互。如果你使用默认的spawn通信样式,请将其更改为sigio,看看是否有效。我更改为t在
swank.lisp
文件中,将通信方式转换为
:SIGIO
:FD-HANDLER
,运行代码,但仍然不起作用,发出新的错误
算术错误浮点不精确信号。
。然后给出两条建议。首先尝试在贫民窟之外运行此程序,看看是否有效。第二条建议是转到lisp一旦你确定它是不是粘液并询问那里,他们通常非常有用。这就是我刚才解决问题的方式。谢谢你的回答,我也在Linux上尝试了该代码,它工作得很好。SDL需要cocoahelper在OSX上与cocoa一起工作,也许cocoahelper有问题,但我不知道我不知道如何修复它。这可能是与slime的交互。如果您使用默认的spawn通信样式,请将其更改为sigio,然后查看是否有效。我在
swank.lisp
文件中将通信样式更改为
:sigio
:FD-HANDLER
,运行代码,但仍然不起作用,出现新错误
arithmetic错误浮点不精确发出信号
。有两条建议。首先,尝试在贫民窟以外运行此程序,看看它是否有效。第二条建议是,一旦确定它是否粘液,就去lispbuilder Google小组询问。他们通常非常有帮助。这就是我刚才解决问题的方法。干杯
(sdl:with-init ()
  (sdl:window 320 240)
  (sdl:update-display)
  (sdl:with-events ()
    (:quit-event () t)))
Interrupt from Emacs
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [CONTINUE] Continue from break.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {1003498033}>)

Backtrace:
  0: ("bogus stack frame")
  1: ((SB-PCL::EMF LISPBUILDER-SDL::PROCESS-TIMESTEP) #<unavailable argument> #<unavailable argument> #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>)
  2: ((:METHOD LISPBUILDER-SDL::PROCESS-TIMESTEP :AROUND (LISPBUILDER-SDL::FPS-MANAGER T)) #<LISPBUILDER-SDL:FPS-FIXED {1006F962A3}> #<FUNCTION (LAMBDA NIL :IN #:DROP-THRU-TAG-1) {1006F95F0B}>) [fast-metho..
  3: ((LAMBDA ()))
  4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))) #<NULL-LEXENV>)
  5: (EVAL (LISPBUILDER-SDL:WITH-INIT NIL (LISPBUILDER-SDL:WINDOW 320 240) (LISPBUILDER-SDL:UPDATE-DISPLAY) (LISPBUILDER-SDL:WITH-EVENTS NIL (:QUIT-EVENT NIL T))))
 --more--
(sdl:with-init ()
  (sdl:window 320 240)
  (sdl:update-display)
  (sdl:with-events ()
    (:quit-event () t)
    (:idle (sdl:fill-surface sdl:*white*)
           (sdl:update-display))))