Diferencia entre lenguajes compilados e interpretados
De forma general, la diferencia entre los lenguajes compilados e interpretados es que los primeros usan un compilador para poder traducirlo y ejecutar el programa, mientras que los segundos requieren de un intérprete que traduzca el código al momento de la ejecución.
Para entender la diferencia entre los lenguajes compilados y los interpretados, primero se debe entender la definición de cada uno.
Lenguajes compilados
Los lenguajes compilados son aquellos lenguajes de alto nivel que como su nombre lo sugiere, requieren de un compilador (programa que traduce un lenguaje de alto nivel en código máquina o lenguaje máquina) para traducirlo y crear la parte ejecutable.
Los lenguajes de alto nivel permiten escribir instrucciones en un idioma muy parecido al inglés así como hacer uso de notaciones matemáticas comunes.
Ejemplos: C y C++
Lenguajes interpretados
Los lenguajes interpretados son aquellos lenguajes de programación también de alto nivel en donde el código fuente debe ser traducido a un lenguaje que la máquina entienda y pueda realizar, no crean un archivo externo.
Ejemplos: Python y Ruby
Diferencia entre lenguajes compilados e interpretados
Los lenguajes interpretados son multiplataforma, recordemos que una plataforma es un sistema operativo que ejecuta programas, por lo que son más flexibles pero se requiere de un intérprete (programa informático que analiza y ejecuta otros programas) para traducirlo y que la máquina lo reconozca.
Todo esto sucede al instante ya que no se guarda la traducción del intérprete, es decir, se traduce al momento cada línea de código de forma ordenada cada vez que se ejecuta el programa por lo que lo hace un poco más lento a comparación de los compilados debido a la sobrecarga al momento de la ejecución. A pesar de esta diferencia de tiempo, los lenguajes interpretados son más populares en el desarrollo de programas que se modifican constantemente, ya sea para agregar o corregir una parte del código. Si bien el aspecto de parecer más lentos puede ser algo negativo, también tiene su punto a favor ya que, a diferencia de los lenguajes compilados que requieren de compilar y esperar a que el programa se haya terminado para saber si existen errores, en los lenguajes interpretados se sabe de inmediato si existe un error y su localización ya que se ejecuta linea por linea, así se puede corregir y modificar el error.
Por otro lado los lenguajes compilados están preparados para ejecutarse inmediatamente ya que durante la compilación se tradujo todo a un lenguaje que la máquina entendiera (lenguaje máquina) y por ello suelen ser más rápidos.
De modo que, gracias al compilador se traduce el código fuente, se crea un archivo ejecutable y de este no se puede acceder a su código fuente (a menos que sea desde la máquina de origen) dependiendo del caso esto podría ser o no algo positivo. Esto se debe a que una vez compilado el programa ya no es necesario el código fuente para poder ejecutarlo. Al obtener el archivo objeto puedes ejecutar el programa sin tener que compilar cada vez que lo ejecutes. Otra diferencias radica en que estos no son multiplataforma (solo sirve para una plataforma en específico) y de querer ejecutarlo en otra plataforma o computadora este se debe compilar de nueva cuenta lo que le suma un paso extra y tiempo de más. En caso de existir un error en el código, el compilador lo hará saber, una vez depurado el problema se requiere compilar otra vez el programa.
Acerca de los intérpretes y compiladores
Intérprete
El punto clave de los lenguajes interpretados es, como su nombre lo sugiere, el intérprete que requieren para ejecutar el programa. Un intérprete es un programa que interpreta y ejecuta otros programas. La traducción se realiza línea por línea y no guarda la traducción.
El proceso para ejecutar un programa en los lenguajes interpretados se lleva acabo cuando el intérprete obtiene la instrucción del código fuente (recordemos que el código fuente son lineas de texto con instrucciones escritas en un lenguaje de programación diferente al lenguaje máquina por lo que es necesario traducirlos y que la máquina lo entienda) para realizarla de forma inmediata. Primero se ejecutan en secuencia parte del código maquina que radican en el intérprete, éstas pasan a la unida central de procesamiento (C.P.U). Cuando se finaliza dicha secuencia el resultado realizado por la C.P.U era lo que las líneas del código fuente dictaban o expresaban. Esto se realiza línea por línea hasta que se finaliza todo lo escrito por el programador.
Existen diferentes tipos de intérpretes y se clasifican según la estructura interna del intérprete. Algunos de ellos utilizan procesos propios de los compiladores y de los intérpretes, por los que se les considera híbridos. Algunos ejemplos de otros tipos de interpretes son:
- Interpretes avanzados: permite realizar un análisis más a fondo del código fuente e incorporan un paso previo de análisis de todo el programa que se está creando.
- Intérpretes incrementares: utilizados comúnmente en sistemas interactivos, donde existen módulos compilados y módulos que se pueden modificar.
Compilador
Por otro lado, el punto clave de los lenguajes compilados es la necesidad de un compilador, como ya se mencionó anteriormente, el compilador es el programa que se encarga de traducir los programas que escribimos en un lenguaje de alto nivel (parecido al inglés y que nosotros podemos entender) a código máquina (lenguaje de máquina, binario), se producirá la compilación si el programa no tiene ningún error de sintaxis. De existir un error en el código el compilador genera un lista con los errores existentes para poder depurarlos.
La secuencia para la compilación inicia cuando creamos el código fuente y lo compilamos. De no haber error se obtiene un programa fuente que el compilador tradujo a código máquina. El programa fuente pasa a un linker o enlazador que es un programa que se encarga de insertar el código máquina de las librerías que decidiste usar en tu programa ( las librerías son colecciones de funciones ya traducidas a código máquina que facilitan al programador crear su programa). Después de realizar ese proceso, el linker crea el programa ejecutable. El programa ejecutable es la traducción ya terminada a código máquina.
Para ejecutar el programa una parte del sistema operativo de la computadora, conocido como cargador, inserta el programa ejecutable a la memoria principal de la máquina y lo prepara para la ejecución. El control pasa a la unidad central de procesamiento (C.P.U) donde primero se lleva acabo una fase llamada “captación de instrucciones” en la cual las instrucciones que se ejecutarán se leen desde la memoria. La fase siguiente, denominada “ejecución de la instrucción”, interpreta las instrucciones que se leyeron el la fase anterior y envía unas señales a los controles que tengan que intervenir en la ejecución, después de esa ejecución se establece la siguiente instrucción a realizar.
Entender a ciencia cierta la diferencia de ambos lenguajes puede ser un poco complicado ya que las características de los lenguajes no son muy diferentes, en cualquier de los caso se tiene que tener en cuenta el uso que ese le dará a cada lenguaje y por lo consiguiente tener en cuenta su rendimiento.