Way to categorize assembly languages
The label of second-generation programming language (2GL) is a generational way to categorize assembly languages.[1][2][3] They belong to the low-level programming languages.
The term was coined to provide a distinction from higher level machine independent third-generation programming languages (3GLs) (such as COBOL, C, or JavaScript) and earlier first-generation programming languages (machine code)[2][4]
Second-generation programming language
Second-generation programming languages have the following properties:
- Lines within a program correspond directly to processor commands, essentially acting as a mnemonic device overlaying a first generation programming language.
- The code can be read and written by a programmer. To run on a computer it must be converted into a machine readable form, a process called assembly.[4]
- The language is specific to a particular processor family and environment.[2]
Second-generation languages are sometimes used for parts of kernels or device drivers, and are sometimes used in video games, graphics programs, and other intensive programs.[1]
In modern programs, second generation assembly languages are rarely used.[5] Programming in second generation languages may yield speed benefits, but several disadvantages have led to its decline:
- Programming is expressed in terms of individual processor instructions, rather than higher level logic.[2][3]
- Low-level memory and hardware details must be manually managed which is often bug-prone.[2]
- Programs are machine-dependent, so different versions must be written for every target machine architecture.[3]
The vast majority of programs are written in a third-generation programming language or a fourth-generation programming language. Assembly's main advantage, speed, has degraded by the fact that well written C code can often be as fast or even faster than handwritten assembly.[2][6]
Second generation languages are perhaps most significant in their place in computing history. For a long time, Second generation assembly languages were the only good option for development for many machines, such as the NES or the Commodore 64.[7][8] Second generation languages represented a massive step away from the tradition of programmers conforming to the needs of a machine, and the first step towards the machine accommodating for the programmer, a phenomenon that would be repeated in all subsequent programming language generations.[2][3]
References