Un entorno de programación es un programa o conjunto de programas que engloban todas las tareas necesarias para el desarrollo de un programa o aplicación. Estas tareas son básicamente las siguientes:
Este tipo de entornos incorporan numerosas herramientas, utilidades, aplicaciones ya desarrolladas, ejemplos, tutoriales, etc. Todas ellas encaminadas a faciltiar y mejorar el desarrollo.
Lo normal es utilizar un editor especialmente preparado para la programación. Estos tienen facilidades para la corrección de errores, destacan las palabras del lenguaje en colores, y en general facilitan la labor del programador.
Un compilador es un programa cuyo cometido es realizar la conversión de un programa escrito en un lenguaje de programación a su correspondiente equivalente en lenguaje máquina. El resultado que devuelve un compilador es un programa que ya puede ser ejecutado por el ordenador destino sin la necesidad de que el compilador esté presente. Por ejemplo, el lenguaje Pascal o el lenguaje C son lenguajes de programación que necesitan ser compilados. Cuando la conversión se realiza entre el lenguaje ensamblador (Assembly) y el código máquina, el compilador recibe el nombre específico de Ensamblador (Assembler).
Un intéprete es un programa que convierte línea por línea el programa escrito en un lenguaje de programación y que a medida que realiza la conversión ejecuta las instrucciones . Evidentemente el intérprete no devuelve nada ya que la ejecución se realiza de forma simultánea. Por este motivo, el intérprete debe estar presente durante la ejecución. Lenguajes de programación que tradicionalmente son interpretados son el LISP y el BASIC.
Un traductor es el nombre que reciben aquellos procesadores de lenguaje que convierten programas de unos lenguajes a otros pero no generan código máquina. Por ejemplo hay traductores de Pascal a C y viceversa.
Hay otros lenguajes de programación que combinan ambas estrategias como por ejemplo sucede con el lenguaje de programación Java . Para este lenguaje existen traductores que generan un programa en un código denominado intermedio que luego será ejecutado a través de un intérpre que recibe en este caso el nombre de máquina virtual Java.
Por simplificación y para facilitar la comprensión de los conceptos anteriores se ha señalado que los compiladores y los ensambladores (caso particular de compilador) generan código máquina que puede ser ejecutado por el ordenador. Sin embargo esto no es totalmente cierto ya que hay una etapa de enlazado que debe ser realizada por otro programa denominado enlazador (linker). Lo habitual es que durante la escritura de un programa sea necesario utilizar otros subprogramas en forma de bibliotecas de funciones o bien que el propio programa esté formado realmente por varios programas almacenados en diferentes ficheos. Esta situación hace que durante la compilación de cada módulo no se conozca con exactitud la ubicación de las instrucciones del resto de programas o bibliotecas de funciones. El papel del enlazador es unir en un único fichero ejecutable el resultado de todas las compilaciones así como las bibiotecas estáticas de funciones. Es frecuente que el enlazado sea un paso más de la compilación y que se ejecute inmediatamente tras la compilación de todos los ficheros.
Es habitual denominar a cada uno de los ficheros que participan en el desarrollo de un programa con nombres genéricos que identifican en qué fase se encuentran. Por ejemplo, las instrucciones que escribe directamente el programador y que forman el programa en el lenguaje de programación escogido como ficheros fuente (source file). El resultado de la compilación de estos programas se denomina fichero objeto (object file) y por el último el resultado del enlazado fichero ejecutable (executable file). Es este último el único que puede entender un ordenador sin la presencia del compilador. En el caso de los lenguajes interpretados el fichero fuente es directamente interpretado y ejecutado por el interprete.