Re: tcc

"Giacomo A. Catenazzi" <[email protected]>
Newsgroups gmane.linux.debian.curiosa
Message-ID <[email protected]>
Adrian von Bidder wrote:
> Yodel!
> 
> On Friday 13 March 2009 10:28:08 Giacomo A. Catenazzi wrote:
>> Adam Borowski wrote:
>>> On Wed, Mar 11, 2009 at 11:21:08PM +0100, Stefano Zacchiroli wrote:
> 
>>>> A C source file by itself cannot be run
>>>> without having been compiled
>>> I guess you haven't seen the Real Men's only true scripting language.
>>>
>>> apt-get install tcc
> ...
>> It is not real C  ;-)
>>
>> few assumptions on compiled language doesn't allow you to
>> interpret a compiled language (and usually also the contrary).
>> Few programs use such assumptions, but anyway...
> 
> While I agree that modern (dynamically typed etc.) scripting languages 
> cannot easily be compiled (note that this is only a practical difference, 
> not a theoretical one),

You forgot that most of interpreted languages have some kind of
eval/run/exec statements/functions, which allow a program to run
code dynamically (maybe from user input). So in a "compiled" version,
an library should be able to interpret the code, thus it would not be
a complete compiled code.
Maybe programs without such constructs could be really full compiled.


> I fail to see the difficulty with executing C from 
> an interpreter.  In fact C makes quite few assumptions about the runtime 
> environment and doesn't expect much/any behind the scenes magic to happen.  
> I bet a C interpreter could even be written so that it only uses memory when 
> the C source also would allocate memory (entering a stack frame and malloc)
> [1], so while the interpreted program would probably hit OOM earlier then 
> the compiled one, it would still do so only at the same places that a 
> compiled program might hit OOM.

This is not the real problem.

> [1] One obvious way is to parse a whole function on entering it.  Given the 
> low complexity of plain C code, it can then be executed without allocating 
> further memory by just jumping around in the parse tree.

But this is the problem. C code could be very complex: a lot of nesting
block and hidden variables, a lot of switch cases, very long block and functions,
... which could require IMHO more memory (thus OOM).
There was some discussion on C standardization, and I don't remember the other
cases. Anyway no big stoppers, but they decided to ignore the few changes for an
interpreter C until real demand (and some real implementation, to identify
the real needs of interpreted C).

OTOH, these are theoretical concerns. Our C is also not a "real C".
I doubt that lazy linking is permitted by standard C (IIRC a program must
not enter in main() if some symbols are missing).
ciao
	cate
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.