I have joined Anti-IF Campaign :recursos digitales para la arquitectura autonoma:
lenguajes dinamicos

Dynamic programming language is a term used broadly in computer science to describe a class of high-level programming languages that execute at runtime many common behaviors that other languages might perform during compilation, if at all. These behaviors could include extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system, all during program execution. These behaviors can be emulated in nearly any language of sufficient complexity, but dynamic languages provide direct tools to make use of them.

Most dynamic languages are dynamically typed, but not all.

Compilación en tiempo de ejecución

En informática, la compilación en tiempo de ejecución (también conocida por sus siglas inglesas, JIT, just-in-time), también conocida como traducción dinámica, es una técnica para mejorar el rendimiento de sistemas de programación que compilan a bytecode, consistente en traducir elbytecode a código máquina nativo en tiempo de ejecución. La compilación en tiempo de ejecución se construye a partir de dos ideas anteriores relacionadas con los entornos de ejecución: la compilación a bytecode y la compilación dinámica.

En un sistema que use compilación a bytecode como por ejemplo Smalltalk, Perl, GNU CLISP o las primeras versiones de Java, el código fuente es traducido a un código intermedio llamado bytecode. El bytecode no es el código máquina de ninguna computadora en particular, y puede por tanto ser portable entre diferentes arquitecturas. El bytecode es entonces interpretado, o ejecutado por una máquina virtual.

Un entorno con compilación dinámica es aquél en el que el compilador puede ser usado durante la ejecución. Por ejemplo, la mayoría de los sistemas Commons Lisp tienen una función compile que permite compilar nuevas funciones creadas durante la ejecución del programa. Aunque ventajoso en la depuración interactiva, la compilación dinámica es menos útil en un sistema en explotación desatendido. Ese método es más común en emuladores modernos y frecuentemente comerciales que requieren mucha velocidad.

En un entorno de compilación en tiempo de ejecución, la compilación a bytecode es el primer paso, reduciendo el código fuente a una representación intermedia portable y optimizable. El bytecode se despliega en el sistema de destino. Cuando dicho código se ejecuta, el compilador en tiempo de ejecución lo traduce a código máquina nativo. Esto puede realizarse a nivel de fichero (programa) o de funciones, compilándose en este último caso el código correspondiente a una función justo cuando va a ejecutarse (de aquí el nombre de just-in-time, «justo a tiempo»).

El objetivo es combinar muchas de las ventajas de la compilación a código nativo y a bytecode: la mayoría del «trabajo pesado» de procesar el código fuente original y realizar optimizaciones básicas se realiza en el momento de compilar a bytecode, mucho antes del despliegue: así, la compilación a código máquina del programa resulta mucho más rápida que partiendo del código fuente. El bytecode desplegado es portable, a diferencia del código máquina para cualquier arquitectura concreta. Los compiladores dinámicos son más fáciles de escribir, pues el compilador abytecode ya realiza buena parte del trabajo.

La metaprogramación y los lenguajes dinámicos

La metaprogramación es una técnica muy poderosa, y muy socorrida en el terreno de los lenguajes dinámicos. Puede llevarnos a reducir muy fuertemente el total de código que escribimos - Y lo que es mucho más importante, a minimizar la cantidad de código repetido innecesariamente. Nos lleva claramente a aumentar la calidad y mantenibilidad de nuestro código.

Programas que escriben programas: La metaprogramación consiste en escribir código que no ataca directamente al dominio del problema que queremos atacar, sino que al código que lo resolvería. Dicho sea de otro modo, el código que escribimos no modifica los datos o el estado de nuestra información, sino el del programa.

Las ventajas de los lenguajes dinámicos: La metaprogramación no es una nueva idea - Nació hace ya más de 40 años, con el lenguaje Lisp, y se popularizó tremendamente en el lenguaje Smalltalk, a principios de los 80. Ambos lenguajes fueron revolucionarios en diversos aspectos, y si no gozan hoy en dí­a de mayor popularidad, se debe a que, en sus implementaciones originales sufrí­an de problemas de rendimiento en el hardware de su época. Sin embargo, sus ideas básicas han servido para conformar a una gran cantidad de lenguajes que han ido adquiriendo una cada vez mayor popularidad y aceptación: Los lenguajes dinámicos.

Podemos categorizar a un lenguaje de dinámico cuando no requiere de ciclos determinados y claramente separados de compilación y ejecución. Mucha gente cree erróneamente que los lenguajes dinámicos (por ejemplo, Perl, Ruby, Python o PHP, ampliamente utilizados en el mundo del Software Libre) son interpretados - La realidad es completamente distinta, son lenguajes que cuentan con compiladores tremendamente eficientes, que en fracciones de segundo pueden convertir decenas de miles de ­líneas de código en una representación binaria (bytecode para sus respectivas máquinas virtuales).

La caracterí­stica definitoria de estos lenguajes como dinámicos no es el compilador ágil (aunque, claro está, lo requieren) - Es la presencia de la instrucción (o familia de instrucciones) «eval» (o similar). En resumidas cuentas, eval recibe un parámetro, tí­picamente una cadena, y lo evalúa como código fuente -

Reflectividad: La mayor parte de los lenguajes dinámicos son también reflectivos. Los objetos (y, recuerden, en los lenguajes completamente orientados a objetos, todo es un objeto - Incluyendo las clases, no sólo los objetos instanciados) pueden ser interrogados respecto a los métodos que ofrecen.

Java is old due to it’s over reliance on static technologies that freeze programs at the time they are compiled. Frigid applications have a protective shell that prevents anyone from getting into them.Smalltalk is still new even though it came before Java. Why? Smalltalk is still new because it embraces dynamic technology that enables applications to adapt on the fly to the needs at hand by enabling run time compilation and modification of the application. This means that the system can adapt. This means that programs can be built that are much more flexible than those built using static technologies.

Java is old due to it’s over reliance on static technologies that freeze programs at the time they are compiled. Frigid applications have a protective shell that prevents anyone from getting into them.

Smalltalk is still new even though it came before Java. Why? Smalltalk is still new because it embraces dynamic technology that enables applications to adapt on the fly to the needs at hand by enabling run time compilation and modification of the application. This means that the system can adapt. This means that programs can be built that are much more flexible than those built using static technologies.

Smalltalk is a dynamic system that allows you to evaluate code at anytime. This is possible because Smalltalk is more than a computer language, it’s an entire Integrated Development Environment (IDE) that fully supports compiling small fragements of code and running it right away. Thus “do it” which is the menu option to choose to run a fragment of Smalltalk code. Just select the Smalltalk script text that you wish to run and choose do it from the menu.
In the example, the Smalltalk script text, “Transcript show: ‘Hello World’, in blue highlight has been selected. The menu has been activated (via the right mouse button on a Windows system) and the “Do it” option is activated. This causes the “Transcript” text output window to display the “Hello World” text as shown.
Do it Now! is a play on the phrase “Just Do it” popularized by Nike. Get it done, just doit!

Smalltalk is a dynamic system that allows you to evaluate code at anytime. This is possible because Smalltalk is more than a computer language, it’s an entire Integrated Development Environment (IDE) that fully supports compiling small fragements of code and running it right away. Thus “do it” which is the menu option to choose to run a fragment of Smalltalk code. Just select the Smalltalk script text that you wish to run and choose do it from the menu.

In the example, the Smalltalk script text, “Transcript show: ‘Hello World’, in blue highlight has been selected. The menu has been activated (via the right mouse button on a Windows system) and the “Do it” option is activated. This causes the “Transcript” text output window to display the “Hello World” text as shown.

Do it Now! is a play on the phrase “Just Do it” popularized by Nike. Get it done, just doit!