# Fundamentos de compilacion

La **compilación** es un proceso fundamental en el desarrollo de software, especialmente cuando se trabaja con lenguajes de programación de **alto rendimiento** o **bajo nivel** como **C**, **C++**, **Rust**, entre otros. Este proceso implica traducir el código fuente, que es legible por el programador, a un formato que pueda ser entendido y ejecutado por el **procesador** de una computadora. El resultado de la compilación es típicamente un archivo ejecutable, **binario** o **objeto**.

## <mark style="color:red;">**¿Qué es Compilar?**</mark>

**Compilar** es el proceso de **transformar el código fuente** de un programa escrito en un lenguaje de programación de alto nivel (como **C**, **C++**, **Java**, **Rust**, etc.) a un **código máquina** o **código de bajo nivel** que la computadora puede ejecutar. Este proceso es realizado por un **compilador**.

### <mark style="color:red;">**Flujo de Trabajo de la Compilación:**</mark>

1. <mark style="color:red;">**Escritura del Código Fuente**</mark><mark style="color:red;">:</mark> El programador escribe el código en un lenguaje de programación de alto nivel (por ejemplo, C++ o Rust).
2. <mark style="color:red;">**Compilación**</mark><mark style="color:red;">:</mark> El **compilador** toma el código fuente y lo traduce a **código de máquina** (en forma de archivos binarios o ejecutables) que el sistema operativo puede ejecutar directamente.
3. <mark style="color:red;">**Ejecutar el Programa**</mark><mark style="color:red;">:</mark> Una vez compilado, el archivo ejecutable puede ser lanzado para que el sistema operativo lo ejecute y el programa cumpla su función.

## <mark style="color:red;">Compilado vs Interpretado</mark>

La diferencia entre **compilado** e **interpretado** radica en cómo se ejecutan los programas y cómo se traduce el código fuente en instrucciones ejecutables por la máquina. Un **programa compilado** se traduce completamente a código máquina o bytecode antes de su ejecución, generando un archivo ejecutable que puede correr de manera independiente del código fuente. Este proceso de compilación suele ser más rápido durante la ejecución, ya que el programa ya está completamente optimizado para la máquina. Ejemplos de lenguajes compilados incluyen **C**, **C++** y **Rust**. Por otro lado, un **programa interpretado** se traduce línea por línea en tiempo de ejecución por un **intérprete**, lo que implica que el código fuente debe estar presente cada vez que se ejecute, lo que suele resultar en una ejecución más lenta. Lenguajes como **Python**, **JavaScript** y **Ruby** son ejemplos de lenguajes interpretados. La elección entre uno u otro depende de las necesidades de rendimiento, portabilidad y desarrollo rápido del software.


---

# Agent Instructions: 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://books.spartan-cybersec.com/malware/introduccion-al-desarrollo-de-malware/fundamentos-de-compilacion.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.
