[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Generative record types





     You wrote:

	 I would like to weigh in against opacity.  I particularly like the
	 fact that the language has explicit support for breaking abstractions.
	 This is one of the best parts of Lisp-derived languages, as it removes
	 the distinction between systems programming, environmental support,
	 and other programming tasks.

     So how do you square this with procedures being opaque?

     I'm not arguing for opacity here, just curious. 


Actually, I would rather that there be limited methods of examining
and modifying procedures.  Such features are essential when using Lisp
expressions as a medium for encoding procedural information as a kind
of data that might be studied or manipulated by a program or a user.

  For example, Bill Rozas wrote a PhD thesis that introduced a rather
  intriguing notion of translucency, which gives limited access to the
  content of a procedure without depending on the actual
  representation.

  MIT Scheme provides a means of determining details of the formal
  parameters of a procedure, and more generally a means of obtaining 
  the sources (when available in a separate file provided by the 
  compiler).

  In my world it is also essential to have EVAL/COMPILE as a means of
  coercing such a representation back into an executable form, so it
  can be run as well as looked at.

  In my favorite programming language/environment I also want a means
  of editing and replacing the executable part of a procedure on the 
  fly, and a means of editing the environment structure it depends
  upon.  Note that this does not imply that the actual executable 
  representation of the information is constrained by the
  representation that these editor mechanisms act on -- just that the
  effect of performing the edits would change the behavior as
  expected.  Of course, I would expect that the means of editing would
  be implemented in a set of primitive procedures that I could depend
  upon.

I know that this sounds reactionary, but I persist in viewing
computational processes as living organisms, which often contain
valuable information.  There are times to kill them and to reconstruct
them genetically (from a textual program) and there is time to do
surgery or other in vivo experiments.  I have consistently held this
view since the I started thinking about computation.  The problem is
that this vision appears to be in direct conflict with the real need
to obtain safety and reliability by erecting firewalls that dominates
the software engineering scene.  Probably, the kind of experimental
programming that I enjoy and depend upon is just incompatable with a 
language structure that can be used for software engineering, sigh.