Programming Language
1. Generations of Programming Languages:
- First Generation Languages (1GL): Machine code (written in binary), directly executed by the computer’s hardware. No abstraction.
- Second Generation Languages (2GL): Assembly languages. Human-readable mnemonics representing machine instructions, translated to machine code via an assembler.
- Third Generation Languages (3GL): High-level programming languages like Java, C, C#, Python. These languages are more abstract, easier to read and write, and require compilers or interpreters to convert into machine code.
- Fourth and Fifth Generation Languages (4GL, 5GL): Declarative languages like SQL (4GL) and Prolog (5GL). They focus on "what" the program should accomplish rather than "how" to do it.

2. Declarative vs. Imperative Languages:
- Declarative Languages: Specify what the program should accomplish without describing the exact steps. Example: SQL, HTML.
- Imperative Languages: Require you to define how to accomplish tasks, step-by-step. Example: C, Python.
Compiler Types
- JIT (Just-In-Time) Compiler: Converts intermediate code (e.g., bytecode in Java) into machine code at runtime. Combines features of both compilation and interpretation for efficient execution.
- AOT (Ahead-of-Time) Compiler: Compiles code directly into machine code before execution, with no intermediate stage (e.g., C/C++ compilation).


Programming Languages Classification
1. Interpreted Programming Languages: