From: dlucy@sandr.COM (Douglas Lucy)
Subject: Re: What constitutes a 4GL?
Organization: S&R Software, Inc.
Date: Fri, 28 Aug 1992 00:28:50 GMT
Summary: 4Gl's have their place; C is *NOT* everyman's answer

> andrew@airs.com (Andrew Evans) writes:

>> I'd like an authoritative description of what a fourth-generation
>> language really is.

dtb@otto.bf.rmit.oz.au (David Bath) responds:

> 4GL is usually marketroid hype for a language without the power and
> flexibility of C, i.e. one users can generate unspecified untested and
> undesigned programs in quickly.

We could argue about the "power and flexibility of C" for years, so
let's not waste bandwidth on an unwinnable point...

A 4GL does NOT mean untested and undesigned. Where *DID* you get
these words?

I'm a C veteran. I use C to get certain jobs done and I use PERL
for other jobs where it'll work and get what I want or *NEED*
accomplished QUICKER (read as, oh my gosh, PRODUCTIVE! ), and
I use Visual BASIC when I don't mind spending a few hours designing
an interface for my underlying C libs to reach into the datebase,
and you what I use when I need to get something up and running
quickly with SIMPLE user interfaces and SIMPLE data verification
and lots and LOTS of database transactions? You know what I use
when the client still does know EXACTLY what he wants done or
how his people will use (or mostly like in the case of poor
designs, NOT USE) ? 

A 4GL !

Yes, C is great, let's not repeat a million debate wars about
that.

New programmers can use it fairly quickly. The 4GL will RARELY
(yes I know source analyzers are imperfect) generate code that
will trash a transaction. Someone without any computer training
may actual WRITE HIS/HER OWN reports! Oh no!

It may not take WEEKS AND WEEKS to change the entire schema
or interface, like a 3GL *MAY*. I know, I know, I'm not new to
coding, I properly QUALIFIED my statement, I said MAY.

> Seriously productive languages rely on
> (1) decent syntax (e.g. C, C++, perl) flexibility
> (2) decent variable addressing
> (3) decent function libraries

Come on; a programmer doesn't rely on a single language or
the constructs that language uses. If you've got a language that
can get the job done in less time, for the same programmer/hour
dollars, and have the ability to change small amounts of code to
cause huge changes in operation or interface, what do you need
all the *ADMITTEDLY* great things about C ? Or Pascal. Or Modula 2.
Or name a dozen other non-4GL's....

> Note
> (1) Pointers are the hottest thing since bits were invented

Sure.

> (2) I have not seen a 4GL that lets you use pointers (or esp
> invoke a function indicated by a pointer)

Nor have I.

>
> Ergo
>	Give me beaten up K&R C (the old testament) over any 4GL
>	I have seen ANY DAY OF THE MILLENIUM.
>
> If you want to get productive with a database, use embedded C to
> create TINY ONE FUNCTION C interfaces to the database and put these
> in a library.  Use these functions and forget about your precompiler.
> (OK - so this requires an investment - but you do not have to deal
> with grotty precompiler limitations any more and can use cb, ctrace,
> ctags etc etc etc on most of your code rather than .000001% of it)

Fine. And for those who have been kind and patient enough
to have read ALL of my drivel above, I'll put in my thoughts 
ABOUT THE ORIGINAL question:

>> In the scope of relational databases, is it simply a programming
>> language with a database-oriented syntax?

I'd say no. I cannot think of a non-database oriented 4GL I've
ever heard of, but my basic concept of a 4GL derives from the
definitions (maybe) of 3GL's and earlier:

	The earlier langauges (1st and 2nd GENERATION) were
	closer to machine language. Little provision had been made for
	a human actually being able to READ and UNDERSTAND at least
	basically (no pun intended) what the program was doing.

	3GL's came about when COBOL and FORTRAN, and yes, the
	all-mighty and all-powerful C were designed to make a better
	transistion from the way a human thought about logic and
	procedures and would write them to the machine codes necessary
	to carry them out.

	4GL's, at least for me, are those languages which are very
	close to human langauges (sadly English most of the time) and
	rely on a sophisticated interpreter to transform the source
	into machine code or more commonly another, lower-level
	language (like C or pseudocode) for yet another interpreter to
	actually turn into machine code.

	I'd say 4Gl's slow down the EXECUTION speed of a program
	significantly and can never replace the sheer speed and
	flexibility of a C, or better yet, assembly program. However,
	so many possiblities arise when you relieve a programmer of
	having to "think like the machine" and spend more time
	concentrating on the interface and the PROCEDURES he/she are
	replicating with the program. Needless to say the rise in
	productivity you MIGHT see.

>> Or are there more specific attributes that a system must have in
>> order to really be a 4GL? And who says that this is what a 4GL
>> must be?

I think the only thing a language needs to be a 4GL is the ability to
generate extreme hatred in C programmers... <grin>

Sorry, I had to.

Anyway, since there's no label police out there who are going to
refute a company's claims to the requirements for calling a product
"4GL", I don't think there's anything a language must possess or any
standard a language must adhere to before embelishing itself with the
label "4GL".

Are you considering a 4GL? Are you worried about the varieties of
programming languages that claim to be 4GL's ?

Thanks to those who made it all the way through my little editorial,
and applogies to Andrew Evans for not letting him get away with
expressing his opinions unscathed, and apologies to those who hate us
programmers cuz' we just kant spell worth a damn... <grin>

Please don't waste bandwidth; send your flames to dlucy@sandr.COM.

-- 
[ W. Douglas Lucy, VP Technical Services, S and R Software, Inc. ]
[ dlucy@sandr.COM                                                ]
Newsgroups: comp.databases.theory,comp.databases