Re: Repositories of ABCL-specific code? / Kill runaway ABCL function and return to REPL?
Garrett Dangerfield <[email protected]> Wed, 12 Jun 2019 07:48:35 -0700
| Newsgroups | gmane.editors.j.devel |
|---|---|
| Message-ID | <CAH3WWf_BHb99R9QhSJHfV81=cr+UzfyhYRdgXvWKw0gAv5b=Bw__43696.946899739$1560350955$gmane$org@mail.gmail.com> |
Not sure how ABCL handles overloading, but couldn't you overload the function that's gone haywire or something that it calls? On Tue, Jun 11, 2019 at 7:55 PM Alan Ruttenberg <[email protected]> wrote: > > > On Tue, Jun 11, 2019 at 10:35 PM Elliott, Clark <[email protected]> > wrote: > >> Dear ABCL experts, >> >> I am working on AI system development in LISP. I like using ABCL because >> of its easy portability to Windows, Mac, and Linux and its direct access to >> Java. I am running ABCL in emacs shells, often as several processes at >> once, communicating via sockets. The LISP is working very well indeed. >> Great job! >> >> I've slogged through getting things like sockets and threads >> running--mostly using apropos and guessing--but it takes a lot of time. I >> STRONGLY prefer to work from examples of running code. >> >> I would dearly love some tips on the following: >> >> 1. Are there repositories of ABCL-specific running code, small programs, >> utility applications and etc. showing the actual running of ABCL >> implementation-specific functions? Native ABCL networking? ABCL tricks? >> Examples of running programs using the native threads? Examples of small >> systems using Java-to-LISP and LISP-to-Java (beyond the given short >> examples)? >> > > My project LSW2 <https://github.com/alanruttenberg/lsw2> uses ABCL > extensively. It isn't organized for documentation but browsing through it > you will find lots of usage of java libraries using JSS. The util directory > might have some relevant examples. I haven't used native threads - instead > there is lparallel <https://github.com/lmj/lparallel> > >> >> 2. How can I stop a runaway ABCL LISP function and return to top-level >> LISP without having to blow away the emacs buffer, and thus my entire >> current LISP context? In other LISPs I've had some kind of control key >> sequence, but can't find one for ABCL. >> > > There isn't one because java doesn't allow general interrupts. If a > process is grinding and never yielding then there's nothing you can do. > If you are writing the code then you can make sure you don't have long > loops without every yielding. I tend to throw in a (sleep .01) > strategically. > What you can do is have a process run the process you care about, sleeping > most of the time. When sleeping it will recognize interrupts. The abort > handler can request a thread be destroyed. Maybe it will be maybe it won't > but at least you can be returned to the repl. util/geturl.lisp does this. I > also mucked around with making a unix-like "&" to put a form in the > background (running in its own thread). That's in util/background.lisp. > With that you can use (& form) to put form in the background. There's a > little doc at the top of the file. > > >> E.g.: >> > > Are you using slime? C-c C-c interrupts runaway just fine. > > >> >> (defun runaway () >> (let ((n 0)) >> (loop while (< (incf n) 10) >> ;; Pretend this ran away. How do I kill it in ABCL REPL? >> do >> (sleep 1)))) >> >> Thanks in advance for any help. >> >> Best, >> >> Clark >> >>