domingo, 21 de noviembre de 2010

Lenguajes Script

Javascript

JavaScript es un lenguaje de scripting orientado a objetos, basado en prototipos, sin tipo y liviano, utilizado para acceder a objetos en aplicaciones. 
Principalmente, se utiliza integrado en un navegador web permitiendo el desarrollo de interfaces de usuario mejoradas y páginas web dinámicas. JavaScript es un dialecto de ECMAScript y se caracteriza por ser un lenguaje basado en prototipos, con entrada dinámica y con funciones de primera clase. 
JavaScript ha tenido influencia de múltiples lenguajes y se diseñó con una sintaxis similar al lenguaje de programación Java, aunque más fácil de utilizar para personas que no programan.

Ejemplo:



<HTML>
<HEAD>
  <SCRIPT LANGUAGE="JavaScript">
  <!---
    function HolaMundo() {
      alert("¡Hola, mundo!");
    }
  // --->
  </SCRIPT>
</HEAD>
<BODY>
<FORM>
  <INPUT TYPE="button" NAME="Boton" VALUE="Pulsame" onClick="HolaMundo()">
</FORM>
</BODY>
</HTML>



Perl


La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves,estructuras de control y subrutinas.

Perl también toma características de la programación shell. Todas las variables son marcadas con un signo precedente (sigil). Los sigil identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigil permiten interpolar variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.
Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y tareas de gestión de datos.
En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a objetos. Éstos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del núcleo de Perl".
Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas errores fatales.

Aplicaciones

Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos módulos estándares y de terceras partes.
Se ha usado desde los primeros días del Web para escribir guiones (scripts) CGI. Es una de las "tres Pes" (Perl, Python y PHP), que son los lenguajes más populares para la creación de aplicaciones Web, y es un componente integral de la popular solución LAMP para el desarrollo web. Grandes proyectos escritos en Perl son Slash, IMDb y UseModWiki, un motor de Wiki. Muchos sitios web con alto tráfico, como Amazon.com y Ticketmaster.com usan Perl extensamente.
Perl se usa a menudo como un "lenguaje pegamento", ligando sistemas e interfaces que no fueron diseñados específicamente para interoperar; y para el "escarbado de datos", convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes. De hecho, estas fortalezas están íntimamente unidas. Su combinación hace a Perl una popular herramienta de propósito general para los administradores de sistemas, especialmente en programas pequeños que pueden ser escritos y ejecutados en una sola línea de comandos.
Perl es también ampliamente usado en finanzas y bioinformática, donde es apreciado por su desarrollo rápido, tanto de aplicaciones como de despliegue, así como la habilidad de manejar grandes volúmenes de datos.

Ejemplo:
Este es un programa que al ingresar un número muestra si es nulo, par o impar.





Tcl/Tk

Tcl es un lenguaje de script creado por John Ousterhout, que ha sido concebido con una sintaxis sencilla para facilitarse su aprendizaje, sin ir en desmedro de la funcionalidad y expresividad.
Se utiliza principalmente para el desarrollo rápido de prototipos, aplicaciones "script", interfaces gráficas y pruebas. La combinación de Tcl con Tk (del inglés Tool Kit) es conocida como Tcl/Tk, y se utiliza para la creación de interfaces gráficas.
Tcl es un lenguaje interpretado, y su código puede ser creado y modificado dinámicamente. Sus reglas sintácticas son extremadamente simples y posee reglas de alcance dinámico. Permite escribir código fácil de mantener. Los "scripts" Tcl son a menudo más compactos y legibles que los programas funcionalmente equivalentes en otros lenguajes de programación. Es un lenguaje multiplataforma, con intérpretes que se ejecutan sobre Windows, Linux, UNIX, MacOS y OSX e incluso microprocesadores PIC.
Todos los elementos de un programa son comandos, incluyendo las estructuras del lenguaje. Dichos comandos se escriben en notación polaca y pueden ser redefinidos o sobrescritos de manera dinámica.
Una característica notable es que los datos son manejados como cadenas de caracteres Unicode, incluyendo el código fuente, soportando Unicode desde el lanzamiento de la versión 8.1, en el año 1999.
Una de las características más usadas de Tcl es su extensibilidad. Por ejemplo, si una aplicación requiere algo de funcionalidad no ofrecida por el Tcl estándar, los nuevos comandos de Tcl pueden ser implementados usando el lenguaje C, un integrado sumamente fácil. Tcl es "extensible" a través de C, C++ y Java. Mediante una extensión, permite la programación orientada a objetos. Puede extenderse también a entornos gráficos, a través de una interfaz denominada Tk.
La programación orientada a eventos se realiza sobre "sockets" y archivos, además son posibles los eventos basados en tiempo y los definidos por el usuario.

Tipos de variables

Las variables no tienen tipos explícitamente. Sin embargo podemos definir seis tipos
  • Booleanas : 0/no/off (en caso de ser falso) y 1/yes/on/ (en caso de ser verdadero) o un número diferente de 0
  • Números : 1 0 3.14 1.e-10, se tratan como cadenas, salvo en expresiones aritméticas en que se convierte primero en binario.
  • Cadenas de caracteres : Bienvenido, "Madame De Labas", 32 , {z 3.14}
  • Listas : de booleanas, nombres, cadenas o listas (pudiendo anidar listas)
  • Diccionarios : Son pares clave-valor, similares a las tablas asociativas. Pueden contener cualquier tipo de dato en el valor. Este tipo de variables se incluye desde Tcl 8.5 en adelante.
  • Tablas asociativas : T(clave) M(2,3) que puedan contener los 5 tipos anteriores, incluso mezclados.
Ejemplo: 

Python

Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: programación orientada a objetos, programación imperativa y programación funcional. Otros paradigmas están soportados mediante el uso de extensiones.
Python usa tipado dinámico y conteo de referencias para la administración de memoria.
Una característica importante de Python es la resolución dinámica de nombres; es decir, lo que enlaza un método y un nombre de variable durante la ejecución del programa (también llamado ligadura dinámica de métodos).
Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable.
Python fue diseñado para ser leído con facilidad. Entre otras cosas se utilizan palabras en inglés donde otros lenguajes utilizarían símbolos (por ejemplo, los operadores lógicos !, | |  y && en Python se escriben not, or y and, respectivamente).
Los comentarios se inician con el símbolo #, y se extienden hasta el final de la línea. El intérprete no toma en cuenta los comentarios, lo cual es útil si deseamos poner información adicional en nuestro código como, por ejemplo, una explicación sobre el comportamiento de una sección del programa.

Tipos de datos

Los tipos de datos se pueden resumir en esta tabla:
TipoClaseNotasEjemplo
strCadenaInmutable'Cadena'
unicodeCadenaVersión Unicode de stru'Cadena'
listSecuenciaMutable, puede contener objetos de diversos tipos[4.0, 'Cadena', True]
tupleSecuenciaInmutable, puede contener objetos de diversos tipos(4.0, 'Cadena', True)
setConjuntoMutable, sin orden, no contiene duplicadosset([4.0, 'Cadena', True])
frozensetConjuntoInmutable, sin orden, no contiene duplicadosfrozenset([4.0, 'Cadena', True])
dictMappingGrupo de pares clave:valor{'key1': 1.0, 'key2': False}
intNúmero enteroPrecisión fija, convertido en long en caso de overflow.42
longNúmero enteroPrecisión arbitraria42L ó 456966786151987643L
floatNúmero decimalComa flotante de doble precisión3.1415927
boolBooleanoValor booleano verdadero o falsoTrue o False

  • Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución.
  • Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución.


Listas y Tuplas

  • Para declarar una lista se usan los corchetes [ ], en cambio, para declarar una tupla se usan los paréntesis ( ). En ambas los elementos se separan por comas, y en el caso de lastuplas es necesario que tengan como mínimo una coma.
  • Tanto las listas como las tuplas pueden contener elementos de diferentes tipos. No obstante las listas suelen usarse para elementos del mismo tipo en cantidad variable mientras que las tuplas se reservan para elementos distintos en cantidad fija.
  • Para acceder a los elementos de una lista o tupla se utiliza un índice entero (empezando por "0", no por "1"). Se pueden utilizar índices negativos para acceder elementos a partir del final.
  • Las listas se caracterizan por ser mutables, es decir, se puede cambiar su contenido en tiempo de ejecución, mientras que las tuplas son inmutables ya que no es posible modificar el contenido una vez creada.

Funciones

  • Las funciones se definen con la palabra clave def, seguida del nombre de la función y sus parámetros. Otra forma de escribir funciones, aunque menos utilizada, es con la palabra clave lambda (que aparece en lenguajes funcionales como Lisp).
  • El valor devuelto en las funciones con def será el dado con la instrucción return.

Ejemplo:
El siguiente ejemplo trata sobre la serie de Fibonacci.
este programa calcula los primeros 20 números de la serie:


Ejecutamos el programa.....



Bibliografia

sábado, 20 de noviembre de 2010

Lenguajes Script

Un script (cuya traducción literal es guión) o archivo de órdenes o archivo de procesamiento por lotes es un programa usualmente simple, que por lo regular se almacena en un archivo de texto plano. Los script son casi siempre interpretados, pero no todo programa interpretado es considerado un script. El uso habitual de los scripts es realizar diversas tareas como combinar componentes, interactuar con el sistema operativo o con el usuario. Por este uso es frecuente que los shells sean a la vez intérpretes de este tipo de programas.

Un lenguaje script  es un lenguaje de programación que está diseñado para ser ejecutado por medio de un intérprete, en contraste con los lenguajes compilados. Teóricamente, cualquier lenguaje puede ser compilado o ser interpretado, así que esta designación es aplicada puramente debido a la práctica de implementación común y no a alguna característica subyacente de un lenguaje en particular. Sin embargo, hay los lenguajes que son diseñados para ser intrínsecamente interpretativos, por lo tanto un compilador causarán una carencia de la eficacia.

Muchos autores rechazan la clasificación de lenguajes de programación entre interpretados y compilados, considerando que el modo de ejecución (por medio de intérprete o de compilador) del programa escrito en el lenguaje es independiente del propio lenguaje. 
Muchos lenguajes han sido implementados usando tanto compiladores como intérpretes, incluyendo Lisp, Pascal, C, BASIC, y Python. Mientras que Java es traducido a una forma que se destina a ser interpretada, la compilación justo a tiempo es frecuentemente usada para generar el código de máquina.

Los lenguajes interpretados dan a los programas cierta flexibilidad adicional sobre los lenguajes compilados. Algunas características que son más fáciles de implementar en intérpretes que en compiladores incluyen, pero no se limitan, a:
  • independencia de plataforma (por ejemplo el byte code de Java)
  • reflexión y uso reflexivo del evaluador (ej. una función eval de primer orden)
  • 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)
  • ámbito dinámico
  • gestión de memoria automática

Desventajas de los lenguajes script

La ejecución del programa por medio de un intérprete es usualmente mucho menos eficiente que la ejecución de un programa compilado. No es eficiente en tiempo porque, o cada instrucción debe pasar por una interpretación en tiempo de ejecución, o como en más recientes implementaciones, el código tiene que ser compilado a una representación intermedia antes de cada ejecución. La máquina virtual es una solución parcial al problema de la eficiencia del tiempo pues la definición del lenguaje intermedio es mucha más cercana al lenguaje de máquina y por lo tanto más fácil de ser traducida en tiempo de ejecución. Otra desventaja es la necesidad de un intérprete en la máquina local para poder hacer la ejecución posible.

Bibliografia

viernes, 19 de noviembre de 2010

Compiladores E Intérpretes

Compiladores e intérpretes 

Un archivo fuente es el que contiene el texto del código del programa que ha sido escrito por el equipo de programadores. Las computadoras solamente pueden ejecutar instrucciones que estén en código máquina, así que los programas en código fuente no se pueden ejecutar directamente en la computadora. Un compilador debe, en primer lugar, convertir el archivo fuente en un archivo intermedio que se llama archivo objeto o archivo código objeto (imagen). El archivo objeto contiene una traducción del código del programa en lenguaje máquina, pero aún no se considera un programa ejecutable.

Una división común para describir los compiladores, es como se describe enseguida, aunque el orden puede cambiar, algunas fases se pueden combinar o dividir en otras fases o aún otras fases se pueden insertar, pero en general, los compiladores siguen estas tareas:

· Análisis léxico. Es la parte inicial de leer y analizar el código fuente. El texto es leído y dividido en tokens, cada uno de los cuales corresponde a un símbolo en el lenguaje de programación, por ejemplo, el nombre de una variable, una palabra reservada o un número.

· Análisis sintáctico.
 En esta fase se toma una lista de tokens producida por el análisis léxico y los acomoda en una estructura de árbol llamada árbol sintáctico que refleja la estructura del programa. Esta fase también se llama parsing.

· Verificación de tipos.
 En esta parte se analiza el árbol sintáctico para determinar si el programa viola ciertos requerimientos de consistencia, es decir, si una variable se utiliza pero no se declara, o si se usa en un contexto que no tiene sentido por el tipo de variable, tal como un string para utilizar un valor booleano como una función apuntador.

· Generación de código intermedio.
 El programa se traduce a un lenguaje simple independiente de la máquina.

· Ubicación de registros.
 Los nombres simbólicos de las variables utilizadas en el código intermedio se traducen a números, cada uno de ellos corresponde a un registro en el código máquina objetivo (de la máquina que va a ejecutar finalmente el programa).

· Generación de código máquina.
 El lenguaje intermedio se traduce al lenguaje ensamblador (una representación textual de código máquina) para una arquitectura de máquina específica.

· Ensamblado y Enlazado.
 El código en lenguaje ensamblador se traduce a una representación binaria y se determina la dirección real de las variables, funciones, etc.


Compiladores e intérpretes de programas
Historia de la compilación de un programa, desde el código fuente hasta el código ejecutable. 

Un programa linker (enlazador), combina todos los módulos en el archivo objeto para formar un archivo ejecutable (figura 24). Un archivo ejecutable sí es un programa completo en sí mismo, es decir, no requiere hacer referencia al código fuente original. Esto significa que correrá más rápidamente, comparado con la ejecución del mismo programa cuando aún no es ejecutable.

Un intérprete traduce un código fuente en lenguaje máquina también. El intérprete difiere del compilador en que ejecuta cada orden una vez que se traduce. Este proceso puede hacer más lenta la ejecución del programa, así que los intérpretes se utilizan menos que los compiladores. Un intérprete es otra manera de implementar un lenguaje de programación. La interpretación comparte muchos aspectos con el compilador. Los análisis léxico, sintáctico y verificación de tipos son exactamente los mismos que en un compilador.

Pero en lugar de generar código del árbol sintáctico, el árbol sintáctico se procesa directamente para evaluar expresiones y ejecutar sentencias, y así hasta terminar. Un intérprete puede necesitar evaluar la misma parte del árbol sintáctico varias veces (por ejemplo cuando se hacen ciclos), por eso la interpretación puede ser más lenta que la ejecución de un programa compilado. Pero escribir un intérprete es más fácil de mover a una máquina diferente, así que para aplicaciones donde la velocidad no importa, lo mejor es utilizar un intérprete.

Es muy útil saber cómo se hace un intérprete o un compilador, porque esto permite a los programadores tener una idea de lo que hacen los programas de alto nivel, lo que a su vez, ayudará a los programadores para crear código más eficiente. Otras razones. Los errores que devuelven los compiladores proporcionan una manera fácil de entender el código fuente; además, se conoce la diferencia entre errores léxicos, sintácticos, errores de tipos, etc.


Bibliografia
http://traductoresune.blogspot.com/2007/05/diferencias-entre-compilador-e.html
http://www.mailxmail.com/curso-informatica-ordenador-cientifico-desarrollo/compiladores-interpretes-programas
http://enciclopedia.us.es/index.php/Compilador
http://enciclopedia.us.es/index.php/Int%C3%A9rprete