jueves, 2 de junio de 2011

PROCESADORES DE LENGUAJE

COMPILADORES

Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto.
A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente Y que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la máquina). Su acción equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.

INTERPRETES

Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo. Y que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningún escrito permanente. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:
  • Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.
  • Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).
  • Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.
DIFERENCIA ENTRE COMPILADOR E INTERPRETE

Compilador traduce el codigo fuente a un codigo objeto, es decir que lo traduce todo tu codigo.
adiferencia de un interprete que solo va traduciendo al momento mientras se ejecuta.
Una analogia seria
Compilacion. traduces todo un escrito de ingles a español, asi cualquiera puede leer el escrito traducido sin recurrir a la vesion original en ingles.
Interprete. imagina un a tres personas, 1 que habla español otro ingles y otro que habla los 2 idiomas. entonces l inteprete traduciria lo que dice la persona en ingles, como puedes ver traduce al momento todo lo que diga esa persona en ingles, y obvio requires el interprete.
En programacion podria ser por ejemplo, para compilacion un programa con extencion .exe
para interprete un programa en java y requires la maquina virtual de java que seria tu interprete.
Un compilador traduce el programa escrito en un LAN (lenguaje de alto nivel) a código máquina. El programa es traducido por completo.
Un intérprete traduce línea a línea. Traduce una línea y la ejecuta.

ESTRUCTURA DE UN COMPILADOR



Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de análisis, y las demás la síntesis. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.

Análisis Léxico.
En la fase de análisis léxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). En el caso de los identificadores creados por el programador no solo se genera un componente léxico, sino que se genera otro lexema en la tabla de símbolos.

Análisis Sintáctico.
En esta fase, los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida.

Análisis Semántico.
La fase de análisis semántico se intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.

Generación de código Intermedio.
Algunos compiladores generan una representación intermedia explícita del programa fuente, una vez que se han realizado las fases de análisis. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto.

Optimización de Código.
En esta fase se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar.

Generación de Código.
Esta constituye la fase final de un compilador. En ella se genera el código objeto que por lo general consiste en código en lenguaje máquina (código relocalizable) o código en lenguaje ensamblador.

Administrador de la tabla de símbolos.
Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador. El registro incluye los campos para los atributos del identificador. El administrador de la tabla de símbolos se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.

Manejador de errores.
En cada fase del proceso de compilación es posibles encontrar errores. Es conveniente que el tratamiento de los errores se haga de manera centralizada a través de un manejador de errores. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa

ESTRUCTURA DE UN INTERPRETE


CLASES DE COMPILADOR

Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
  • Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
  • Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en
lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó
intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.
Compiladores que van traduciendo cada instrucción del código fuente a lenguaje de máquina, se llaman se llaman interpretes y los compilados que revisan todo el código y generan un archivo ejecutable.
En wikipedia hay estas otras clasificaciones.
Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.





LA SINGULARIDAD


Iniciamos esta serie de Hablando de… con el ácido sulfúrico, sintetizado por primera vez por Geber, cuyas ideas inspiraron la búsqueda en la Edad Media de la piedra filosofal por los alquimistas, el más grande de los cuales fueParacelso, que eligió ese nombre para compararse con Celso, que se pensaba era un médico romano pero realmente era un tratadista que escribió una de las primeras grandes enciclopedias, la mayor de las cuáles es elSiku Quanshu, que contiene tesoros científicos, literarios y filosóficos como los tres textos clásicos del Taoísmo Filosófico, que tenía un concepto de la realidad muy diferente del occidental hasta la llegada de la “realidad cuántica”, puesta en cuestión por algunos físicos, que se enzarzaron en interesantes debates como las discusiones entre Einstein y Bohr, en las que tomaron parte otros genios como John von Neumann, cuyas ideas de máquinas auto-replicantes, junto con el concepto de una inteligencia artificial comparable a la humana de Turing, llevaron a las primeras predicciones de una “singularidad tecnológica”. Pero hablando de la singularidad tecnológica

La idea de que llegaría el día en el que hubiera ordenadores de una inteligencia suficiente para diseñar otros, o bien de que pudiéramos escribir programas capaces de escribir programas mejores, capaces de escribir otros mejores, etc., fue expresada de manera explícita por primera vez por Irving J. Good (estadístico y criptólogo). Good se planteó lo siguiente, que puede parecer algo obvio ahora, pero piensa que lo pensó en 1965:
Supongamos que diseñamos una máquina “ultrainteligente”. Sería muy superior a nosotros en numerosos procesos intelectuales. Uno de estos procesos probablemente sería diseñar otras máquinas más inteligentes, capaces de repetir el proceso: se produciría un aumento geométrico de la inteligencia de cada generación, de modo que sería una “explosión de inteligencia”. La primera máquina capaz de hacer eso es la última invención que la humanidad haría.
Pero, como ya dijimos, el genial von Neumann ya había expuesto conceptos parecidos. En una conversación en los 50 con Stanislaw Ulam, ya había predicho que el progreso tecnológico podría producir una singularidad a partir de la cual los “asuntos humanos”, tal y como los entendemos, llegarían a su fin, y no podemos aspirar a comprender lo que vendría después.
Otros, como Ray Kurzwell, han elaborado gráficas que, en su opinión, muestran una tendencia hacia la singularidad. En la siguiente gráfica de Kurzwell puedes ver los sucesos en la historia de la Tierra que han supueso un progreso radical en algún aspecto (la aparición de la vida, el primer homínido bípedo, la agricultura, el primer ordenador…). La gráfica es una recta, pero al ser una escala logarítmica, Kurzwell afirma que el progreso se produce de forma exponencial:
Como siempre, voy a realizar simplificaciones que pueden ponerte los pelos de punta, pero si te pasa eso, te pido que tengas en cuenta el objetivo y la longitud de este artículo. ¿Cómo podría producirse la singularidad si la “ultrainteligencia” es un ordenador?
Probablemente conoces la Ley de Moore, la cual viene a decir (en términos modernos y simplificados) que la capacidad de proceso de los ordenadores se duplica cada dos años. Pero la Ley de Moore se ha venido cumpliendo (más o menos) mientras los humanos han diseñado los ordenadores. Los humanos tienen que inventar cosas nuevas; otros humanos tienen que crecer, aprender en la Universidad, inventar otras nuevas, etc.
Pero supongamos que construimos el primer ordenador que puede diseñar otro completamente, y olvidémonos por un momento de las limitaciones físicas (de las que hablaremos luego). Y supongamos que ese ordenador es, más o menos, igual de competente al diseñar al siguiente que un humano. Entonces, a los dos años tendríamos un ordenador el doble de capaz…lo que significa que diseñaría al siguiente “el doble de capaz” en sólo un año.
Pero el siguiente sería el doble de capaz que el primero, de modo que sólo tardaría seis meses en doblar su capacidad, el siguiente tres, el siguiente uno y medio…llegaría un momento en el que el único límite para el desarrollo de ordenadores más y más inteligentes sería el proceso físico de construcción, porque serían capaces de realizar mejoras en tiempos arbitrariamente cortos: y llegado ese punto, probablemente ya habrían encontrado una solución que realizase mejoras sobre la marcha, o quién sabe…una vez que hubiéramos multiplicado nuestra inteligencia por una potencia de dos decente, seríamos incapaces de comprender las motivaciones, los razonamientos y los actos de esa inteligencia.
Dicho de otra manera: cuando alguien es un poco más inteligente que tú, puedes darte cuenta de ello y relacionarte con ellos. Pero cuando esa inteligencia es muchísimo más grande (por ejemplo, un ratón y un humano), los conceptos que maneja la inteligencia superior no son comprensibles por la inferior. Puedes entender que alguien haga operaciones en su cabeza más rápido que tú, pero ¿cómo puede un ratón entender internet? Éso sería la singularidad tecnológica.
Desde luego, hay muchos pensadores que creen que la idea es ridícula. De hecho, algunos piensan que el ritmo de progreso tecnológico disminuirá con el tiempo, en vez de aumentar, o que la humanidad nunca dejará que se produzca la singularidad, poniendo límites artificiales al desarrollo de la ultrainteligencia. En The Economist se publicó un artículo en el que se reían de estas estimaciones diciendo que, según las proyecciones, las maquinillas de afeitar tendrían 15 cuchillas en 2015. (Por cierto, ya veremos – si me llegan a decir que las habría de cuatro cuchillas hace cinco años me hubiera reído).
Una crítica común es que la miniaturización en los ordenadores tiene un límite, que la disipación de calor en los circuitos y otros procesos físicos impedirán mantener el ritmo de avance actual. Sin embargo, sólo hace falta un avance para que cambie el concepto completamente: puede que sean las redes, la nanotecnología, la computación cuántica…
Puede incluso ser la biotecnología: ¿te imaginas cambiar nuestro ADN para realizar computación “en binario” en nuestro cerebro, capaz de diseñar ADN nuevo? ¿o un interfaz de red mente-máquina de modo que nuestra inteligencia disponga, en paralelo, de ordenadores capaces de realizar cálculos para nosotros? Es difícil predecir por dónde vendrá, si viene, esta singularidad, pero el concepto clave es que, si llega un momento en el que el diseñador es capaz de mejorar, el siguiente diseñador tardará menos tiempo en realizar un mejor diseño.
Las consecuencias de la singularidad, si se producen, son absolutamente impredecibles por su misma naturaleza: no podremos comprender lo que viene después. Lo cual es bastante desasosegador. Desde luego, si la singularidad es cuestión de tiempo y lo que venga después no tiene nada que ver con nosotros, podría explicar (de manera menos trágica que una autodestrucción nuclear) tanto el Argumento del Día del Juicio Final o la Paradoja de Fermi. ¿Quién le hubiera dicho al genial italiano que su “paradoja” podría ser explicada mediante máquinas auto-replicantes? Pero hablando de Fermi…
Nos acercamos a la “singularidad”

Los economistas utilizan el vocablo “exponencialmente” cuando la curva representativa de un proceso da un salto arriba o abajo que la aleja por completo de la tendencia a medio plazo. Miren lo que ocurre con las predicciones del cambio climático. Las personas callan ante las funestas perspectivas que anticipan los expertos, pero piensan que son unos falsos agoreros: “Cambios de esa intensidad se han producido ya en el pasado”, piensan. “Pero nunca se habían producido tan aprisa –replican los convencidos del cambio inevitable–. Y, al contrario de lo que ocurría, parte de la culpa hoy la tienen los humanos, que no paran de envenenar la atmósfera.”

Hay otro cambio exponencial anticipado del que no habla nadie y que, sin embargo, tendrá unas consecuencias tan generalizadas y de mayor impacto en la mente de las personas que el cambio climático. Pocos pero reconocidos expertos de gran prestigio internacional dan por seguro que en los próximos cuarenta años se producirá lo que ellos llaman una “singularidad”. ¿Qué quieren decir con ello?




Sencillamente, que la línea de tendencia que refleja el crecimiento de la capacidad innovadora de la especie humana se disparará hacia arriba hasta niveles insospechados. No sólo se trata de que cualquier ordenador de menos de mil euros tendrá mayor capacidad de memoria y gestión que miles de cerebros humanos juntos, sino, primordialmente, de que la evolución biológica se fusionará con la tecnología en una singularidad irreconocible.
Mediante nanorrobots circulando por nuestra sangre llegaremos con una precisión nunca soñada a la fuente del mal. El envejecimiento tal y como lo conocemos será un hecho del pasado. Hasta ahora la mente de una persona, el software de la vida, dependía del hardware; cuando éste desaparecía, el contenido de la mente también. El conocimiento del funcionamiento del cerebro permitirá anticipar lo que piensan los demás y cuáles serán sus decisiones conductuales… y descargar el software en otros soportes.
Máquinas replicantes más inteligentes que los humanos: a pesar del pesimismo circunstancial que embarga a los especialistas en robótica, ¿alguien cuestiona que en diez años contaremos con robots en los hogares que habrán asumido todos los menesteres caseros? Conoceremos la naturaleza de las emociones y habremos aprendido a gestionarlas; cosas tan sencillas como distinguir entre la ansiedad, imprescindible para alertarnos de un desafío, y el pánico aterrador, que paraliza el crecimiento. ¿Alguien se acuerda o ha aprendido alguna vez que –al contrario del resto de los mamíferos– los humanos tenemos emociones mezcladas, podemos amar y odiar al mismo tiempo?
La mosca del vinagre nos habrá revelado todos los secretos de la memoria, de los sueños y, por lo tanto, del aprendizaje necesario para transformar el mundo. Con eso bastará para que la vida individual y la organización de los colectivos humanos sean irreconocibles cuando se las compare a lo que son hoy. Bastará con que vayan aflorando las tendencias apuntadas.
Pero algunos expertos prevén que los avances enumerados sacudirán las conciencias de tal modo que, si somos capaces de superar los límites impuestos por la velocidad de la luz a la hora de explorar el universo, podremos desprendernos de los condicionantes biológicos y confiar plenamente en los tecnológicos. ¿Por qué desconfía la gente más de estos últimos que de los primeros? ¿Por qué millones de años de mutaciones aleatorias expresadas en el curso de la selección natural arrojarían resultados mejores que los diseñados por una mente, también natural, pero inteligente?

No hay comentarios:

Publicar un comentario