evaluating math w/o recompile
    mcdonald at uxe.cso.uiuc.edu 
    mcdonald at uxe.cso.uiuc.edu
       
    Sat Sep 16 23:34:00 AEST 1989
    
    
  
In article <72603 at yale-celray.yale.UUCP> zador-anthony at CS.YALE.EDU (anthony zador) writes:
>I would like to be able to specify the form of the function f
>at *run time* (no recompiles). That is, i would like 
>to place a line of math
>in some file and have the program read it in and evaluate it.
Henry Spencer replies:
>You can't.  There is no way that line of math can be *executed* without
>compiling it (in a very broad sense of the word), so trying to do it with
>no recompiles is futile.  Either you invoke the C compiler, or you write
>a mini-compiler as part of your program.  *Something* has to turn the math
>notation into an executable/interpretable representation of some kind.
Or, if you need to do it once or only a couple of times, write
an interpreter. An interpreter can be written in portable C. 
A compiler, of course, can't. You have to know the machine code.
But the situation concerning mini-compilers is even worse than
non-portability. It is certainly guaranteed possible to write
to an array the bits which constitute the necessary code. BUT -- BUT--
due apparently to X3J11 bowing to the concerns of manufacturers
of brain-dead computers and operating systems, there is absolutely
no guarantee that you can EXECUTE that code. 
Actually the situation is not too bad on most computers - for
example, on MS-DOS or VMS there is no problem at all. There you
can just cast a pointer to the data array to a code pointer and
go to town. On OS/2 you can't do that - but there is a trivial
OS call that will do it for you. There appear to be, however,
Unixes that really make it impossible. 
I am very sensitive to this sort of thing, as my spiffiest programs
all depend on in-situ compilation of expressions (though, thank God,
not control constructs).
Doug McDonald
 
    
    
More information about the Comp.lang.c
mailing list