Dentro de este grupo se encuentran

Anuncio
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
FACULTAD DE INGENIERÍA DE SISTEMAS COMPUTACIONALES
Departamento de Computación y Simulación de Sistemas
Licenciatura en Ingeniería en Sistemas y Computación
Investigación #1
“Lenguajes de Programación”
CURSO
Desarrollo de Software
ESTUDIANTES
Alba Muñoz
8-865-518
Amelia González
8-855-1945
Katherine Benitez
8-848-2113
Oscar Gómez
8-848-911
Héctor Pérez
8-839-2020
Anthony Vargas
8-826-1082
Giancarlo Remón
8-849-367
FACILITADORA:
Dra. Addys C. de Lam
PANAMÁ, 2010
INTRODUCCION
Todos conocemos el efecto X en las computadoras: NO PUEDEN ENTENDER POR SI SOLAS.
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje
específico conocido como código máquina. Este lenguaje es muy fácil para el
entendimiento de la computadora, pero para las personas, puede ser un extremo dolor de
cabeza. De hecho sólo consiste en cadenas extensas de números 0 y 1.
Para facilitar el trabajo, los primeros operadores de computadoras decidieron reemplazar
los 1 y 0 por palabras o letras del inglés; a esto se le llamó lenguaje ensamblador. Por
ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir
en lenguaje ensamblador es básicamente igual que hacerlo en lenguaje máquina, pero las
letras y palabras son más fáciles de recordar y entender que los números. No es obvio?
Pero vamos a darle el crédito a la primera programadora, que para sorpresa de muchos, fue
una mujer: Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo
en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió
una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la
construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo
ganarse el título de primera programadora de computadoras del mundo. El nombre del
lenguaje de programación Ada fue escogido como homenaje a esta programadora.
A medida que se hacían mas difíciles los trabajo de la computadora, se hizo necesario un
mejor método o forma de programarlas. Entonces, se crearon los lenguajes de alto nivel,
como lo fue el BASIC en las versiones introducidas en los microordenadores de la década de
1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias
instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una.
En este trabajo desarrollaremos el tema que se dio como resultado de esta interesante
historia: LOS LENGUAJES DE PROGRAMACION. Discutiremos sobre conceptos, ideas,
principales componentes y sus diferentes tipos, ya que Los lenguajes de programación se
han modificado mucho hasta ser la base computacional en el siglo XXI
OBJETIVOS DEL TRABAJO
Como estudiantes de la Ingeniería en Sistemas, es nuestro deber nutrirnos de conocimiento
referente a las computadoras, ya que lógicamente es un campo en el cual trabajaremos con
mucha frecuencia. Los objetivos de este trabajo, primordialmente, tienen que ver con
todo lo referente a los Lenguajes de Programación:
 Conocer los conceptos básicos de los lenguajes de programación.
 Entender el funcionamiento de los lenguajes de programación.
 Conocer las modificaciones y el desarrollo de los diferentes lenguajes.
Identificar los diferentes tipos de lenguajes de programación.

comparar todas las características de los diferentes tipos de lenguajes de
programación.
¿Qué son los lenguajes de programación?
Los lenguajes de programación son herramientas que nos permiten crear programas y
software. En particular se conocen como código de máquinas o lenguaje de máquinas. Es un
lenguaje artificial que puede ser usado para controlar el comportamiento de una máquina,
especialmente una computadora. Estos se componen de un conjunto de reglas sintácticas y
semánticas que permiten expresar instrucciones que luego serán interpretadas. También se
le puede llamar lenguaje de programación a una serie de comandos que nos permiten
codificar instrucciones de manera que sean entendidas y ejecutadas por una computadora.
Para que estos programas funcionen para diferentes computadoras hay que realizar una
versión para cada una de ellas, lo que implica el aumento del costo de desarrollo.
Los lenguajes de programación facilitan la tarea de programación, ya que representan en
forma simbólica y en manera de un texto los códigos que podrán ser leídos y escritas por
personas, a su vez resultan independientes del modelo de computador a utilizar.
Por otra parte, los lenguajes de programación en código de máquina son verdaderamente
difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin
sentido nemotécnico.
Tipos de Lenguajes de Programación
 Absoluto: En control numérico existen dos formas posibles de especificar, los valores
de los vocablos dimensionales. La diferencia entre estas dos, formas es la referencia
utilizada en la especificación:
Función g90.
En el caso de coordenadas especificadas en forma absoluta se utiliza la función G90. Las
coordenadas especificadas respecto de este sistema deberán ser siempre referidas al
sistema coordenado activo en ese momento. Ejemplo:
G90 GOO X30 Y60
Función g91.
En este caso, la posición a la que ha de desplazarse la herramienta de corte se programa
mediante los, vocablos expresados respecto al punto anterior definido. Ejemplo:
G91 G00 X20 Y30
Simbólico: Cada instrucción de la máquina se transforma en una única instrucción en código
simbólico. Pero además, para mejorar la legibilidad del programa, el código simbólico
introduce instrucciones adicionales, que no corresponden a ninguna instrucción de la
máquina y que proporcionan información. Se llaman "seudoinstrucciones". El código
simbólico puede parecer de difícil acceso, pero es más fácil de recordar e interpretar
binario o el hexadecimal. Para utilizarlos, hay que conocer
a fondo el microprocesador, los registros de trabajo de que dispone,
que el
la
estructura
de
la
memoria,
y
código simbólico
microprocesador para que sea
Además,
el
muchas
está
cosas
demasiado
ligado
más.
al
posible escribir programas
independientes de la máquina en que van a ejecutarse. Para ello, hubo que esperar a la
siguiente generación de lenguajes.
Bajo Nivel: depende totalmente 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 maquinas, en este caso
de la computadora u ordenador, esos solos entienden el lenguaje binario o el código
máquina, que consiste en ceros y unos. Es decir, que para realizar cualquier acción, solo
utilizan este tipo de lenguaje de programación. Los lenguajes de programación más
cercanos a la arquitectura del hardware pertenecen al tipo de lenguajes de
programación de bajo nivel. 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 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 maquina.
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.
-
El lenguaje ensamblador es un derivado del lenguaje maquina 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, añadiendo la dificultad
de tener que aprender un nuevo lenguaje difícil de probar y mantener.
 Alto Nivel: Todos aquellos lenguajes de programación que son más afines al lenguje
natural que al lenguaje
máquina. Estos lenguajes de programación son
completamente independientede de la arquitectura del hardware de la computadora
u ordenador. Por lo que en general, un programa escrito con un lenguaje de
programación de alto nivel lo podemos utilizar en cualquier otra computadora.
Estos lenguajes de programación de lato nivel solo necesitan un tractor que entienda el
código fuente y las características de la máquina para poder funcionar correctamente. Los
leguajes de programación que se encuentran más próximos a los ususarios y programadores
pertenecen al tipo de lenguajes de programación de alto nivel.
Lenguaje de programación aplicada a los diferentes campos
 Informatica aplicada al comercio
Vigilancia: es el monitoreo del comportamiento. Vigilancia por sistema es el proceso de
monitoreo de personas, objetos o procesos dentro de sistemas para la conformidad de
normas esperadas o deseadas en sistemas confiables para control de seguridad o social.
Vigilancia clínica se refiere al monitoreo de enfermedades o indicadores públicos
relacionados con la salud (por ejemplo, síntomas indicando actos de bio-terrorismo) por
epistemólogos y profesionales de la salud.
A pesar de que en francés la palabra vigilancia significa literalmente "mirar por encima", el
término es usualmente utilizado para toda forma de observación o monitoreo, no sólo la
observación visual. Sin embargo, el "ojo en el cielo" que todo lo ve, es aún el ícono de la
vigilancia. Para la vigilancia en muchas ciudades modernas y edificios se suelen emplear
circuitos cerrados de televisión. Si bien la vigilancia puede ser una herramienta útil para las
fuerzas y empresas de seguridad, mucha gente se muestra preocupada por el tema de la
pérdida de privacidad.
La palabra vigilancia es usualmente usada para describir observación desde una distancia
por medio de equipo electrónico u otros medios tecnológicos. Por ejemplo:






escuchas secretas o eavesdropping
escuchas telefónicas
micrófonos direccionales
aparatos de escucha encubiertos
microcámaras
circuitos cerrados de televisión
 Informatica aplicada a la ciencia
En la ciencia, el computador es de gran ayuda para analizar los datos, almacenar y
recuperar información, simplificar expresiones, controlar experimentos, identificar
moléculas, medir áreas de figuras especificas, llevar información estadística de procesos,
etc. Las siguientes aplicaciones son ejemplos de mucha importancia que resaltan el trabajo
de las computadoras en el ámbito científico:
La nanotecnología:
es la manipulación de materiales a una escala molecular. Muchos científicos utilizan hebras
artificiales de ADN para lograrlo. Esta tecnología no podría darse ampliamente sin el uso de
las
computadoras.
Technology Review publica que investigadores de la Universidad de Dortmund han
descubierto la forma de hacer que ADN pegue y separe nanopartículas de oro a medida. Se
podría aplicar este método a sensores que detectan sustancias y actividades biológicas en el
laboratorio y en el cuerpo humano. También se podría aplicar a materiales programables
cuyas
propiedades
se
pueden
cambiar
al
añadir
un
trozo
de
ADN.
Cirugía Virtual :
Estudiantes y profesores de biología o medicina, o simplemente curiosos a los que les
interesa seguir de cerca avances en la medicina y la enseñanza, disponen de una nueva
herramienta, gratis, para practicar la cirugía virtual sobre la rodilla de un paciente virtual.
Solo se requiere un ordenador, conexión a Internet y buenos conocimientos de inglés.
Este gran avance en la enseñanza virtual ha sido iniciativa de Edheads, cuya misión es:
".... crear experiencias educacionales únicas en Internet, diseñadas para hacer
comprensible conceptos que son difíciles de comprender, a través de la fuerza y
interactividad de Internet. Fijaremos nuevos niveles de excelencia a través de una oferta
de contenidos detallados con estilos frescos y emocionantes que permitan al usuario
aprender
de
forma
intuitiva
en
un
entorno
en
línea".
La pluma mágica de Microsoft:
El Centro de Investigación de Microsoft en Asia ha desarrollado una nueva versión de pluma
electrónica - un avance tecnológico que permite alternar entre el papel y la pantalla sin
tener
que
soltar
su
pluma.
Con esta "pluma universal", se puede escribir sobre papel, y ver simultáneamente como sus
comentarios aparecen en la pantalla de su ordenador. A diferencia de los lápices
electrónicos ya conocidos, que permiten escribir sobre la pantalla de un ordenador o sobre
papel electrónico, este nuevo invento utiliza tinta normal, escribe sobre papel normal, y
permite que sus usuarios combinen textos escritos a mano con gráficos e imágenes.
 Informatica aplicada a la educación
Desde el punto de vista educativo, la programación de computadores compromete a los
estudiantes en la consideración de varios aspectos importantes para la solución de
problemas: decidir sobre la naturaleza del problema, seleccionar una representación que
ayude a resolverlo y, monitorear sus propios pensamientos (metacognición) y estrategias de
solución. Este último aspecto debe desarrollarse desde edades tempranas. No debemos
olvidar que solucionar problemas con ayuda del computador puede convertirse en un
excelente ejercicio para adquirir la costumbre de enfrentar problemas predefinidos de
manera rigurosa y sistemática; aunque no siempre sea necesario utilizar un computador
para solucionarlos.
Dada la urgencia actual para que los estudiantes desarrollen habilidades del Siglo XXI, se
debe empezar a trabajar en el aula, con ese propósito, desde edades tempranas; y la
posibilidad de contacto directo y divertido con diferentes entornos de programación, puede
acercarlos a alcanzar dicho objetivo.
En consecuencia con estos razonamientos, en la Educación Básica Primaria es altamente
recomendable, introducir la programación de computadores mediante ambientes de
programación basados en el lenguaje Logo, fáciles de usar y que permiten realizar
procedimientos que contienen estructuras básicas (secuencial, decisión y repetición);
teniendo siempre en mente que conduzcan a desarrollar habilidades del Siglo XXI.
Posteriormente, en básica Secundaria, se podrían trabajar entornos de programación
visuales y amigables, más demandantes y retadores, como Alice. Con estos, los estudiantes
pueden realizar construcciones más complejas que los preparen para usar lenguajes
profesionales orientados a objetos.
Por ejemplo, en Colombia, se han hecho ajustes buscando la mejor forma tanto de
secuenciar los contenidos como de abordar la solución de problemas, en este caso,
trabajando con el área de Matemáticas. Resultado de esta experiencia, es la evidencia de
que cuando los estudiantes “programadores” resuelven problemas matemáticos retadores
en un ambiente como Logo, ponen a prueba la comprensión real que tienen respecto a los
conceptos matemáticos involucrados en las soluciones de los problemas. Esto implicó,
durante el desarrollo del proyecto, asegurar que los estudiantes de primaria desarrollaran
previamente competencias en comprensión lectora y en los temas básicos de matemáticas
con los que iban a trabajar.
Inicialmente, sólo se trabajó con estudiantes de grado 5° y con el entorno de programación
MicroMundos. Posteriormente, se extendió el curso de Algoritmos y Programación a grado
4° y se integró a la propuesta el entorno Scratch.
MicroMundos EX es una poderosa herramienta multimedia basada en Logo, dirigida a niños
de 6 a 12 años, que permite crear proyectos incorporando películas, fotos, sonidos,
gráficos, textos y animación. Esta herramienta, creada por la compañía canadiense LCSI, es
de pago.
Scratch es un entorno de programación gratuito desarrollado por un grupo de investigadores
del Lifelong Kindergarten Group del Laboratorio de Medios del MIT, bajo la dirección del Dr.
Mitchel Resnick. Este entorno aprovecha los avances en diseño de interfaces para hacer que
la programación sea más atractiva y accesible para todo aquel que se enfrente por primera
vez a aprender a programar. Según sus creadores, fue diseñado como medio de expresión
para ayudar a niños y jóvenes a expresar sus ideas de forma creativa, al tiempo que
desarrollan habilidades de pensamiento lógico y de aprendizaje del Siglo XXI, a medida que
sus maestros superan modelos de educación tradicional con la utilización de las TIC.
Edubuntu es una derivación oficial de la distribución Linux Ubuntu, destinada para su uso
en ambientes escolares.
Su lista de paquetes está más orientada a tal fin, incorporando el servidor de Terminal, y
aplicaciones educativas como GCompris y la KDE Edutainment Suite.[1]
Edubuntu ha sido desarrollado en colaboración con docentes y tecnólogos de múltiples
países. Edubuntu se construyó sobre Ubuntu e incorpora una arquitectura de cliente de
LTSP, así como de usos educativos específicos, con un objetivo a la población entre los 6 y
los 18 años. Al igual que Ubuntu, cuenta con un servicio ShipIt[2] para encargar CDs gratis.
 Informatica aplicada a otros campos
Programación neurolingüística
¿Qué es?
La PNL (Programación Neurolingüística) constituye un modelo, formal y dinámico de cómo
funciona la mente y la percepción humana, cómo procesa la información y la experiencia y
las diversas implicaciones que esto tiene para el éxito personal. Con base en este
conocimiento es posible identificar las estrategias internas que utilizan las personas de
éxito, aprenderlas y enseñarlas a otros (modelar); para facilitar un cambio evolutivo y
positivo. La Programación Neurolingüística, por analogía con el ordenador, utiliza los
patrones universales de comunicación y percepción que tenemos para reconocer e
intervenir en procesos diversos (aprendizaje, terapia, afrontamiento del estrés,
negociación, gestión de conflictos, superación de fobias, etc...). El campo de trabajo es tan
amplio como lo es el de las relaciones interpersonales.
Tuvo su origen en las investigaciones de Richard Bandler y John Grinder, auténticos padres
de la PNL, que trataban de averiguar por qué determinados tratamientos de tres terapeutas
en Estados Unidos ( Satir, Erickson y Perls) conseguían mayor éxito que el resto de sus
colegas.
La PNL es el estudio de lo que percibimos a través de nuestros sentidos (vista, oído, olfato,
gusto y tacto), cómo organizamos el mundo tal como lo percibimos y cómo revisamos y
filtramos el mundo exterior mediante nuestros sentidos.
Además, la PNL investiga los procesos que hacen que transmitamos nuestra representación
del mundo a través del lenguaje. Es por tanto una aplicación práctica que nos permite,
mediante técnicas y herramientas precisas, reconocer y desarrollar habilidades para el
crecimiento personal y la mejora de las relaciones interpersonales. Pero sobre todo, nos
permite conocer de manera objetiva la percepción de los demás y la de nosotros mismos. Es
como si tuvieramos incorporado una "Máquina de la verdad" que podemos manejar de
manera infalible en un 99% de los casos.
¿Para qué?
La PNL se puede utilizar para desarrollar de manera rápida y eficaz un proceso de
aprendizaje y así superar una situación de estrés, de conflicto, negociar con mayor ventaja
frente a nuestros adversarios, etc.
En realidad nos permite conocer la percepción de las otras personas a quienes tenemos
enfrente o a nosotros mismos. Es un complemento en el desarrollo de la Inteligencia
emocional. Entre otras cosas, la PNL






Aumenta de manera notable y rápida la autoconfianza.
Mejora las relaciones interpersonales.
Desarrolla el crecimiento personal y profesional hacia el éxito.
Nos permite convertirnos en quien deseamos y queremos ser.
Sirve para reducir el estrés.
Negociar y solucionar confllictos de manera positiva.
¿Quiénes?
Comenzó a utilizarse por pedagogos y psicólogos, los primeros para mejorar los procesos
enseñanza-aprendizaje, los segundos como una forma de terapia eficaz y rápida. De este
modo, la PNL se extendió al ámbito empresarial y al autodesarrollo de la mano de
directivos y otros profesionales.
Así, profesionales de otras disciplinas (economía, recusos humanos, comunicación...) la
utilizan como herramienta eficaz y de demostrada utilidad en entrevistas personales,
comunicación, negociación, etc. La ventaja principal es la capacidad que tenemos para
reprogramarnos y superar o afrontar situaciones que en otras condiciones no podríamos: esa
es la gran ventaja de la PNL. Otra de las posibilidades hay que buscarlas en la capacidad de
automotivación.
No es fácil encerrar tanto potencial de la PNL, pues en realidad abarca todos los campos
humanos. A modo de guía exponemos los ámbitos de aplicación más usuales:

Salud: En aquellas patologías relacionadas con el estrés, en las somatatizaciones,
alergias, como coadyuvante de terapia tradicional, disfunciones en las que se
requiera de un especial autocontrol.

Psicoterapia: Son más que conocidas sus técnicas para la cura de fobias, estrés
postraumático, conflictos internos, desórdenes de personalidad, esquizofrenia,
depresión, compulsiones, control emocional, desórdenes sexuales y manejo de
adicciones a sustancias.

Deportes: Por un lado para deportista, donde permite mejorar el rendimiento
deportivo de manera espectacular. También en escuela deportiva para el
aprendizaje de diversos deportes como tenis, golf, tiro, ciclismo y atletismo; entre
otros.

Empresas: Es el más reciente de los ámbitos de aplicación y el más llamativo. Qué
duda cabe de las aportaciones en trabajo en equipo, solución de conflictos,
administración de personal, liderazgo, motivación, comunicación, creatividad,
planificación estratégica, toma de decisiones, adaptación al cambio, selección de
personas, evaluación de desempeño y ventas, entre muchos otros.

Desarrollo y mejora personal: Es este otro de los campos donde la PNL se mueve
con soltura, así en ámbitos específicos como autoestima, asertividad, relaciones de
pareja, relaciones interpersonales, conflictos, manejo de crisis personales y
orientación hacia el éxito, son sólo una muestra de las posibilidades de aplicación.

Educación: Hay varias áreas dentro de la educación: por un lado en la relación
enseñanza-aprendizaje en un contexto práctico y dirigido a resultados y a solucionar
problemas de aprendizaje, aumento de la creatividad, aprendizaje de las
matemáticas, aprendizaje de la física y la química, etc.. Por otro lado en la mejora
de las relaciones en el aula: solución de conflictos en el aula y mejora de la eficacia
docente; entre otros.
Traductores
 Compiladores
Es un programa que traduce un lenguaje de alto nivel al lenguaje máquina. Un programa
compilado indica que ha sido traducido y está listo para ser ejecutado. La ejecución de los
programas compilados es más rápida que la de los interpretados, ya que el interprete debe
traducir mientras está en la fase de ejecución (saca todos los errores). Un compilador es un
programa que traduce el programa fuente (conjunto de instrucciones de un lenguaje de
alto nivel, por ejemplo Basic o Pascal) a programa objeto (instrucciones en lenguaje
máquina que la computadora puede interpretar y ejecutar).
Se requiere un compilador para cada lenguaje de programación. Un compilador efectúa la
traducción, no ejecuta el programa. Una vez compilado el programa, el resultado en forma
de programa objeto será directamente ejecutable. Presentan la ventaja considerable
frente a los intérpretes de la velocidad de ejecución, por lo que su uso será mejor en
aquellos programas probados en los que no se esperan cambios y que deban ejecutarse
muchas veces. En caso de que se opte por un interpretador se debe considerar que el
intérprete resida siempre en memoria.
Partes de un compilador
La construcción de un compilador involucra la división del proceso en una serie de fases que
variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis
del programa fuente y la síntesis del programa objeto.


Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye
las fases correspondientes al Análisis Léxico (que consiste en la descomposición del
programa fuente en componentes léxicos), Análisis Sintáctico (agrupación de los
componentes léxicos en frases gramaticales ) y Análisis Semántico (comprobación de la
validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y
suele estar formado por una o varias combinaciones de fases de Generación de
Código (normalmente se trata de código intermedio o de código objeto) y de
Optimización de Código (en las que se busca obtener un código lo más eficiente
posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar
en Front-end y Back-end:


Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el
árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser
independiente de la plataforma o sistema para el cual se vaya a compilar, y está
compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de
Código Intermedio.
Back-end: es la parte que genera el código máquina, específico de una plataforma, a
partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de
varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar
el código fuente de un lenguaje de programación concreto sirva para generar código
máquina en varias plataformas distintas. Suele incluir la generación y optimización del
código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino
que necesita ser enlazado por un programa enlazador (linker)
Tipos de compiladores
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.
Proceso de compilación
Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje
de programación a lenguaje máquina. Además de un traductor, se pueden necesitar otros
programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir
en módulos almacenados en archivos distintos. La tarea de reunir el programa fuente a
menudo se confía a un programa distinto, llamado preprocesador. El preprocesador también
puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows
o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y
traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo
a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje
máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel
generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el
código de las funciones que hay en las bibliotecas del compilador para que el ejecutable
pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el
código objeto a código máquina, y generando un módulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de
compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix);
para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase
de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas
en varios lenguajes (por ejemplo C, C++ y Asm), que se podrían compilar de forma
independiente y luego enlazar juntas para formar un único módulo ejecutable.
Etapas del proceso
El proceso de traducción se compone internamente de varias etapas o fases, que realizan
distintas operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro
del traductor, y pueden en realidad escribirse como operaciones codificadas
separadamente aunque en la práctica a menudo se integren juntas.
Fase de análisis
Análisis léxico
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a
derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres
que tienen un significado. Además, todos los espacios en blanco, líneas en blanco,
comentarios y demás información innecesaria se elimina del programa fuente. También se
comprueba que los símbolos del lenguaje (palabras clave, operadores,...) se han escrito
correctamente.
Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de
patrones, se necesitan los métodos de especificación y reconocimiento de patrones, y éstos
métodos son principalmente las expresiones regulares y los autómatas finitos. Sin embargo,
un analizador léxico también es la parte del traductor que maneja la entrada del código
fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el
analizador léxico debe funcionar de manera tan eficiente como sea posible.
Análisis sintáctico
En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases
gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido
de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por
lo general, las frases gramaticales del programa fuente se representan mediante un árbol
de análisis sintáctico.
La estructura jerárquica de un programa normalmente se expresa utilizando reglas
recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definición de
expresiones:
1. Cualquier identificador es una expresión.
2. Cualquier número es una expresión.
3. Si expresión1 y expresión2 son expresiones, entonces también lo son:
o expresión1 + expresión2
o expresión1 * expresión2
o ( expresión1 )
Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define
expresiones en función de operadores aplicados a otras expresiones.
La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para
determinar la división es si una construcción del lenguaje fuente es inherentemente
recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las
construcciones sintácticas suelen requerirla. No se requiere recursión para reconocer los
identificadores, que suelen ser cadenas de letras y dígitos que comienzan con una letra.
Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada,
esperando hasta encontrar un carácter que no sea ni letra ni dígito, y agrupando después
todas las letras y dígitos encontrados hasta ese punto en un componente léxico llamado
identificador. Por otra parte, esta clase de análisis no es suficientemente poderoso para
analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera
apropiada los paréntesis de las expresiones, o las palabras begin y end en proposiciones sin
imponer alguna clase de estructura jerárquica o de anidamiento a la entrada.
Análisis semántico
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores
semánticos y reúne la información sobre los tipos para la fase posterior de generación de
código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis
sintáctico para identificar los operadores y operandos de expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el
compilador verifica si cada operador tiene operandos permitidos por la especificación del
lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación
requieren que el compilador indique un error cada vez que se use un número real como
índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer
restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica
a un número entero y a un número real. Revisa que los arreglos tengan definido el tamaño
correcto.
Fase de síntesis
Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código
objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir
que el programa se ejecute correctamente, ya que un programa puede tener errores de
concepto o expresiones mal calculadas. Por lo general el código objeto es código de
máquina relocalizable o código ensamblador. Las posiciones de memoria se seleccionan
para cada una de las variables usadas por el programa. Después, cada una de las
instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que
ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a registros.
Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una
representación intermedia explícita del programa fuente. Se puede considerar esta
representación intermedia como un programa 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.
La representación intermedia puede tener diversas formas. Existe una forma intermedia
llamada "código de tres direcciones" que es como el lenguaje ensamblador de una máquina
en la que cada posición de memoria puede actuar como un registro. El código de tres
direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como
máximo tres operandos. Esta representación intermedia tiene varias propiedades:



Primera.- Cada instrucción de tres direcciones tiene a lo sumo un operador, además
de la asignación, por tanto, cuando se generan estas instrucciones, el traductor tiene
que decidir el orden en que deben efectuarse las operaciones.
Segunda.- El traductor debe generar un nombre temporal para guardar los valores
calculados por cada instrucción.
Tercera.- Algunas instrucciones de "tres direcciones" tienen menos de tres
operandos, por ejemplo, la asignación.
Optimización de código
La fase de optimización de código consiste en mejorar el código intermedio, de modo que
resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es
posible sobre todo si el traductor es un compilador (difícilmente un interprete puede
optimizar el código objeto). Hay mucha variación en la cantidad de optimización de código
que ejecutan los distintos compiladores. En los que hacen mucha optimización, llamados
"compiladores optimizadores", una parte significativa del tiempo del compilador se ocupa
en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el
tiempo de ejecución del programa objeto sin retardar demasiado la compilación.
Estructura de datos principales
La interacción entre los algoritmos utilizados por las fases del compilador y las estructuras
de datos que soportan estas fases es, naturalmente, muy fuerte. El escritor del compilador
se esfuerza por implementar estos algoritmos de una manera tan eficaz como sea posible,
sin aumentar demasiado la complejidad. De manera ideal, un compilador debería poder
compilar un programa en un tiempo proporcional al tamaño del mismo.
Componentes léxicos o tokens
Cuando un analizador léxico reúne los caracteres en un token, generalmente representa el
token de manera simbólica, es decir, como un valor de un tipo de datos enumerado que
representa el conjunto de tokens del lenguaje fuente. En ocasiones también es necesario
mantener la cadena de caracteres misma u otra información derivada de ella, tal como el
nombre asociado con un token identificador o el valor de un token de número.
En la mayoría de los lenguajes el analizador léxico sólo necesita generar un token a la vez.
En este caso se puede utilizar una variable global simple para mantener la información del
token. En otros casos (cuyo ejemplo más notable es FORTRAN), puede ser necesario un
arreglo (o vector) de tokens.
Árbol sintáctico
Si el analizador sintáctico genera un árbol sintáctico, por lo regular se construye como una
estructura estándar basada en un puntero que se asigna de manera dinámica a medida que
se efectúa el análisis sintáctico. El árbol entero puede entonces conservarse como una
variable simple que apunta al nodo raíz. Cada nodo en la estructura es un registro cuyos
campos representan la información recolectada tanto por el analizador sintáctico como,
posteriormente, por el analizador semántico. Por ejemplo, el tipo de datos de una
expresión puede conservarse como un campo en el nodo del árbol sintáctico para la
expresión.
En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinámica, o se
almacenan en otras estructuras de datos, tales como la tabla de símbolos, que permiten
una asignación y desasignación selectivas. En realidad, cada nodo del árbol sintáctico por sí
mismo puede requerir de atributos diferentes para ser almacenado, de acuerdo con la clase
de estructura del lenguaje que represente. En este caso, cada nodo en el árbol sintáctico
puede estar representado por un registro variable, con cada clase de nodo conteniendo
solamente la información necesaria para ese caso.
Tabla de símbolos
Esta estructura de datos mantiene la información asociada con los identificadores:
funciones, variables, constantes y tipos de datos. La tabla de símbolos interactúa con casi
todas las fases del compilador: el analizador léxico, el analizador sintáctico o el analizador
semántico pueden introducir identificadores dentro de la tabla; el analizador semántico
agregará tipos de datos y otra información; y las fases de optimización y generación de
código utilizarán la información proporcionada por la tabla de símbolos para efectuar
selecciones apropiadas de código objeto.
Puesto que la tabla de símbolos tendrá solicitudes de acceso con tanta frecuencia, las
operaciones de inserción, eliminación y acceso necesitan ser eficientes, preferiblemente
operaciones de tiempo constante. Una estructura de datos estándar para este propósito es
la tabla de dispersión o de cálculo de dirección, aunque también se pueden utilizar diversas
estructuras de árbol. En ocasiones se utilizan varias tablas y se mantienen en una lista o
pila.
Tabla de literales
La búsqueda y la inserción rápida son esenciales también para la tabla de literales, la cual
almacena constantes y cadenas utilizadas en el programa. Sin embargo, una tabla de
literales necesita impedir las eliminaciones porque sus datos se aplican globalmente al
programa y una constante o cadena aparecerá sólo una vez en esta tabla. La tabla de
literales es importante en la reducción del tamaño de un programa en la memoria al
permitir la reutilización de constantes y cadenas. También es necesaria para que el
generador de código construya direcciones simbólicas para las literales y para introducir
definiciones de datos en el archivo de código objeto.
Código intermedio
De acuerdo con la clase de código intermedio (por ejemplo, código de tres direcciones o
código P) y de las clases de optimizaciones realizadas, este código puede conservarse como
un arreglo de cadenas de texto, un archivo de texto temporal o bien una lista de
estructuras ligadas. En los compiladores que realizan optimizaciones complejas debe
ponerse particular atención a la selección de representaciones que permitan una fácil
reorganización.
Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una
representación intermedia explícita del programa fuente. Se puede considerar esta
representación intermedia como un programa 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. La representación intermedia puede tener
diversas formas. Existe una forma intermedia llamada "código de tres direcciones", que es
como el lenguaje ensamblador para una máquina en la que cada posición de memoria
puede actuar como un registro. El código de tres direcciones consiste en una secuencia de
instrucciones, cada una de las cuales tiene como máximo tres operandos. El programa
fuente de (1) puede aparecer en código de tres direcciones como
temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3 Esta
representación intermedia tiene varias propiedades. Primera, cada instrucción de tres
direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se
generan esas instrucciones el compilador tiene que decidir el orden en que deben
efectuarse, las operaciones; la multiplicación precede a la adición al programa fuente de.
Segunda, el compilador debe generar un nombre temporal para guardar los valores
calculados por cada instrucción. Tercera, algunas instrucciones de "tres direcciones" tienen
menos de tres operadores, por ejemplo la primera y la última instrucciones de.
Optimación de Código
La fase de optimación de código trata de mejorar el código intermedio de modo que resulte
un código de máquina más rápido de ejecutar. Algunas optimaciones son triviales. Por
ejemplo, un algoritmo natural genera el código intermedio (2) utilizando una instrucción
para cada operador de la representación del árbol después del análisis semántico, aunque
hay una forma mejor de realizar los mismos cálculos usando las dos instrucciones
Temp1 := id3 * 60.0 (3) Id1 := id2 + temp1
Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar
en la fase de optimación de código. Esto es, el compilador puede deducir que la conversión
de 60 de entero a real se puede hacer de una vez por todas en el momento de la
compilación, de modo que la operación entreal se puede eliminar. Además, temp3 se usa
sólo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por
temp3, a partir de lo cual la última proposición de (2) no se necesita y se obtiene el código
de (3).
Hay muchas variaciones en la cantidad de optimación de código que ejecutan los distintos
compiladores. En lo que hacen mucha optimación llamados "compiladores optimadores",
una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo hay
optimaciones sencillas que mejoran significativamente del tiempo del compilador se ocupa
en esta fase. Sin embargo, hay optimaciones sencillas que mejoran sensiblemente el tiempo
de ejecución del programa objeto sin retardar demasiado la compilación.
Archivos temporales
Al principio las computadoras no tenían la suficiente memoria para guardar un programa
completo durante la compilación. Este problema se resolvió mediante el uso de archivos
temporales para mantener los productos de los pasos intermedios durante la traducción o
bien al compilar "al vuelo", es decir, manteniendo sólo la información suficiente de las
partes anteriores del programa fuente que permita proceder a la traducción.
 Intérpretes
En ciencias de la computación, intérprete o interpretador es un programa informático
capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. 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, los
primeros (los intérpretes) sólo realizan la traducción a medida que sea necesaria,
típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha
traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en
sistemas sumamente diferentes (ejm. una PC y un PlayStation 3). Usando un compilador, un
solo archivo fuente puede producir resultados iguales solo si es compilado a distintos
ejecutables específicos a cada sistema.
Desventajas:
La desventaja principal de los interpretadores es que cuando se interpreta un programa,
típicamente corre más lentamente que si hubiera sido compilado. La diferencia en
velocidades puede ser minúscula o grande; a menudo un orden de magnitud y a veces más.
Generalmente toma más tiempo correr un programa bajo un interpretador que correr el
código compilado, pero puede tomar menos tiempo para interpretarlo que el tiempo total
requerido para compilarlo y ejecutarlo. Esto es especialmente importante si se está
haciendo y probando un código prototipo cuando un ciclo de editar, interpretar y depurar
del interpretador, a menudo puede ser mucho más corto que el ciclo de editar, compilar,
ejecutar y depurar del compilador.
Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados
son:










Perl
PHP
Java
JavaScript
Logo
ASP (hasta la versión 3)
Python
C#
J#
ASP
 Editores de texto
Es un programa que permite crear y modificar archivos digitales compuestos únicamente
por texto sin formato, conocidos comúnmente como archivos de texto o texto plano. El
programa lee el archivo e interpreta los bytes leídos según el código de caracteres que usa
el editor. Hoy en día es comúnmente de 7- ó 8-bits en ASCII o UTF-8, rara vez EBCDIC.
Por ejemplo, un editor ASCII de 8 bits que lee el número binario 0110 0001 (decimal 97 ó
hexadecimal 61) en el archivo lo representará en la pantalla por la figura a, que el usuario
reconoce como la letra "a" y ofrecerá al usuario las funciones necesarias para cambiar el
número binario en el archivo.
Los editores de texto son incluidos en el sistema operativo o en algún paquete de software
instalado y se usan cuando se deben crear o modificar archivos de texto como archivos de
configuración, scripts o el código fuente de algún programa.
El archivo creado por un editor de texto incluye por convención en DOS y Microsoft Windows
la extensión .txt, aunque pueda ser cambiada a cualquier otra con posterioridad. Tanto
Unix como Linux dan al usuario total libertad en la denominación de sus archivos.
Al trasladar archivos de texto de un sistema operativo a otro se debe considerar que existen
al menos dos convenciones diferentes para señalar el término de una línea: Unix y Linux
usan sólo retorno de carro en cambio Microsoft Windows usa al término de cada línea
retorno de carro y salto de línea.
Los editores de textos "planos" se distinguen de los procesadores de textos en que se usan
para escribir sólo texto, sin formato y sin imágenes, es decir sin diagramación.
Antes que existieran los editores de texto, los datos y el código fuente de los programas
debía ser entregado a la máquina por medio de tarjetas perforadas. El programa, un fajo de
tarjetas, era leído por un lector de tarjetas perforadas. Cada carácter era representado por
una o más perforaciones en una columna de 8 o 10 posibles perforaciones. No más de 80
caracteres podían ser representados en una tarjeta.
Con los Teletipos aparecieron también los primeros editores de texto que en un comienzo
solo mostraban una línea del texto. Mandatos especiales movían el "cursor" en la cuatro
direcciones.
El siguiente paso se dio con la aparición del monitor de tubo de rayos catódicos que permitió
la edición a "pantalla completa" es decir mostrando varias líneas a la vez. El aumento de
productividad fue enorme, por la rapidez y simplicidad del mecanismo. Uno de los primeros
editores de texto fue el O26 escrito para la consola del operador de la serie de
computadores CDC 6000 a mediados de la década de los 1960'. Otro precursor es el vi,
escrito en los 1970' que aún es el estándar para los sistemas operativos Unix y Linux.
Tipos de editores de texto
Hay una gran variedad de editores de texto. Algunos son de uso general, mientras que otros
están diseñados para escribir o programar en un lenguaje. Algunos son muy sencillos,
mientras que otros tienen implementadas gran cantidad de funciones.
El editor de texto debe ser considerado como una herramienta de trabajo del programador
o administrador de la máquina. Como herramienta permite realizar ciertos trabajos, pero
también requiere de aprendizaje para que el usuario conozca y obtenga destreza en su uso.
La llamada curva de aprendizaje es una representación de la destreza adquirida a lo largo
del tiempo de aprendizaje. Un editor puede ofrecer muchas funciones, pero si su curva de
aprendizaje es muy larga, puede desanimar el aprendizaje y terminará siendo dejado de
lado. Puede que un editor tenga una curva de aprendizaje muy empinada y corta, pero si no
ofrece muchas funciones el usuario le reemplazará por otro más productivo. Es decir la
elección del editor más apropiado depende de varios factores, alguno de ellos muy
subjetivos. Esta coyuntura de intereses ha dado lugar a largas discusiones sobre la
respuesta a la pregunta "¿cual es el mejor editor de texto?". Hoy en día muchos editores
originalmente salidos de Unix o Linux han sido portados a otros sistemas operativos, lo que
permite trabajar en otros sistemas sin tener que aprender el uso de otro editor.
Algunos editores son sencillos mientras que otros ofrecen una amplia gama de funciones.
Editores para profesionales deben ser capaces de leer archivos de gran extensión, mayor
que la capacidad e la memoria RAM de la máquina y también arrancar rápidamente, ya que
el tiempo de espera disminuye la concentración y disminuye de por si la productividad.los
editore sde texto sirven para muchas cosas pues facilita el trabajo
Algunos editores de texto incluyen el uso de lenguajes de programación para automatizar
engorrosos o repetidos procedimientos a realizar en el texto. Por ejemplo, Emacs puede ser
adaptado a las necesidades del usuario, incluso las combinaciones de teclas para ejecutar
funciones pueden ser adaptadas y es programable en Lisp.
Muchos editores de texto incluyen coloreado de sintaxis y funciones que ofrecen al usuario
completar una palabra iniciada usando para ello la configuración.
 Enlazadores
Es un programa que toma los ficheros de código objeto generado en los primeros pasos del
proceso de compilación, la información de todos los recursos necesarios (biblioteca), quita
aquellos recursos que no necesita, y enlaza el código objeto con su(s) biblioteca(s) con lo
que finalmente produce un fichero ejecutable o una biblioteca. En el caso de los programas
enlazados dinámicamente, el enlace entre el programa ejecutable y las bibliotecas se
realiza en tiempo de carga o ejecución del programa.
Los primeros conceptos de programación similares a las bibliotecas intentaban separar las
definiciones de datos de la implementación del programa. El concepto COMPOOL
(Communication Pool) fue popularizado por JOVIAL en 1959, aunque tomó la idea prestada
del software de los grandes sistemas SAGE. Siguiendo los principios de las ciencias de la
computación de "separación de problemas" (aislar problemas pequeños fáciles de abordar) y
"ocultación de información", "el propósito del COMPOOL es permitir el intercambio de datos
del sistema entre varios programas, proporcionando una descripción centralizada de los
mismos" (Wexelblat 1981:369).
COBOL incluyó un "primitivo sistema de bibliotecas" en el año 1959 (Wexelblat 1981:274),
pero Jean Sammet las describió retrospectivamente como "recursos insuficientes de
biblioteca" (Wexelblat 1981:258).
Otra de las grandes contribuciones al concepto moderno de biblioteca fue la innovación de
subprograma de FORTRAN. Éstos pueden ser compilados con independencia unos de otros,
pero el compilador carece de un enlazador, por lo que el chequeo de tipos entre los
subprogramas resulta imposible (Wilson et. Al. 1988:126).
Por último, se debe hablar de la influencia que Simula 67 tuvo en el concepto de
'biblioteca'. Simula es el primer lenguaje de programación orientado a objetos, y sus clases
son casi idénticas que el concepto actual que se utiliza en Java, C++ y C#. El concepto de
clase de Simula fue también el origen del "paquete" en Ada y el "módulo" de Modula-2
(Wilson et. Al. 1988:52). A pesar de haber sido desarrollado en 1965, las clases de Simula
podían ser incluidas en ficheros de biblioteca y añadidas en tiempo de compilación
(Wexelblat 1981:716).
Tipos de lenguajes según su estilo de programación
 Imperativos
En ciencias de la computación se llama lenguajes imperativos a aquellos en los cuales se le
ordena a la computadora cómo realizar una tarea siguiendo una serie de pasos o
instrucciones. Los lenguajes imperativos se basan en comandos u órdenes que se le dan a la
computadora para que haga algo, con el fin de organizar o cambiar valores en ciertas
partes de la memoria. La ejecución de estos comandos se realiza, en la mayor parte de
ellos, secuencialmente, es decir, hasta que un comando no ha sido ejecutado no se lee el
siguiente.
La implementación de hardware de la mayoría de computadores es imperativa;
prácticamente todo el hardware de los computadores está diseñado para ejecutar código de
máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que
el hardware de los computadores implementa el paradigma de las Máquinas de Turing.
Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los
contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina
nativo del computador (por ejemplo: el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún
siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no
ser programas de computadora, son también conceptos familiares similares en estilo a la
programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado
(Zoom).
Lenguajes imperativos procedurales
En los lenguajes tradicionales o procedurales, es la aplicación quien controla qué porciones
de código se ejecuta, y la secuencia en que este se ejecuta. La ejecución de la aplicación
se inicia con la primera línea de código, y sigue una ruta predefinida a través de la
aplicación, llamando procedimientos según sea necesario.
Los lenguajes procedurales están fundamentados en la utilización de variables para
almacenar valores y en la realización de operaciones con los datos almacenados. Algunos
ejemplos son: FORTRAN, PASCAL, C, ADA, ALGOL,…
Algunos lenguajes de programación imperativos que se pueden mencionar son:
BASIC
C
C++
Java
C#
 Declarativos










PHP
Perl
ASP
Fortran
Pascal
Se les conoce como lenguajes declarativos en ciencias computacionales a aquellos
lenguajes de programación en los cuales se le indica a la computadora qué es lo que se
desea obtener o qué es lo que se esta buscando.
Características de los lenguajes de programación declarativos:







Los lenguajes declarativos están orientados a buscar la solución del problema, sin
preocuparse por la forma de llegar a ello.
Los programas están formados por un conjunto de definiciones o ecuaciones, las cuales
describen lo que debe ser calculado, no en sí la forma de hacerlo.
Las variables sólo pueden tener asignado un solo valor a lo largo de la ejecución del
programa, lo cual implica que no puede existir asignación destructiva. Debido a esto,
cobra especial importancia el uso del anidamiento y la recursividad.
Las listas representan la estructura fundamental de datos.
El orden de la ejecución no resulta importante debido a que no existen efectos
colaterales; es decir, que al calcular un valor, resulta imposible afectar el cálculo de
otros y con esto se puede afirmar que cualquier secuencia de ejecución deberá
conducir al mismo resultado.
Las expresiones o definiciones pueden ser usadas como valores y por lo tanto se
pueden tratar como argumentos de otras definiciones.
El control de la ejecución no es responsabilidad del programador.
Desventaja:
La principal desventaja de la programación declarativa es que no puede resolver cualquier
problema dado, sino que está restringida al subconjunto de problemas para los que el
intérprete o compilador fue diseñado.
Ventajas:
Entre las ventajas se destaca que la solución de un problema se puede realizar con un nivel
de abstracción considerablemente alto, sin entrar en detalles de implementación
irrelevantes, lo que hace a las soluciones más fácil de entender por las personas. La
resolución de problemas complejos es resuelta por el intérprete a partir de la declaración
de las condiciones dadas.
Algunos



lenguajes
PROLOG
SQL
HTML
declarativos
que
se
pueden
mencionar
son:
WSDL (Web Services Description
Language)

XML Stylesheet Language for
Transformation

CUADRO RESUMEN
 Cuadros comparativos
LENGUAJES DE PROGRAMACIÓN
Tipos de lenguajes
Absoluto
Simbólico
Bajo nivel
Alto nivel
En
control
numérico existen
dos
formas
posibles
de
especificar,
los
valores
de
los
vocablos
dimensionales,
con
estas
dos
funciones: G90 y
la G91.
- Cada instrucción de
la
máquina
se
transforma en una
única instrucción en
código simbólico.
Introduce
instrucciones
adicionales
y
procesan
información.
- Está demasiado
ligado
al
microprocesador.
-Depende totalmente
de la máquina.
-Solo entienden el
lenguaje binario o el
código máquina.
-Dentro de este grupo
se
encuentra
el
lenguaje máquina y el
lenguaje ensamblador.
-Son más afines al
lenguje natural que
al
lenguaje
máquina.
-Son completamente
independientede de
la arquitectura del
hardware
de
la
computadora.
-Solo necesitan un
tractor que entienda
el código fuente y
las
características
de la máquina para
poder
funcionar
correctamente.
Traductores
Compiladores
Interpretes
Enlazadores
Editores
-Traduce
un
lenguaje
de
alto nivel al
lenguaje
máquina.
-Su ejecución
es más rapido
que la de los
in terpretados.
-Efectúa
la
traducción, no
ejecuta
el
programa.
-Analiza y ejecuta
otros
programas,
escritos en lenguaje
de alto nivel.
-Realizan
la
traducción a medida
que sea necesaria,
típicamente,
instrucción
por
instrucción,
y
normalmente
no
guardan el resultado
de dicha traducción.
-En éstos, un solo
archivo fuente puede
producir resultados
iguales incluso en
sistemas sumamente
diferentes.
-Toma los ficheros de
código objeto generado
en los primeros pasos
del
proceso
de
compilación.
-Quita
aquellos
recursos
que
no
necesita, y enlaza el
código objeto con
su(s) biblioteca(s) con
lo que finalmente
produce un fichero
ejecutable.
-El enlace entre el
programa ejecutable y
las
bibliotecas
se
realiza en tiempo de
carga o ejecución del
programa.
-Es un programa que
permite
crear
y
modificar
archivos
digitales
compuestos
únicamente por texto
sin formato.
-El programa lee el
archivo e interpreta los
bytes leídos según el
código de caracteres que
usa el editor.
-Son incluidos en el
sistema operativo o en
algún
paquete
de
software instalado y se
usan cuando se deben
crear
o
modificar
archivos de texto como
archivos
de
configuración, scripts o
el código fuente de algún
programa.
Estilos de programación
Imperativos
-Se basan en comandos u órdenes que se
le dan a la computadora para que haga
algo.
-La ejecución de estos comandos se
realiza, en la mayor parte de ellos,
secuencialmente.
-Se encuentran los lenguajes imperativos
procedurales la cual es la aplicación que
controla qué porciones de código se
ejecuta, y la secuencia en que este se
ejecuta.
Declarativos
-Desventaja:
La principal desventaja de la
programación declarativa es que no
puede resolver cualquier problema
dado, sino que está restringida al
subconjunto de problemas para los
que el intérprete o compilador fue
diseñado.
-Ventajas:
Entre las ventajas se destaca que la
solución de un problema se puede
realizar con un nivel de abstracción
considerablemente alto, sin entrar en
detalles
de
implementación
irrelevantes, lo que hace a las
soluciones más fácil de entender por
las personas. La resolución de
problemas complejos es resuelta por
el intérprete a partir de la declaración
de las condiciones dadas.
MAPA CONCEPTUAL
Abosoluto
LOS LENGUAJES DE
PROGRAMACIÓN
Tiene cuatro tipos:
Bajo nivel
Son:
Simbólico
Alto nivel
Herramientas que nos
permiten crear
programas y software.
Se pueden aplicar a diferentes campos como:
Los cuales podemos utlizar y
leer con lo que llamamos:
Científico
Eductivo
Comercial
Traductores
Tienen dos diferentes estilos para
programarse:
Como por ejemplo los:
Compiladores
Enlazadores
Editores
Interpretes
Interpretativamente
Declarativamente
CONCLUSION
Entre los objetivos de la informatica, se encuentra, el diseño e implementación de
maquinas, como computadoras u ordenadores, diseño e implementación de nuevas
funciones o metodos de trabajo a seguir, el diseño e implementación de aplicaciones o
sistemas de informatica y /o el mantenimiento de sistemas informaticos en
funcionamiento.
Hoy en dia la informatica es aplicada en el entorno de las actividades de cada personas,
tales como: Medicina, contruccion, industria, controles de proceso, investigaciones
cientifica, gestion empresarial, etc.
La informatica se aplica para aumentar la productividad en cada area de las anteriormente
señaladas, ya que permite un procesamiento de datos rapido y eficaz, por lo que tambien
representa como ventaja una reduccion de costes.
Por lo tanto, los lenguajes de programación han tomado mucha importancia dentro de lo
que es el mundo de la informática. Esto se debe a pueden usarse para crear programas que
controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con
precisión, o como modo de comunicación humana.
Como hemos aprendido, la programación tiene inumerables campos en los cuales aplicar. Y
uno de los campos más relevantes es la ciencia. En éste campo la infomática, ha sabido
como abrirse paso entre los deferentes obstáculos que se le presentan a la raza humana.
Por lo tanto, la ciencia, ha contribuido enormemente al ser humano.
WEB-BLIOGRAFÍA
http://www.lenguajes-de-programacion.com/lenguajes-de-programacion.shtml
http://www.alegsa.com.ar/Dic/lenguaje%20de%20programacion.php
http://www.torrealday.com.ar/articulos/articulo006.htm
http://www.larevistainformatica.com/tipo-lenguaje-programacion.htm
http://www.desarrolloweb.com/articulos/2358.php
http://www.capitalemocional.com/PNL/pnl.htm
http://www.monografias.com/trabajos38/tipos-lenguajes-programacion/tipos-lenguajesprogramacion2.shtml
http://www.mitecnologico.com/Main/LenguajesInterpretes
http://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica)
http://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa
http://es.wikipedia.org/wiki/Enlazador
Descargar