[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Dynamic updating
Excellent! Thanks for the example; the app I had in mind for this would
use a very similar concept.
Anton van Straaten wrote:
>> >Lisp allows you to enter a running image, build up a lot of state by
>> >running programs, and then at that point load new definitions. This
>> >gives product maintainers the powerful ability to have customers load
>> >patches that can fix bugs in running programs without requiring those
>> >programs to be exited. The value to a customer in some situations can
>> >be immeasurable.
>>
>>In hopes of not starting any language wars on this very high S/N mailing
>>list I would like to know if this is a property of CL itself or is this
>>possible in mzscheme as well?
>
>
> MzScheme does this just fine. Comes in very handy when debugging
> server-style applications, since you can modify code without restarting the
> server. The applications for runtime behavior modification go way beyond
> that, though.
>
> Here's a little demo, which redefines a function being used by a running
> thread:
>
> ; peephole is global variable to see what's going on in our thread
> (define peephole 0)
>
> ; peek is a function to display a few snapshots of peephole
> (define (peek)
> (do ((n 4 (- n 1)))
> ((zero? n))
> (sleep 0.1)
> (display peephole)(newline)))
>
> ; looper loops and repeatedly updates peephole
> ; with the value of a function named "bar"
> (define (looper) (set! peephole (bar peephole)) (looper))
>
> ; the initial version of bar
> (define (bar x) (+ x 1))
>
> ; start running the looper function in a separate thread
> (define loop (thread looper))
>
> ; take a look at what we can see through the peephole
> ; should print a few numbers
> (peek)
>
> ; redefine bar
> (define (bar x) "MzScheme rules!")
>
> ; take another peek to see the effect of redefining bar
> ; should print a statement of fact
> (peek)
>
> ; stop the thread
> (kill-thread loop)
>