RE: Declaring a Function Before it is used

new topic     » goto parent     » topic index » view thread      » older message » newer message

Robert Craig wrote:
> 
> I still think the advantages of 
> "define-it-before-you-use-it" outweigh
> the nuisance of occasionally having to copy/paste
> a routine to a new place. It may not be desirable 
> in *every* program, but when people know there are 
> no exceptions to this rule, it promotes the 
> readability and maintainability of Euphoria 
> programs in general.
> 

Of course, we've entered the realm of flame/holy war here, so I can't 
possibly resist putting in my own comments.

I think that "define-it-before-you-use-it" is not as unequivocal as it 
first looks.  For instance, there is much confusion regarding 
routine_id(), in that the function must be defined at compile time, 
rather than run time.  I'd say that Euphoria is really 
"define-it-before-you-write-it," at least from a run-time, program flow 
perspective.  

I'd personally be happy if we could simply use run-time definitions.  If 
I get enough time, I'll try to put this into my interpreter this 
weekend, but here's a rough sketch of my idea:

* At compile time, note any routine usage that isn't already defined 
(probably using a linked list or a hash table or some combination)

* When required, do a symbol search on the *entire* visible scope, not 
restricting to only previously defined in the source

* As each routine is encountered in the source, check the above list to 
verify correct usage, etc

* Undefined routines become warnings at the end if not encountered, or 
if encountered at run-time, are errors.  This is because you'll never 
know if the routine might be defined at the next line until you get to 
the end, and shouldn't require a major overhaul of the parser, since 
you're still doing it all in one pass.

This would also allow forward-in-scope routine_id() calls.  The emphasis 
on run-time seems appropriate for an interpreter to me (and somewhat 
more intuitive).

I don't really see the benefit in prototypes.  If you have prototypes, 
you have to go look somewhere else for the declaration.  If you have to 
go look somewhere, why make two places to look instead of one?

Matt Lewis

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu