cw (11/05/82)
In a recent article here, Mamel made some comments about the difference between programs that copy and programs that are introspective. I intended to reply to him by mail, but (unlike the Postal Service) the mail did not go through. So I am posting the article; I hope this explains the reason for its odd style. Your article does not make sense because you seem to believe that compilation is somehow different from interpretation, either practically or theoretically. They are simply different ends of a spectrum. In particular, the C language defines (in some sense) an automaton. All we care about is the C source, not how it is executed. If it is compiled on your machine, fine; on mine it may execute directly. But an object file is of no interest whatsoever. Traditionally, introspective programs have been Turing machine programs (or programs in other very artificial computing environments). These programs have input whether they like it or not; consider that a Turing machine has a tape always. But for C (or Fortran or Ada or ...), an introspective program should read no input. A friend suggests that the only system calls allowed be output calls. Similarly, to be a legitimate introspective program, the program must not only pass the diff test proposed here, it must pass the test on any other similarly configured machine, including one on which the source file is not accessible if you are talking about compiled programs. In the case of interpretation, this rule means that the program must work on another interpreter, including one that throws away the source and converts to an internal format. Two more points. First, your shell procedure is possibly a candidate for shell introspection, although if it looks in the file system it probably isn't legitimate. Second, another introspective problem is to write a string of bits (or octals or ....) that execute directly on your machine and print themselves out. But that is not a C problem; it is a VAX (or 70 or ....) problem. Finally, let me make the point that the burying of the source text inside the source text itself is exactly the point of introspection. It seems paradoxical because you have to use the source to produce something exactly as big as itself; thus some part of itself must be both data and instructions. Charles