Title | Lenguajes de programación - linea de tiempo 2021 |
---|---|
Course | Paradigmas de Programacion |
Institution | Universidad Nacional de La Rioja |
Pages | 14 |
File Size | 516.1 KB |
File Type | |
Total Downloads | 34 |
Total Views | 127 |
Lenguajes de programación
Son lenguajes formales artificiales, destinados a permitir la comunicación hombrecomputadora.
Tal comunicación es expresada a través de sentencias y/o declaraciones que
constituyen el programa, que debe ser traducido a lenguaje máquina para poder ser ejecu...
Lenguajes de programación Son lenguajes formales artificiales, destinados a permitir la comunicación hombrecomputadora. Tal comunicación es expresada a través de sentencias y/o declaraciones que constituyen el programa, que debe ser traducido a lenguaje máquina para poder ser ejecutadas por una computadora.
Clasificación de los lenguajes según su nivel El nivel de un lenguaje de programación indica su proximidad al hardware o bien su grado de abstracción. A los lenguajes se los puede clasificar en: Bajo nivel: es aquel que proporciona poco o ningún nivel de abstracción del microprocesador
de una computadora, en consecuencia es fácilmente trasladable al lenguaje de máquina. La palabra “bajo” se refiere a la reducida abstracción entre el lenguaje y el hardware. El lenguaje ensamblador “puro” (no enriquecido, sin directivas) se lo puede clasificar dentro de esta categoría. Alto nivel: Lenguajes de propósito general y específicos. Dentro de los específicos, se pueden
encontrar con orientación a la creación de aplicaciones científicas y de gestión administrativa. El lenguaje C pertenece a los de alto nivel. Algunos autores agregan a los dos niveles mencionados, uno intermedio, dentro del cual ubican al macro-ensamblador (ensamblador enriquecido) y al C. El macroensamblador y otros similares, se los considera de alto nivel, ya que incorporan características que aumentan su nivel de abstracción.
Lenguaje máquina El lenguaje máquina (también llamado lenguaje de primera generación) (el alfabeto binario) es el único que entiende la computadora. Fue el primer lenguaje utilizado en la programación de computadoras. Ejemplo, en el recuadro izquierdo:
0000 0001 1010 0001
01 A1
1000 1001 1001 1010
89 9A
0011 1010 1001 1100
3A 9C
0111 0100 0111 0000
74 70
1110 1001 0010 0000
E9 20
Una forma de simplificar la programación y los datos en binario, fue agrupar ceros y unos en cifras hexadecimales u octales. En una arquitectura hipotética, la columna hexadec izquierda podrían ser las operaciones y la derecha los datos.
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 21
Este lenguaje fue sustituido por otros que fueron evolucionando, a fin de brindarle al programador una interface más amigable (más fácil de aprender y utilizar).
Lenguaje ensamblador El lenguaje ensamblador4, (considerado lenguaje de segunda generación) fue el primer intento de sustituir el lenguaje máquina, por otro más aproximado al utilizado por las personas. En este lenguaje cada instrucción del lenguaje de máquina es representada por un mnemónico (o abreviación mnemotécnica, ej. CMP por compare) en lugar de cadenas de bits. A continuación, se muestra un ejemplo de un trozo fuente en macroensamblador, que realiza 10 loops:
INICIO:
FIN:
MOV BX, 00h
; Inicializa BX en 0
MOV DX, 0Ah
; Asigna el valor 10 (0Ah) a DX
ADD BX, 01h
; Suma 1 a BX
CMP DX, BX
; compara AX y BX, Actualiza la ZF
JE FIN
; salta FIN si DX=BX, IDEM JZ mismo opcode, Si ZF=0
JMP INICIO
; salto incondicional a INICIO
MOV AX, 4C00h ; Sevicio 4C -> Terminar con código de retorno INT 21h
; Llamada a servicio DOS
¿Qué pasa una vez que es ensamblado, enlazado y cargado en memoria para ser ejecutado? CS:IP
ASM
OPCODE en Hexadec.
0722:0000
MOV BX,0000
BB0000
0722:0003
MOV DX,000A
BA0A00
0722:0006
ADD BX,01
83C301
0722:0009
CMP DX,BX
3BD3
0722:000B
JE 0Fh
7402
0722:000D
JMP 06h
EBF7
0722:000F
MOV AX,4C00
B8004C
0722:0012
INT 021h
CD21
20 bytes Este código hace 10 bucles y termina el programa
El programa ejecutable generado a partir del lenguaje ensamblador, tiene como ventaja la mayor performance, lograda por su bajo requerimiento de memoria y el menor tiempo de ejecución, en comparación con los resultados de aplicaciones similares programadas en lenguajes de alto nivel.
4
Al programa que traduce el lenguaje ensamblador a código de máquina, también se le llama “Ensamblador”, es decir, tiene el mismo nombre del lenguaje.
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 22
Inconvenientes de Ensamblador
Cada modelo de microprocesador tiene su propio ensamblador, diferente del resto, razón por la cual un programa sólo puede utilizarse en el modelo máquina (microprocesador) para el cual se programó.
El programador de bajo nivel debe tener un gran conocimiento del hardware, ya que maneja directamente las posiciones de memoria, los registros del procesador y demás recursos físicos.
Todas las instrucciones son elementales, y por lo tanto los programas fuentes serán extensos, debido a que el programa debe describir con máximo nivel de detalle, todas las operaciones que llevará a cabo en la máquina.
Se requiere mucho tiempo de construccion, depuración, para programar de una pequeña aplicación.
Lenguajes de alto nivel Los lenguajes de alto nivel (tercera generación), evolucionaron pretendiendo abstraer u ocultar la complejidad del ensamblador, teniendo estos como principales premisas:
Portable (Portability): Lograr que el programa tenga independencia del hardware. De esta forma poder utilizar un mismo programa fuente, en diferentes equipos, con la única condición de disponer del compilador del lenguaje asociado a la nueva plataforma. Dicho en otras palabras, no se necesita conocer en detalle la plataforma, en el que correrá el programa.
Amigable (Friendliness): Aproximar el lenguaje de programación al lenguaje natural, para que el programa se pueda escribir, leer y entender en forma sencilla.
Estructurado: La codificación que respeta a las estructuras lógicas, facilita la programación, su mantenimiento y documentación.
Asimismo, es importante resaltar que como consecuencia de su nivel y ser estructurado, es más fácil su depuración y manteniento.
Intérpretes y Compiladores Hay dos tipos principales de traductores de lenguaje fuente a lenguaje de máquina:
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 23
Compiladores: Durante la compilación, se analiza el programa fuente y se genera el código objeto, código nativo (o código de máquina reubicable). Este código antes de poder ser ejecutado, necesita pasar una fase adicional, denominada enlace. Intérpretes: Cada vez que se ejecuta el programa, cada línea del programa fuente es analizada, se la traduce a código de máquina y se la ejecuta. Híbridos (o JIT Just in Time - Interpreta una máquina virtual). La máquina virtual analiza el programa durante su ejecución y al detectar partes
del
código
que
se
ejecutan
frecuentemente las compila al código nativo en particular, de ahí en adelante, usará ese porción de código nativo para la ejecución (basado en la compilación dinámica).
Java utiliza esta modalidad, combina compilación e interpretación. El programa fuente en Java es compilado primero en “código intermedio” también llamado bytecodes. Los bytecodes son luego interpretados por la máquina virtual. Una ventaja de esta disposición es que los bytecodes compilados en una máquina se pueden interpretar en otras máquinas y distintas modalidades.
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 24
Evolución histórica de los Lenguajes de programación
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 25
Periodo
Influencias
Lenguajes
1950 - 1955
Computadoras primitivas
Lenguajes ensamblador. Lenguajes experimentales de alto nivel
1956 - 1960
1961 - 1965
Computadoras caras y lentas
FORTRAN
Cintas magnéticas.
ALGOL 58 y 60
Compiladores e intérpretes
COBOL
Optimización del código.
LISP
Computadoras grandes y caros
FORTRAN IV
Discos magnéticos
COBOL 61 Extendido
Sistemas operativos
ALGOL 60 Revisado
Lenguajes de propósito general.
RPG APL
1966 - 1970
Computadoras
de
diferentes
tamaños, velocidades, y costos.
FORTRAN 66 (estándar)
Sistemas caros de almacenamiento masivo de datos.
COBOL 65 (estándar) ALGOL 68
Sistemas operativos multitarea e interactivos.
SIMULA 67 BASIC
Compiladores Lenguajes
PL/I
con
optimización.
estándar,
flexibles
y
C APL/360
generales. 1971 - 1975
Microcomputadoras.
PASCAL
Sistemas pequeños y baratos de COBOL 74 almacenamiento masivo de datos. PL/I Programación estructurada. Ingeniería del software. Lenguajes sencillos.
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 26
1976 - 1980
Ordenadores baratos y potentes. ADA Sistemas distribuidos. FORTRAN 77 Programación interactiva.
PROLOG
Abstracción de datos.
C
Programación confiable y de fácil mantenimiento.
1980 – 1990
Computadoras
más
baratas
y SmallTalk, OOCOBOL, C++, Erlang
potentes.
Objective C, Object Pascal (Delphi)
Mayor abstracción de datos.
Bash, Perl, Visual Basic, Visual Fox,
Menor costo de memorias.
Haskell
Programación Orientada a Objetos. Introducción a plataformas visuales. Aplicaciones Cliente-Servidor. Más cerca del Orientación con énfasis en lo visual. presente
Gestores de Bases de Datos. Aplicaciones
Web.
Intranets
extranets.
PowerScript(PowerBuilder1991), Phyton(1991), R(1993), Java(1995),
y Ruby(1995), D(1999),
PHP(1995),
JS(1997),
ActionScript(2000),
F#(2002), Groovy(2003), Sistemas Operativos y programas C#(2001), Scala(2003), Factor(2003), móviles. Clojure(2007), Reia(2008), Go(2009), Rust(2010), Elixir(2011), Dart(2011), Opa(2011), Kotlin(2012), Swift(2014), Hack(2014), Ring(2016)…
Lenguajes más representativos Existe una gran cantidad de lenguajes, cada uno con características definidas y a su vez dentro de estos existen diferentes versiones o dialectos. A continuación, se amplían algunos de los más tradicionales y representativos y como evolucionaron. Fortran
Abreviatura de Formula Translator (traductor de fórmulas). Este lenguaje fue definido en 1955 en Estados Unidos por la compañía IBM. Es el más antiguo de los lenguajes de alto
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 27
nivel, pues previo a su aparición, todos los programas se escribían en lenguaje ensamblador o en lenguaje máquina. Es un lenguaje especializado en aplicaciones técnicas y científicas, caracterizándose por su potencia para cálculos matemáticos, y sus limitaciones en las aplicaciones de gestión administrativa, manejo de archivos, tratamiento de cadenas de caracteres y edición de informes. A lo largo de su existencia han aparecido diferentes versiones, entre las que destaca la realizada en 1966 por ANSI (American National Standard Institute) en la que se definieron nuevas reglas del lenguaje y se efectuó la independencia del mismo con respecto a la máquina, es decir, comenzó la portabilidad del lenguaje. Esta versión se denominó FORTRAN IV o FORTRAN 66. En 1977, apareció una nueva versión más evolucionada que se llamó FORTRAN V o FORTRAN 77, esta versión está reflejada en el documento «ANSI X3.9-1978: Programming Language FORTRAN» y define dos niveles del lenguaje denominados FORTRAN 77 completo y FORTRAN 77 básico, siendo el segundo, un subconjunto del primero. Esta última versión incluye además instrucciones para el manejo de cadenas de caracteres y de archivos, así como otras para la utilización de técnicas de programación estructurada. Lisp
Lenguaje funcional (ubicado dentro del paradigma declarativo basado en la definición funciones). El origen de su nombre surge de la contracción de “List Processing” (procesamiento de listas). Fue especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Massachusetts Institute of Technology (MIT). Se constituyó en unos de los lenguajes más importantes en los Estudios de Inteligencia Artificial. Con el se manejan naturalmente estructuras de datos dinámicas como listas y árboles. Este fue el primer lenguaje que tenía la propiedad en que la representación primaria de una estructura de datos se define con primitivas del lenguaje. Del Lisp Surgieron muchos dialectos, que fueron estandarizados por ANSI en 1994, bajo el nombre de “Common Lisp”. Cobol
Fue el lenguaje más usado en las aplicaciones de gestión, creado en 1960 por un comité denominado CODASYL, patrocinado por el Departamento de Defensa de los Estados Unidos, a fin de disponer de un lenguaje universal para aplicaciones comerciales como expresa su nombre (Common Business Oriented Language). Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 28
Entre sus características se pueden citar su parecido al lenguaje natural (inglés), es autodocumentado y tiene gran capacidad en el manejo de archivos, así como en la edición de informes escritos. Entre sus inconvenientes están sus rígidas reglas de formatos de escritura, la necesidad de describir todos los elementos al máximo detalle, la extensión excesiva en sus sentencias e incluso duplicación en algunos casos y la inexistencia de funciones matemáticas. PL/1
Fue creado a mediados de los años 60 por IBM para ser usado en sus equipos del sistema 360. El PL/1 (Programming Language 1) se desarrolló inspirándose en los lenguajes ALGOL, COBOL y FORTRAN, tomando las mejores características de los anteriores y añadiendo algunas nuevas, con el objetivo de obtener un lenguaje lo más general posible, útil para aplicaciones técnico-científicas, comerciales, de proceso de textos, de bases de datos y de programación de sistemas. Entre sus novedades está su gran libertad en el formato de escritura de los programas, soportar la programación estructurada y el diseño modular. No obstante, no ha superado a sus progenitores en sus aplicaciones específicas, debido en parte a su amplitud y por ello al tamaño de su compilador, que hasta ahora sólo se podía instalar en grandes equipos. BASIC
Fue diseñado por los profesores John G. Kemeny y Thomas E. Kurtz del Dartmouth College en 1965 con el objetivo principal de conseguir un lenguaje fácil de aprender para los principiantes, como se indica en su nombre Beginner’s All-purpose Symbolic Instruction Code (Código de instrucción simbólico de propósito general para principiantes). Entre sus principales novedades están las de ser un lenguaje interpretado y de uso conversacional, útil para aplicaciones técnicas y de gestión. Estas características, unidas a la popularización de las microcomputadoras y computadoras personales, han hecho que su utilización se haya extendido enormemente, a la vez que ha propiciado el surgimiento de una gran diversidad de versiones. Existen una multitud de intérpretes y compiladores de este lenguaje. Pascal
Fue creado por el matemático suizo Niklaus Wirth en 1970, basándose en el lenguaje AL-GOL, en cuyo diseño había participado en los años 60. Su nombre proviene del filósofo y
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 29
matemático francés, del siglo XVII, Blaise Pascal, que inventó la primera máquina mecánica para sumar. Aunque en principio la idea del diseñador era proporcionar un lenguaje adecuado para la enseñanza de los conceptos y técnicas de programación, con el tiempo ha llegado a ser un lenguaje ampliamente utilizado en todo tipo de aplicaciones, poseyendo grandes facilidades para la programación de sistemas y diseño de gráficos. Aporta los conceptos de tipo de datos, programación estructurada y diseño descendente, entre otros, además de haberse convertido en predecesor de otros lenguajes más modernos, como MODULA-2, ADA y Delphi. SmallTalk
Este lenguaje diseñado por Alan Key entre otros, y fue publicado en 1990, si bien su desarrollo comenzó en 1969. Smalltalk es considerado el primero de los lenguajes orientados a objetos puro, aunque en realidad el primero en implementar programación orientada a objetos fue Simula. Ada
Fue un intento de obtener un único lenguaje para todo tipo de aplicaciones e incluye los últimos avances en técnicas de programación. Su diseño fue encargado por el Departamento de Defensa de los Estados Unidos a la empresa Honeywell-Bull después de una selección rigurosa entre varias propuestas realizadas sobre una serie de requerimientos del lenguaje y de haber evaluado negativamente veintitrés lenguajes existentes. De éstos se seleccionaron como base para la creación del nuevo lenguaje el PASCAL, el ALGOL y el PL/I. La estandarización del lenguaje se publicó en 1983. El nombre ADA es en honor a la, hoy considerada, primera programadora de la historia, Augusta Ada Byron (1815-1852), condesa de Lovelace, hija del famoso poeta Lord Byron. Entre las características del lenguaje se encuentran la compilación separada, los tipos abstractos de datos, programación concurrente, programación estructurada, libertad de formatos de escritura, etc., presentando como principal inconveniente su gran extensión. C
En 1967 Martin Richards en Cambridge desarrolló un lenguaje denominado BCPL (Basic Combined Programming Language) que pretendía, de alguna forma, simplificar el CPL creado en 1963. En 1970 surge un lenguaje denominado B, como un intento de simplificar
Paradigmas y Lenguajes LSI / Paradigmas de Programación ISI Pag. 30
aún más el CPL de lo que hizo el BCPL, fue desarrollado por Ken Thompson en los Laboratorios Bell para una primera implementación de UNIX, en lenguaje de alto nivel. En 1971, un nuevo lenguaje denominado C, se convierte en sucesor del lenguaje B. Desarrollado por Brian Kernighan y Dennis Ritchie. Fue implementado por primera vez en una PDP-11 corriendo UNIX. Este se convierte en el primer estándar de C (El C de K&R). En 1973, el kernel del sistema operativo UNIX, se rescribe casi totalmente en C. El desarrollo lo llevaron a cabo Ritchie y Thompson.En 1980 Bjarne Stroustrup, crea el C++ como una mejora del C de K&R, que daba apoyo a la programación orientada a objetos. En 1983 un Comité del ANSI (American National Standard Institute) definió un nuevo estándar, el ANSI C, teniendo como fin la normalización de las distintas versiones del C que estaban en circulación. En 1991 James Gosling de la empresa Sun Microsystems, crea un lenguaje denominado inicialmente OAK, más tarde en 1995 se lo denomina Java. Este es un lenguaje potente, interpretado, e independiente del hardware.
Estándares del C y el C++ En el ANSI (Instituto Nacional Estadounidense de Estándares) se realizó la primera estandarización del lenguaje C, en el Comité X3J11, formalizado como ANSI X3.159-1989, o ANSI C. La ISO adoptó...