> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud1-introduccion-a-programacion/introducion-a-programacion/evolucion-das-linguaxes-de-programacion.md).

# Evolución das linguaxes de programación

<figure><img src="/files/1UBLRkTRI0eKq8dc8KeS" alt=""><figcaption></figcaption></figure>

Desde que apareceu o primeiro ordenador ata a actualidade houbo unha evolución moi importante tanto a nivel de xeracións de ordenadores como de linguaxes de programación. En ambos casos, existen tres xeracións comunmente aceptadas e outras dúas nas que existe algunha discusión:

* **1GL - Linguaxes de primeira xeración** (Anos 40): Os primeiros ordenadores se programaban en linguaxe máquina, utilizando código binario (0s e 1s). Cada ordenador tiña un xogo de instrucións propio e os programas estaban condicionados polas conexións físicas do ordenador. Caracterízanse por ser de baixo nivel, programas eficientes pero sen abstracción hardware/software, non portables e moi complicados de desenvolver e manter.

```
0001 001 00000101

0001 → código de operación (MOV)

001 → operando, indica o rexistro R1

00000101 → valor en binario (5 en decimal
```

* **2GL - Linguaxes de segunda xeración** (A partir dos anos 40): Nesta xeración aparecen una serie de linguaxes que utilizan códigos mnemónicos. Estas linguaxes se caracterizan por que utilizan un tradutor a linguaxe máquina denominado ensamblador. Facilita a programación, pero mantén todas a desvantaxes da xeración anterior. Na actualidade utilizase para programar en ámbitos moi específicos, como o kernel do SO ou drivers.

```asm6502
        .global _start        @ Punto de entrada

_start:
        MOV     R0, #5        @ Cargar o valor 5 en R0
        MOV     R1, #7        @ Cargar o valor 7 en R1
        ADD     R2, R0, R1    @ R2 = R0 + R1 (resultado 12)

        @ Sair do programa (sistema Linux)
        MOV     R7, #1        @ Servizo 1: exit
        SWI     0             @ Chamada ao sistema
```

* **3GL – Linguaxes de terceira xeración** (a partir dos anos 50): Tratase da primeira xeración de linguaxes considerada de alto nivel. Estas linguaxes caracterízanse por que son independentes da máquina na que se executan, permitindo a exportación e compilación de código en máquinas diferentes. Caracterízanse por que son mais amigables para o programador, xa que utilizan una sintaxe mais similar a linguaxe humana. Permiten a utilización de estruturas de control, funciones e librerías externas, o que permite abstracción, reutilización e encapsulamento entre outros aspectos, se embargo son menos eficientes que as linguaxes das xeracións previas. Exemplos de este tipo de linguaxes poderían ser C, Fortran, Java ou Python

```java
public class Persona {
	
	private String nombre;
	
	private String apellido;
	
	private LocalDate fecNac;
	
	public Persona(String nom, String ap, LocalDate fec) {
		this.nombre=nom;
		this.apellido=ap;
		this.fecNac=fec;
	}
	
	public String toString() {
		return this.apellido + ", " + this.nombre + " " + this.fecNac;
	}

}
```

* **4GL – Linguaxes de cuarta xeración** ( a partir dos anos 70): Tratase de linguaxes de alto nivel que se caracterizan por un alto nivel de abstracción (adoitan ser declarativas), potencia e facilidade na súa aprendizaxe. Estas linguaxes adoitan ter un propósito especifico e incorporar elementos que facilitan o desvolvemento de aplicaciones como funcionalidade especifica para conexión a bases de datos, editores gráficos ou desenvolvemento de interfaces. Algúns exemplos de linguaxes de este tipo poderían serian SQL, Matlab ou ABAP.

```sql
SELECT * FROM empleados WHERE salario > 1000; 
```

* **5GL – Linguaxes de quinta xeración**: Fai referencia a un conxunto de linguaxes de alto nivel que se centran na resolución de problemas mediante programación lóxica. Prolog ou lisp son exemplos de linguaxe de este tipo.

```prolog
% Feitos
pai(juan, maria).
pai(juan, pedro).
nai(ana, maria).
nai(ana, pedro).

% Regras
irmans(X, Y) :- pai(P, X), pai(P, Y), nai(N, X), nai(N, Y), X \= Y.

% Consulta posible:
% ?- irmans(maria, pedro).
% true.

```

Dicimos que as **linguaxes de alto nivel xestionan a abstracción** porque ocultan os detalles complexos do hardware (como a xestión de memoria, rexistros do CPU ou enderezos físicas) e permítenlles ós programadores escribir código usando conceptos e estructuras máis próximas ó pensamento humano e ó problema que se vai resolver, en lugar de preocuparse por cómo a máquina executa cada instrucción a baixo nivel.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud1-introduccion-a-programacion/introducion-a-programacion/evolucion-das-linguaxes-de-programacion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
