I came across the term 4GL(generation language) in reading about Oracle ADF Busniess components . I want to know what exactly is 4GL ?
This is the actual quote from the book Oracle Fusion Guide:
Oracle ADF Business Components is the business services layer of choice in Oracle Fusion
application development. Compared to other persistence layers, ADF Business Components
provides exceptional built-in business application functionality and maximally declarative
experience that makes it a perfect match for those who seek an end-to-end fourth generation
language (4GL) Java EE development architecture.
5
I have almost always referred to 4GL languages as languages in which even a technical analyst can program in such as CASE (Computer Assisted Software Engineering) tools. However, apparently there is more to it than that per Wikipedia.
The company I work for works with Oracle ADF quite a bit and we have our own CASE tool for mobile development and so we also refer to our own language as a 4GL one. Specifically we call it out as such because it includes an IDE that generates code on the back end based on very simple flow charts and scripts. It can manage all the basic interactions with databases, files systems, repository, assets, promotion, history and distribution of the scripts in an easily accessible way. Oracle ADF has a similar system.
Given that I would say a 4GL language is any language that abstracts the details of development into a higher level that allows for more productivity or allows for technical analyst to be able to work with it.
6
4GL is a bit of a nebulous term.
It is an attempt to describe a language were the programmer is able to solve a domain specific problem without having to worry about problems that are not specific to the domain (like storage/memory/communication). All these low level constructs are abstracted away by the language.
There are have been many attempts to achieve this over the years none have been “very” successful. This is usually because to be effective the problem domain that the language covers is very specific (and thus has a limited audience (that does not mean that they are not popular just that the audience is small)).
Of course because the term is not well defined there is also some abuse of the term. Sometimes it can be used to define frameworks where you just plug in modules of code and the infrastructure takes care of all the low level stuff while the plugin deals only with items at the domain level.
2
The best explanation is one that covers all the generations:
- 1st-gen is the machine opcodes. These are the binary (hexadecimal if you please) codes the computer actually understands and works with at the hardware level.
- 2nd-gen is assembly language. These are human-readable labels for the actual opcodes, making it easier for a human to write a program without having to remember or constantly reference the numeric opcodes and location addresses of registers and logic/arithmetic units, etc.
- 3rd-gen are most of the languages programmers actually code in today that are intended to produce programs that run on the computer as applications: C/C++, Basic/VB, Pascal/Delphi, etc. These languages are compiled into assembly language files, then references between those files are linked together and the results digested into machine code, but third-generation languages provide constructs such as logic loops, variables, and object-oriented principles in a form that make them easy for humans to work with and understand. They abstract a lot of the low-level logical thinking, allowing programmers to think in slightly bigger steps (though a key part opf computer science education is teaching students to think in small enough steps that a computer can follow).
- 4th-gen are languages invented to communicate with other programs. Markup languages (XML/HTML), query languages (SQL), scripting languages (JavaScript), even some of your higher-level communications protocols like HTTP and SOAP are considered fourth-generation languages. These are not, directly, compiled into machine instructions; they instead exist to be interpreted by another program which then performs the task it was asked to do by the program it received.
To be honest, there’s not a very clear dividing line anymore between 3rd-gen and 4th-gen. Some clearly are one or the other, like C/C++ (3rd) and SQL (4th). But, for instance, is Java considered 3rd-gen, because it’s intended to create programs that are “applications” in their own right? Or is it 4th-gen, because Java’s not compiled into machine code but instead into an intermediate language of bytecodes, that are then interpreted by a virtual machine environment (most of which are in turn hosted by some other program like a web browser or web server) that actually does what the programmer’s code tells it to? The same could be asked of .NET languages like C#/VB, and of most of the functional languages, which require runtimes that hide all the nitty-gritty imperative logic and side-effects, so the programmer can think in more mathematical, evaluatory terms.
4