¿Lenguajes
de Programación Interpretados o Compilados?
En esencia un lenguaje de
programación interpretado requiere de "otro programa" llamado
interprete, que se encarga de leer el código del programa y decirle a la
máquina que instrucciones debe ejecutar, todo esto proceso en tiempo de
ejecución.
Anteriormente este proceso se
realizaba línea por línea, como el caso de las primeras versiones de
Basic, dada la ineficiencia de este
procedimiento, se crearon las máquinas virtuales, las cuales
"compilan" el código fuente completo y generan un código intermedio,
optimizando en gran medida varios problemas que el modelo anterior presentaba.
Por otro lado un lenguaje
compilado, pasa por un programa compilador, que evalúa todo el código fuente y
genera un ejecutable binario, el cual está en el idioma nativo de la máquina,
es decir está codificado directamente para que el procesador o en su defecto
las librerías del sistema operativos directamente ejecuten las instrucciones.
El proceso de compilación se
realiza en tiempo de diseño, después de
compilado un programa genera un código objeto, el cual no requiere de ningún
otro programa para su ejecución.
Según Wikipedia y otras fuentes de
internet estas son algunas de las ventajas y desventajas de los lenguajes
interpretados.
Ventajas de
los lenguajes interpretados
·
Portabilidad: Esta es la
principal ventaja que presenta este tipo de lenguajes, porque puede ser
compilado en y para cualquier plataforma o sistema operativo.
·
Compatibilidad: al ser
interpretado por el sistema operativo, es la máquina virtual o framework el que
se encarga de que las intrucciones sean ejecutadas por el software y el
hardware.
·
Independencia de
plataforma.
·
reflexión y
uso reflexivo del evaluador (ej. una función eval de primer orden)
·
Generación funcional de primer orden, y órden sin
necesidad de especificar metadata.
·
Posibilidad de generación de código in-situ, sin
necesidad de recurrir a una compilación (ie. Spring)
·
Tipos
Dinámicos
·
Facilidad
en la depuración (es más fácil obtener información del código fuente
en lenguajes interpretados)
·
Pequeño
tamaño del programa (puesto que los lenguajes interpretados tienen
flexibilidad para elegir el código de instrucción)
Desventajas
de los lenguajes interpretados
·
Velocidad: Es el
aspecto más notable y el cual se debe evaluar a fondo al crear software con
este tipo lenguajes.
·
Portabilidad: es una
desventaja también. Exceptuando el caso de Java, se ha hecho un excelente
trabajo en cuanto a la portabilidad ya que existe para casi todas las plataformas, por no
decir todas, actuales. El .NET framework, lamento decir que en la actualidad,
se encuentra ciento por ciento probado solo en Windows.
·
Máquina
virtual: Requiere el uso de
máquina virtual.
·
Problemas
de versiones en librerías y conflictos en las instalaciones
·
No usa el
100% de los recursos: Por ser independiente a la máquina, no aprovecha el
100% de las posibilidades que ofrece la arquitectura de hardware como la GPU y
la CPU.
Para desmentir estos que ya se han
convertido en mito, revisemos algunas de
las desventajas que Wikipedia y algunas páginas web alegan como ventajas de los
lenguajes interpretados.
·
Portabilidad: Esta es la
principal ventaja que presenta este tipo de lenguajes, porque puede ser
compilado en y para cualquier plataforma o sistema operativo.
R./ Delphi es un lenguaje que se puede
compilar en forma nativa (binaria en código de máquina) para las plataformas
que soporta actualmente como Windows 32 y 64 bits, MAC OSX, IOS (IPhone, IPad) y Android, en poco tiempo estará
disponible para Windows Phone, BlackBerry y Linux versión server.
Con una
ventaja adicional, todo se realiza desde el mismo IDE de desarrollo de Delphi,
así se puede mantener un código único y compilarlo en cualquiera de las
plataformas requeridas.
·
Compatibilidad: al ser
interpretado es la máquina virtual o framework el que se encarga de que las
intrucciones sean ejecutadas por el software y el hardware.
R./ Porque
dejar el trabajo a otro programa? el pretender mantener la compatibilidad no
permite el uso del 100% de los recursos del sistema, en especial de la CPU, GPU
y la memoria.
Delphi por
su parte genera código nativo especifico para cada plataforma, sin la necesidad
de máquina virtual, lo que hace el código más compacto, eficiente y mucho más
rápido en tiempo de ejecución.
Una ventaja
adicional es la seguridad que representa no exponer el código fuente, que
eventualmente puede ser modificado por algún usuario experto. (hacker).
·
Independencia de
plataforma. en teoría los lenguajes interpretados son independientes de la
plataforma, sin embargo dependen de la disponibilidad de la máquina virtual en
cada una de las plataformas.
R./ La independencia de la plataforma
está sujeta a la instalación de la máquina virtual en cada una de las
plataformas para las cuales esté disponible, y dichas máquina virtuales pueden llegar
a ser de tamaños de varios gigabytes, presentando incompatibilidad de librerías
y de versiones. lo cual redunda en
costos de soporte y tiempos de instalación y actualización.
Delphi
genera ejecutables compactos, que no requieren ningún tipo de maquina virtual,
el código es autónomo en cada una de las plataformas para las cuales esté
disponible.
·
reflexión y
uso reflexivo del evaluador (ej. una función eval de primer orden)
R./ En Delphi se ha implementado el
uso del RTTI (Run-Time Type Information), funcionalidad que permite obtener la
información necesaria del código en tiempo de ejecución, y por supuesto
implementar la funcionalidad de Reflection disponible en los lenguajes
Interpretados.
·
Generación funcional de primer orden, y órden sin
necesidad de especificar metadata.
R./ Aplica la
misma respuesta del punto anterior
·
Posibilidad de generación de código in-situ, sin
necesidad de recurrir a una compilación (ie. Spring).
R./ Efectivamente es muy difícil
generar código in-situ en un lenguaje que no ha sido diseñado para eso, sin
embargo es extremadamente sencillo embeber lenguajes de script dentro de la
aplicación, para aquellas posibles oportunidades donde se pueda requerir.
De hecho
existen librerías como la DWS que implementa pascal interpretado dentro de un
ejecutable, igualmente está FastScript de FastReport y por supuesto es fácil
embeber PHP, Java y otros lenguajes interpretados, ya que están diseñados para
ser embebidos.
Es posible
también desde Delphi ejecutar funciones escritas en los lenguajes
interpretados, como desde algunos lenguajes ejecutar funciones escritas en
Delphi.
·
Tipos
Dinámicos: Los lenguajes
interpretados tienen la posibilidad de crear tipos dinámicamente en tiempo de
ejecución.
R./ En Delphi están implementados los
Generics, el RTTI y los DinArrays, además el manejo de estructuras de datos es
bastante fuerte y por si fuera poco, la programación orientada a objetos está
muy bien diseñada, cosa que no ocurre en otros lenguajes interpretados. así que los tipos dinámicos es un tema que
está más que solucionado.
·
Facilidad
en la depuración (es más fácil obtener información del código fuente
en lenguajes interpretados).
R./ Delphi
tiene uno de los mejores depuradores que hay en el mercado, incluso es posible
depurar y hacer deploy en otros entornos, así desde el IDE de Delphi se puede
compilar y depurar aplicaciones corriendo remotamente en un MAC, un IPhone o un
Android.
Incluso si
no se tiene MAC para compilar y depurar sus aplicaciones en OSX o IOS, es
posible contratar servicios en la nube para tales fines, los cuales tiene
tarifas por horas.
·
Pequeño
tamaño del programa (puesto que los lenguajes interpretados tienen
flexibilidad para elegir el código de instrucción)
R./ En la práctica esto no es tan cierto, es posible
que para instalar una pequeña aplicación sea necesario instalar todo el
framework o librerías que pueden llegar a pesar varios Gigabytes.
Con Delphi puede seleccionar si hacer el Deploy todo
en un solo ejecutable o dividirlo en librerías, dos métodos disponibles, aunque
en la práctica casi el 90% siempre eligen un solo ejecutable que no depende de
ninguna librería para su ejecución.
Como podemos apreciar, no existen
objeciones con respecto al lenguaje Delphi,
cumple tanto las ventajas de un lenguaje compilado como las ventajas de
un lenguaje interpretado. Hasta el día
de esta publicación, es el único lenguaje dentro de lo que he conocido que
tiene estas características.
Creo sin miedo a equivocarme, que
los dos lenguajes comerciales más robustos hoy en días son Java como lenguaje
interpretado y Delphi como lenguaje compilado.
Espero sus comentarios.
Mg. Gustavo Enríquez
No hay comentarios:
Publicar un comentario