Subject: Re: When to recompile/reeval?
From: Erik Naggum <erik@naggum.no>
Date: 12 Oct 2002 19:22:44 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3243439364078596@naggum.no>

* tar@sevak.isi.edu (Thomas A. Russ)
| Changing the definition of CLOS classes will also work on the fly
| without requiring changes to the using code -- even if you add or delete
| slots from the class.  (Unless of course the code happens to use slots
| you decide to delete...)

  It may help to understand how slot access works in CLOS compared to
  inferior object models.  If you try to access a slot with `slot-value´,
  and it has been deleted, the system invokes an error handler that may
  still return a useful value.  If you read a slot with an accessor generic
  function, that function can still exist and do useful things, and it
  might just be able to know enough about the caller to write a log entry
  that a maintenance programmer can use to update or correct it.  These are
  features that are not available in the simple-minded object systems that
  are used in "static" languages.

| One more systematic approach to this (if you project gets big enough to
| be in multiple files) is to use one of the DEFSYSTEM utilities that
| manage the dependencies among source files.  Put macros and defstructs in
| their own files, and mark the dependencies.

  Reasonably complete cross-referencing function are available in the real
  Common Lisp environments that can tell you which functions need to be
  recompiled if you change a macro (and indirectly a defstruct).  These
  features are enormously helpful in locating both the source file and the
  functions and macros calling and called from a function or macro.  They
  can also help you build a patch file of the functions that have changed
  after a macro has been changed for compilation as a patch.

  Depending on how you store your source files, extracting individual
  functions for recompilation may be a problem or no problem at all.

-- 
Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.