From: <don...@is...> - 2009-02-27 01:37:14
|
Building abcl now seems improved, as advertised. I'm now back to trying to build ap5. Step doesn't seem to work: (step (cons 'null (list 3))) (NULL 3) It should go into the stepper, e.g. in clisp I see step 1 --> (CONS 'NULL (LIST 3)) |
From: Erik H. <eh...@gm...> - 2009-02-27 13:54:11
|
On Fri, Feb 27, 2009 at 2:37 AM, Don Cohen <don...@is...> wrote: > > Building abcl now seems improved, as advertised. > I'm now back to trying to build ap5. > Step doesn't seem to work: > (step (cons 'null (list 3))) > (NULL 3) > It should go into the stepper, e.g. in clisp I see > step 1 --> (CONS 'NULL (LIST 3)) I had a quick look, but STEP is implemented as an empty macro... So, indeed, I don't expect any results from it. It would be interesting to have a look at how SBCL implements it. When I get home, I'll file this as an issue in our tracker. Should you be able to find some time to try the SBCL stepper code inside of ABCL, we'd be most interested to hear from your results! Bye, Erik. |
From: <don...@is...> - 2009-02-27 18:56:04
|
I had a quick look, but STEP is implemented as an empty macro... So, indeed, I don't expect any results from it. I see now in the hyperspec that this is "conforming": It is technically permissible for a conforming implementation to take no action at all other than normal execution of the form. In such a situation, (step form) is equivalent to, for example, (let () form). In implementations where this is the case, the associated documentation should mention that fact. It would be interesting to have a look at how SBCL implements it. When I get home, I'll file this as an issue in our tracker. Should you be able to find some time to try the SBCL stepper code inside of ABCL, we'd be most interested to hear from your results! I've not looked at sbcl but I'd guess it uses the traditional evalhook, which is no longer required by the CL spec and seems not to be in abcl. Therefore the alternatives I see are - continue to not support stepping - implement evalhook (not difficult) and then use a standard implementation (I even have one of my own) - implement step in another way I have, in fact, implemented it in another way. This makes use of a "code walker", which abcl also does not seem to have, but is also available, I'm sure, in multiple versions. This would also give an implementation for macroexpand-all. Most CL implementations seem to include both evalhook for stepping and a code walker, not used for stepping, but perhaps for other stuff. |
From: Erik H. <eh...@gm...> - 2009-02-27 19:45:32
|
On Fri, Feb 27, 2009 at 7:55 PM, Don Cohen <don...@is...> wrote: > > I had a quick look, but STEP is implemented as an empty macro... > So, indeed, I don't expect any results from it. > I see now in the hyperspec that this is "conforming": > > It is technically permissible for a conforming implementation to take > no action at all other than normal execution of the form. In such a > situation, (step form) is equivalent to, for example, (let () > form). In implementations where this is the case, the associated > documentation should mention that fact. > > It would be interesting to have a look at how SBCL implements it. When > I get home, I'll file this as an issue in our tracker. Should you be > able to find some time to try the SBCL stepper code inside of ABCL, > we'd be most interested to hear from your results! > > I've not looked at sbcl but I'd guess it uses the traditional > evalhook, which is no longer required by the CL spec and seems not to > be in abcl. Therefore the alternatives I see are > - continue to not support stepping > - implement evalhook (not difficult) and then use a > standard implementation (I even have one of my own) > - implement step in another way > I have, in fact, implemented it in another way. > This makes use of a "code walker", which abcl also does not seem to > have, but is also available, I'm sure, in multiple versions. > This would also give an implementation for macroexpand-all. ABCL does have a code walker, several even: precompiler.lisp, compiler-pass1.lisp and compiler-pass2.lisp are all code walkers; however, they're programmed to do special things; none of them are generic code walkers. > Most CL implementations seem to include both evalhook for stepping > and a code walker, not used for stepping, but perhaps for other > stuff. I quickly found step.lisp in SBCL, which binds some optimization variables so the compiler generates stepping instructions. Neither ABCL nor SBCL hence have evalhook. I think I'd prefer ABCL to have an eval() function written in Lisp which could optionally do stepping. However, since our eval() is written in Java too (in order to be able to bootstrap the compiler), the impact of this could be quite high. Bye, Erik. |
From: Erik H. <eh...@gm...> - 2009-02-28 12:07:38
|
Ok. I filed this as ticket #50. Thanks for reporting. Bye, Erik. On Fri, Feb 27, 2009 at 8:45 PM, Erik Huelsmann <eh...@gm...> wrote: > On Fri, Feb 27, 2009 at 7:55 PM, Don Cohen > <don...@is...> wrote: >> >> I had a quick look, but STEP is implemented as an empty macro... >> So, indeed, I don't expect any results from it. >> I see now in the hyperspec that this is "conforming": >> >> It is technically permissible for a conforming implementation to take >> no action at all other than normal execution of the form. In such a >> situation, (step form) is equivalent to, for example, (let () >> form). In implementations where this is the case, the associated >> documentation should mention that fact. >> >> It would be interesting to have a look at how SBCL implements it. When >> I get home, I'll file this as an issue in our tracker. Should you be >> able to find some time to try the SBCL stepper code inside of ABCL, >> we'd be most interested to hear from your results! >> >> I've not looked at sbcl but I'd guess it uses the traditional >> evalhook, which is no longer required by the CL spec and seems not to >> be in abcl. Therefore the alternatives I see are >> - continue to not support stepping >> - implement evalhook (not difficult) and then use a >> standard implementation (I even have one of my own) >> - implement step in another way >> I have, in fact, implemented it in another way. >> This makes use of a "code walker", which abcl also does not seem to >> have, but is also available, I'm sure, in multiple versions. >> This would also give an implementation for macroexpand-all. > > ABCL does have a code walker, several even: precompiler.lisp, > compiler-pass1.lisp and compiler-pass2.lisp are all code walkers; > however, they're programmed to do special things; none of them are > generic code walkers. > >> Most CL implementations seem to include both evalhook for stepping >> and a code walker, not used for stepping, but perhaps for other >> stuff. > > I quickly found step.lisp in SBCL, which binds some optimization > variables so the compiler generates stepping instructions. Neither > ABCL nor SBCL hence have evalhook. I think I'd prefer ABCL to have an > eval() function written in Lisp which could optionally do stepping. > However, since our eval() is written in Java too (in order to be able > to bootstrap the compiler), the impact of this could be quite high. > > > > Bye, > > Erik. > |