libera/#clasp - IRC Chatlog
Search
17:05:44
yitzi
Probably should ask this somewhere else since it isn't really clasp specific, but can you think of an example of the dynamic issue that scymtym referenced that ISN'T the undefined consequences one in the RETURN-FROM?
17:07:52
Bike
there's another way to do it involving unwind-protect, but it's basically the same part of the language
17:08:35
yitzi
Ok, just strange that the reference that he gave says it is a CONTROL-ERROR but RETURN-FROM says it is unspecified.
17:11:57
yitzi
I just ran that code fragment on the various implementations and it signals a CONTROL-ERROR or SIMPLE-ERROR generally. Although it crashed CLASP for me.
17:15:04
Bike
(block a (block b (unwind-protect (return-from a 1) (return-from b 2)))) has undefined behavior, but is 2 on sbcl
17:19:52
Bike
if i run the return-from example in sbcl with (optimize (safety 0) speed) i get a nonsensical error
17:21:55
scymtym
i think SBCL does extra work at runtime to detect control transfers to abandoned exit points but not when the policy is fast-unsafe
17:23:44
scymtym
(compile nil '(lambda (x) (declare (optimize speed)) (block nil (map nil (lambda (y) (return-from nil y)) x)))) | note: Allocating a value-cell at runtime for checking possibly out of extent exit via (RETURN-FROM NIL Y). Use GO/RETURN-FROM with SAFETY 0, or declare the exit function DYNAMIC-EXTENT to avoid.
17:25:06
Bike
yeah. i think to do it totally correctly you kind of need to have an unwind-protect-like cleanup where the block is to invalidate a heap-consed exit marker
17:29:59
Bike
also, i did have clasp properly signaling an error before, but libunwind problems happened