You are on page 1of 10

LENGUAJE DE PROGRAMACION

Definición
Un lenguaje de programación es aquel elemento dentro de la informática que nos
permite crear programas mediante un conjunto de instrucciones, operadores y
reglas de sintaxis; que pone a disposición del programador para que este pueda
comunicarse con los dispositivos hardware y software existentes.

CLASIFICACIÓN DE LENGUAJES DE PROGRAMACIÓN
POR NIVELES DE PROGRAMACION

Lenguaje de Máquina

El lenguaje maquina: este lenguaje ordena a la máquina las operaciones
fundamentales para su funcionamiento. Consiste en la combinación de 0's y 1's
para formar las ordenes entendibles por el hardware de la máquina.
Este lenguaje es mucho más rápido que los lenguajes de alto nivel.
La desventaja es que son bastantes difíciles de manejar y usar, además de tener
códigos fuente enormes donde encontrar un fallo es casi imposible.

Lenguajes de bajo nivel

Son lenguajes totalmente dependientes de la máquina, es decir que el programa
que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras
máquinas.
Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo
las características del mismo.
Dentro de este grupo se encuentran:
El lenguaje ensamblador es un derivado del lenguaje máquina y está formado por
abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de
este lenguaje se crearon los programas traductores para poder pasar los
programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja
con respecto al código máquina es que los códigos fuentes eran más cortos y los
programas creados ocupaban menos memoria. Las desventajas de este lenguaje
siguen siendo prácticamente las mismas que las del lenguaje ensamblador,
ñadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y
mantener.

Lenguajes de alto nivel

Estos lenguajes se encuentran en un punto medio entre los dos anteriores.  Segunda generación: se crearon los primeros lenguajes ensambladores. Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina/s para la que están diseñando el programa. Ej. lo puedes migrar de una máquina a otra sin ningún tipo de problema. Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. todas ellas características de lenguajes de bajo nivel y a la vez realizar operaciones de alto nivel. Tan solo necesitan un traductor que entiendan el código fuente como las características de la máquina. en principio. Pascal. POR ORDEN CRONOLÓGICO Generaciones La evolución de los lenguajes de programación se puede dividir en 5 etapas o generaciones. Nota: EDD's son las abreviaturas de Estructuras Dinámicas de Datos. un programa escrito en un lenguaje de alto nivel. Se tratan de lenguajes independientes de la arquitectura del ordenador. C. Están dirigidos a solucionar problemas mediante el uso de EDD's. Cobol… . Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa.  Tercera generación: se crean los primeros lenguajes de alto nivel. Por lo que. trabajar con direcciones de memoria.  Lenguajes de Medio nivel Se trata de un término no aceptado por todos.  Primera generación: lenguaje máquina. Dentro de estos lenguajes podría situarse C ya que puede acceder a los registros del sistema. pero q seguramente habrás oído.Son aquellos que se encuentran más cercanos al lenguaje natural que al lenguaje máquina. algo muy utilizado en todos los lenguajes de programación. Suelen usar tipos de datos para la programación y hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito específico (como FORTRAN para trabajos científicos).

a partir de un texto. Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta. Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. un compilador equivale a un traductor profesional que. MATLAB. una PC y un PlayStation 3). Comparando su actuación con la de un ser humano. Aquí también se encuentran los lenguajes orientados a objetos. algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. típicamente. un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. Estos lenguajes todavía están poco desarrollados. Cuarta generación. y normalmente no guardan el resultado de dicha traducción. Natural Adabes…  Quinta generación: aquí se encuentran los lenguajes orientados a la inteligencia artificial. Usando un intérprete. con lo cuales se pueden realizar aplicaciones sin ser un experto en el lenguaje. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema. pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce. haciendo posible la reutilización d partes del código para otros programas. Ej. escritos en un lenguaje de alto nivel. Python. Ej. Para mejorar el desempeño. LISP INTÉRPRETES Y COMPILADORES  Intérprete Intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas. los intérpretes sólo realizan la traducción a medida que sea necesaria. un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema. UCSD Pascal y Java). Usando un compilador. por ejemplo. y Ruby). en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos). son los llamados RAD. y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete. mientras que un intérprete corresponde al intérprete . Visual. instrucción por instrucción. Python. prepara otro independiente traducido a otra lengua. sino del propio intérprete (lo que se conoce comúnmente como máquina virtual). Perl. Son los lenguajes capaces de generar código por si solos.

Por ejemplo. Generalmente toma más tiempo correr un programa bajo un interpretador que correr el código compilado. pero no es código de máquina (y por lo tanto no está atado a cualquier hardware particular). a menudo un orden de magnitud y a veces más. típicamente corre más lentamente que si hubiera sido compilado. Esto es especialmente importante si se está haciendo y probando un código prototipo cuando un ciclo de editar.humano. mientras que el código compilado solo realiza la acción dentro de un determinado contexto fijo por la compilación. Este código "compilado" es entonces interpretado por un interpretador de bytecode (que está escrito en C). ejecutar y depurar del compilador. debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma. que es una representación altamente comprimida y optimizada del código fuente del Lisp. En la actualidad. sin dejar constancia por escrito. uno de los entornos más comunes de uso de los intérpretes informáticos es Internet. que traduce de viva voz las palabras que oye.  Interpretadores de bytecode Artículo principal: Bytecode. Hay un espectro de posibilidades entre la interpretación y la compilación. En este caso. La interpretación de código es más lenta que la ejecución de código compilado porque el interpretador debe analizar cada sentencia en el programa cada vez que es ejecutada y entonces realizar la acción deseada. Eficiencia La desventaja principal de los interpretadores es que cuando se interpreta un programa. pero puede tomar menos tiempo para interpretarlo que el tiempo total requerido para compilarlo y ejecutarlo. sino en el interpretador de bytecode. a menudo puede ser mucho más corto que el ciclo de editar. que no está implementada en el hardware. el Emacs Lisp es compilado a bytecode. que entonces es interpretado por una máquina virtual. La diferencia en velocidades puede ser minúscula o grande. Este análisis en tiempo de ejecución se conoce como "sobrecarga . interpretar y depurar del interpretador. El mismo acercamiento es utilizado con el código Forth usado en sistemas Open Firmware: el lenguaje fuente es compilado en "código F" (un bytecode). dependiendo de la cantidad de análisis realizados antes de que el programa sea ejecutado. compilar. el código compilado es el código de máquina para una máquina virtual.

3 gracias a las más poderosas optimizaciones permitidas al tener la estructura completa del programa. Como una ventaja sobre el bytecode. La optimización adaptativa es una técnica complementaria en la cual el interpretador hace un análisis de desempeño del programa que está corriendo (profiling) y compila sus partes más frecuentemente . una técnica en la cual la representación intermedia es compilada a código de máquina nativo en tiempo de ejecución. y proporciona una representación más compacta. Esto confiere la eficiencia de ejecutar el código nativo. permite realizar un mejor análisis durante tiempo de ejecución.2 Así. También. y después procediendo a ejecutar el programa siguiendo esta estructura arborescente. disponibles durante la ejecución. Interpretadores de árbol de sintáxis abstracta En el espectro entre la interpretación y la compilación. otro acercamiento está transformando el código fuente en un árbol de sintaxis abstracta optimizado (AST). Compilación justo a tiempo Para desdibujar más la distinción entre los interpretadores. los interpretadores de bytecode y la compilación. el acceso a las variables es también más lento porque el mapeo de identificadores hacia las localizaciones de almacenamiento debe hacerse repetidamente en tiempo de ejecución en vez de en el tiempo de compilación. Un interpretador puede bien usar el mismo analizador lexicográfico y el analizador sintáctico (parser) que el compilador y entonces interpretar el árbol de sintaxis abstracta resultante. algunos LISPs) permiten al código interpretado y al compilado llamarse el uno al otro y compartir variables.interpretativa". algunos interpretadores BASIC reemplazan palabras clave (keywords) con tokens de un simple byte que pueden ser usados para encontrar la instrucción en una tabla de saltos. el AST se ha propuesto como un mejor formato intermedio para los compiladores justo a tiempo que el bytecode. Muchos interpretadores no ejecutan el código fuente tal y como está sino que lo convierten en una forma interna más compacta. Por ejemplo.. Algunos sistemas (ej.1 En este acercamiento cada sentencia necesita ser analizada (parsed) solo una vez. Un interpretador Java basado en AST ha demostrado ser más rápido que un interpretador similar basado en bytecode. Esto significa que una vez que una rutina ha sido probada y depurada bajo el interpretador puede ser compilada y por lo tanto beneficiarse de una ejecución más rápida mientras que otras rutinas están siendo desarrolladas. el AST mantiene la estructura y las relaciones globales del programa entre las sentencias (que se pierden en una representación de bytecode). al costo de tiempo de inicio y de un uso creciente de la memoria cuando el bytecode o el AST es compilado por primera vez. Hay varios compromisos entre la velocidad de desarrollo al usar un interpretador y la velocidad de ejecución al usar un compilador. está la compilación justo a tiempo (o JIT). En un interpretador. así como tipos de datos de alto nivel.

respectivamente. Para otras acepciones. Python.NET Framework todos ahora incluyendo JITs.ejecutadas a código nativo. Ambas técnicas tienen algunas décadas. En años recientes. Interpretador de tarjeta perforada El término "interpretador" frecuentemente se refería a una pieza de equipo de registro de unidad que podía leer tarjetas perforadas e imprimir los caracteres en la tarjeta en una forma que podía ser leída por humanos. y el Microsoft . apareciendo en lenguajes tales como Smalltalk en los años 1980. Ejemplos Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados son:  Perl  PHP  Javascript  Logo  ASP (hasta la versión 3)  Python  Tcl  Ruby  J#  ASP  Compilador «Compilación» redirige aquí. con Java. la compilación justo a tiempo ha ganado la atención de la mayoría de los implementadores de lenguajes de programación. El interpretador Numérico del IBM 550 y el Interpretador Alfabético del IBM 557 son ejemplos típicos a partir de 1930 y 1954. . véase recopilación.

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación. . pero manteniendo la funcionalidad del programa original.  Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia.  Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente. 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. De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano. pero también puede ser un código intermedio (bytecode).  Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina. generando un programa equivalente que la máquina será capaz de interpretar. o simplemente texto.1 Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel. Este proceso de traducción se conoce como compilación. Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente.  Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan. a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). Usualmente el segundo lenguaje es lenguaje de máquina. para luego compilarlo a un programa más manejable por una computadora.

evitando ambigüedades (el lenguaje natural humano carece de precisión y es muy ambiguo). para que la computadora pueda procesarlo. Para entender la programación dirigida por eventos. y no en cualquier momento como puede ser en el caso de la programación dirigida por eventos. Cabe notar que los conceptos definidos en la programación orientada a objetos no son una condición sino que son para definir que un lenguaje es orientado a objetos. podemos oponerla a lo que no es: mientras en la programación secuencial (o estructurada) es el programador el que define cuál va a ser el flujo del programa. Luego. El lenguaje estructurado es una herramienta que puede utilizarse en la especificación de procesos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin embargo. El lenguaje estructurado puede utilizarse para especificar un algoritmo.POR FILOSOFIA DE PROGRAMACIÓN  Lenguaje Estructurado. Aunque en la programación secuencial puede haber intervención de un agente externo al programa. en la programación dirigida por eventos será el propio usuario —o lo que sea que esté accionando el programa— el que dirija el flujo del programa.  Lenguaje orientado a eventos La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema. El lenguaje estructurado es un lenguaje natural limitado en palabras y construcciones.  Lenguaje orientado a objetos Se le llama así a cualquier lenguaje de programación que implemente los conceptos definidos por la programación orientada a objetos. en el desarrollo de sistemas. no invalidar su definición como lenguaje orientado a objetos. definidos por el usuario o que ellos mismos provoquen. . estas intervenciones ocurrirán cuando el programador lo haya determinado. deberá transformarse o "traducirse" a un lenguaje de programación específico. lo que le da más más precisión y claridad.

también llamados Batch. el software empezó a ser demandado para usos alejados de los clásicos académicos y empresariales para los cuales era necesitado hasta entonces.El creador de un programa dirigido por eventos debe definir los eventos que manejarán su programa y las acciones que se realizarán al producirse cada uno de ellos. el programa pasará a ejecutar el código del correspondiente administrador de evento. si el evento consiste en que el usuario ha hecho click en el botón de play de un reproductor de películas. procesa estos parámetros. al comenzar la ejecución del programa se llevarán a cabo las inicializaciones y demás código inicial y a continuación el programa quedará bloqueado hasta que se produzca algún evento. . todo de manera lineal y sin intervención del usuario mientras se ejecuta. En la programación dirigida por eventos. Un programa secuencial arranca. controles. y quedó patente que el paradigma clásico de programación no podía responder a las nuevas necesidades de interacción con el usuario que surgieron a raíz de este hecho. se ejecutará el código del administrador de evento. Un ejemplo claro lo tenemos en los sistemas de programación Lexico y Visual Basic. Los eventos soportados estarán determinados por el lenguaje de programación utilizado. por el sistema operativo e incluso por eventos creados por el mismo programador. etcétera) se le asignan una serie de eventos que generará dicho elemento. que será el que haga que la película se muestre por pantalla. y produce un resultado. aunque puede emplearse también para desarrollar interfaces entre componentes de Software o módulos del núcleo. los programas eran secuenciales. formulado a través de ecuaciones lineales. Por ejemplo. Con la aparición y popularización de los PC. optimizando la función objetivo. lee parámetros de entrada. como la pulsación de un botón del ratón sobre él o el redibujado del control. La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario. también lineal. Cuando alguno de los eventos esperados por el programa tenga lugar.  Programación Lineal La Programación Lineal es un procedimiento o algoritmo matemático mediante el cual se resuelve un problema indeterminado. En los primeros tiempos de la computación. en los que a cada elemento del programa (objetos. lo que se conoce como el administrador de evento.

de tal forma que las variables de dicha función estén sujetas a una serie de restricciones que expresamos mediante un sistema de inecuaciones lineales. . denominada función objetivo.Consiste en optimizar (minimizar o maximizar) una función lineal.