One major difference between third and fourth generation  
languages lies in the granularity of reuse.  In third generation  
languages reuse occurs at two levels: (1) procedure and (2)  
file, i.e. the #include in C.  In fourth generation languages  
reuse occurs from the statement level on up to a procedure  
equivalent and the file level as in C. 
We have two types of reuse: (1) sharable reuse, where a  
single code set supports multiple references, and (2)  
replicated reuse, where each reference injects an instance of  
a code set.  Sharable supports out-of-line reuse, i.e. an API  
call, while replicated supports in-line reuse.  Depending upon  
the instance we may want to have the option of specifying  
which reuse form, sharable (out-of-line) or replicated  
(in-line), that we want. 
Perhaps the first step toward achieving the finer granularity  
of fourth generation languages in C lies in eliminating the  
need for and thus continued use of internal procedures.  This  
will allow the use of external procedures only as input to a  
compile.  If you have external procedures only, then the  
current distinction of internal and external disappears, leaving  
us with only procedures pure and simple. 
Eliminating the use of internal procedures, in effect allowing  
the input of multiple [external] procedures, eliminates, one,  
the need for multiple compiles, and, two, the need to link the  
separate compiled modules into one.  Further eliminating these  
two eliminates the need for a makefile, one less source to  
create and maintain as well as one less separate process to  
invoke. 
Perhaps prior to do this we should change the compiler from  
its current one-pass limitations to a less restrictive multi-pass  
form.  This eliminates the need for the use of most "void"  
statements in C along with any need to insure that we define  
a referent prior to its use in a reference, e.g. "int b;"  
(referent) and "b = b + 1;" (reference) can appear in any  
order.  We can extend this from data references of data  
referents to procedure references of procedure referents.   
This means that the procedures themselves can appear in any  
order, i.e. unordered, on input. 
Don't let the implication of this go unnoticed.  If you don't  
have "internal" procedures, only unordered "external" ones,  
then who does the ordering?  Imperative languages currently  
require a single external procedure with optional multiple,  
hierarchically ordered internal procedures on input.  In short  
the programmer has to create the logical, i.e. hierarchical,  
order as part of writing the source.  With this change to the  
use of multiple, unordered procedures on input to a compile  
the software assumes the responsibility for creating the  
hierarchical order, the logical organization of the procedure  
source. 
Now having changed the compiler from one-pass to  
multi-pass, i.e. two or more, and allowing multiple, unordered  
procedures on input, we have a couple of more changes we  
should effect. 
If we allow the software to logically organize the source into  
hierarchical order with one highest level procedure at the top  
(or root) level to produce a single object module, nothing  
prevents us from extending this to allow more than one  
highest level procedure on input.  This allows us, one, to  
produce multiple object modules from a single compile, and,  
two, to automatically synchronize source code changes across  
multiple modules within a single application system or across  
multiple application systems...all within the scope of a single  
compile. 
Definitely do not let the implications of this on productivity  
elude you: you need one programmer, one compile, all  
affected modules. 
Unfortunately to do this in C we have to eliminate a current  
restriction that it should not have had in the first place.  That  
restriction says that an external procedure which will receive  
control from the operating system (and thus not from another  
module) we have to name "main".  Obviously we cannot have  
this if we are going to allow multiple such on input.   
Therefore we eliminate this requirement, allowing us to assign  
a name to this highest level procedure as we would any other. 
Thus we have "improved" C as well as our own productivity.   
We did it while maintaining full compatibility with existing C  
source code and methods.  Anyone who wants can continue  
with his less efficient and productive methods.  The rest of us  
who want to work smarter instead of harder will finish early  
enough to have time to observe the struggles of "old time  
professionals". 
************************************************ 
===================================================== 
To unsubscribe from this list, send an email message 
to "steward@scoug.com". In the body of the message, 
put the command "unsubscribe scoug-programming". 
For problems, contact the list owner at 
"rollin@scoug.com". 
===================================================== 
<< Previous Message << 
Return to [ 19 | 
March | 
2003 ]
The Southern California OS/2 User Group
P.O. Box 26904
Santa Ana, CA  92799-6904, USA
Copyright 2001 the Southern California OS/2 User Group.  ALL RIGHTS 
RESERVED. 
SCOUG, Warp Expo West, and Warpfest are trademarks of the Southern California OS/2 User Group.
OS/2, Workplace Shell, and IBM are registered trademarks of International 
Business Machines Corporation.
All other trademarks remain the property of their respective owners.