Download Tema 2.2.1.

Document related concepts

Lisp wikipedia , lookup

Haxe wikipedia , lookup

APL wikipedia , lookup

Programación funcional wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Transcript
Técnicas de Programación
2.2.- Lenguajes de programación
Tema 2.2.1.- Historia
Lenguajes de bajo nivel
Lenguaje máquina
En definitiva va ser el único lenguaje que puede entender la CPU de un ordenador que es básicamente
un componente de electrónica digital. Se trata de un lenguaje de programación muy eficiente para la
máquina pero muy árido para programarlo ya que hay que hacerlo con cadenas binarias.
El juego de instrucciones o conjunto de símbolos que indican al ordenador una tarea concreta será
muy elemental y reducido. Como además las instrucciones van a tener una sintaxis muy estricta
resultarán programas muy difíciles de corregir.
Finalmente, al tratarse de un lenguaje orientado a la máquina, podemos afirmar que los programas van
a depender del modelo de ordenador con el que trabajemos teniendo una portabilidad muy limitada.
Lenguaje ensamblador
Se trata de un lenguaje muy cercano al máquina ya que lo que se hace es asignar a cada instrucción en
lenguaje máquina un nmemónico representativo algo más cercano al lenguaje humano que una cadena
de ceros y unos.
Sigue tratándose de un lenguaje muy eficiente pero con el juego de instrucciones bastante limitado y
con programas difíciles de interpretar. Al igual que el lenguaje máquina dependen de la máquina.
Tema 2.2.1.- Historia
1
Lenguajes de alto nivel
Los lenguajes de alto nivel se basan en la expresión de instrucciones de forma simbólica y son
independiente del ordenador. A continuación indicamos por orden cronológico algunos de ellos:
1954. FORTRAN, acrónimo de FORmula TRANslation, desarrollado por John Backus para IBM es un
lenguaje orientado a resolver problemas científico-técnicos.
1958. LISP, acrónimo de LISt Processing fué desarrollado por John McCarthy para trabajar con datos
no numéricos.
1959. COBOL, acrónimo de Common Business Oriented Languaje fué desarrollado por el Commettee
on Data System Languages para desarrollar aplicaciones comerciales de gestión.
1962. SIMULA. Es el primer lenguaje orientado a objetos y lo desarrollaron los noruegos Ole-Johan
Dahl y Krysten Nygaard.
1964. BASIC, acrónimo de Beginner's All purpose Symbolic Intruction Code, desarrollado como un
lenguaje de programación para principiantes por John Kemeny y Thomas Kurtz.
1970. PASCAL. Se trata de un lenguaje pensado por Niklaus Wirth para aprender a programar. En 1985
surge Object Pascal como un Pascal adaptado a la programación orientada a objetos. En 1995 Borland
desarrolla Delphi, que es la base de los compiladores actuales para C de esta firma. En realidad los
objetos están desarrollados en Delphi.
1972. C. Lo desarrolla Denis Ritchie para Bell Labs resultando un lenguaje muy flexible y eficiente.
1972. PROLOG, acrónimo de PROgramming in LOGic lo desarrolla Alain Colmerauer para la
Universidad de Marsella y está basado en estructuras de lógica.
1980. Surge ADA como un PASCAL adaptado para aplicaciones militares del departamento de defensa
de los Estados Unidos.
1983. C++, que es un C que permite la programación orientada a objetos y que se desarrolla en AT&T
Bell Labs por Bjarne Stroustroup.
1991. Java, lenguaje similar a C++ desarrollado por Sun Microsystem fácil de aprender y usar.
2000. C# (leído C sharp). Lo desarrolla Microsoft como alternativa a Java.
Tema 2.2.1.- Historia
2
De Wikipedia, la enciclopedia libre extraemos que algunos de los lenguajes de programación más
importantes por año son:
1943 - Plankalkül (Konrad Zuse)
1943 - ENIAC
1949 - C-10
1951 - Regional Assembly
Language
1952 - Autocode
1954 - FORTRAN
1958 - LISP
1958 - ALGOL
1959 - COBOL
1962 - APL
1962 - Simula
1964 - BASIC
1964 - PL/I
1966 - BCPL
1969 - B
1970 - Pascal
1972 - C
1972 - Smalltalk
1972 - Prolog
1973 - ML
1974 - Comandos Guardados
1978 - SQL
1983 - Ada
1983 - C++
1985 - Eiffel
1987 - Perl
1989 - FL (Backus)
1990 - Haskell
1990 - Python
1991 - Java
1993 - Ruby
2000 - C#
2007 - UAP
Tema 2.2.1.- Historia
3
Clasificación de los lenguajes de programación según la forma de ejecución
Lenguajes compilados
Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a
un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta
operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden
generar muchas líneas de código de máquina por cada proposición del programa fuente.
Los compiladores tienen como función traducir un programa escrito en un determinado lenguaje a un
idioma que la computadora entienda (lenguaje máquina con código binario).
Al usar un lenguaje compilado el programa desarrollado no se ejecuta mientras haya errores.
Lenguajes interpretados
Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto
nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se
produce durante compilación para utilizarlo en una ejecución futura, el programador sólo carga el
programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un
programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente
dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina
conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para
utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje
máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción
del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el
programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de
ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada
momento el código completo). El intérprete elimina la necesidad de realizar una ejecución después de
cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio
que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que
uno que se debe interpretar a cada paso.
Tema 2.2.1.- Historia
4
Una opinión publicada de dos profesor de FP Electrónica
Muchos programadores utilizan, para realizar páginas web y otras aplicaciones, una
arbitraria mezcla de lenguajes formada por una base de HTML con incrustaciones de
código en varios lenguajes de Script (Java, PHP…). Estos programas han ser gestionados
por un servidor de HTML remoto (Apache, Cherokee, IIS…) que debe disponer de todos los
intérpretes necesarios para traducir cada uno de los scripts incrustados y devolver el
resultado al navegador cliente (IExplorer, Netscape, Mozilla, Opera…) para que, a su vez,
este navegador ejecute el programa en nuestro ordenador. Gracias a la gran velocidad de
procesamiento y transmisión, todo se efectúa en poco tiempo; pero el código resultante, el
que se ejecuta en nuestra máquina, es altamente redundante y conlleva una sustancial
pérdida de eficacia, lo cual se traduce en unas burdas aplicaciones a las que,
lamentablemente, nos estamos acostumbrando (esta degradación se aprecia bien si
utilizamos un equipo antiguo y una conexión lenta, como la de un MÓDEM).
Nosotros creemos que se ha llegado a esta situación fundamentalmente por dos razones:
ignorancia e improvisación.
Ignorancia de los métodos de programación en lenguajes bien estructurados como el
lenguaje C en cualquiera de sus actuales versiones (C++, C#...), probablemente porque este
lenguaje requiere un proceso de aprendizaje más pausado y profundo que los lenguajes de
script interpretados. Pero el C, al ser un lenguaje compilado y muy cercano a la máquina,
genera un código mucho más eficiente y por ello es el lenguaje en el que están escritos la
mayoría de los programas que conocemos, incluidos servidores, intérpretes de scripts y
sistemas operativos como Linux y Windows.
Improvisación en la generación de código sin depurar y abuso del copia-pega por la
necesidad urgente de confeccionar multitud de estériles páginas web que no merecen ni el
tiempo que se tarda en cargarlas.
Tema 2.2.1.- Historia
5
Algunos lenguajes de programación por orden alfabético
ABAP
ABC
Ada
ActionScript
Afnix
ALGOL
APL
ASP
ASP.NET
AWK
B
BASIC
BCPL
Befunge
Boo
C
C++
C#
Caml
Clipper
CLIPS
CLU
COBOL
CORAL
D
Delphi
DIV
Dylan
Eiffel
Erlang
Ensamblador
Extended ML
Euphoria
Fénix
Flow-Matic
Forth
FORTRAN
Gambas
GML
GRAFCET
FP
Haskell
Icon
Inform
INTERCAL
ISWIM
J
Java
JavaScript
Joy
KWC
LADDER
Letra
Lexico
Lingo
Lisp
Logo
Lua
MAGIC
Mainsail
Mesa
Miranda
ML
Modula
Modula-2
Modula-3
Natural
NetREXX
Oberon
Object REXX
Objective-C
Ocaml
Occam
Oz
Pascal
Parlog
Perl
PHP
PL/1
Plankalkül
PostScript
PowerBuilder
Prolog
Python
Rapid
REXX
RPN
RPG
Ruby
Sail
Sather
Tema 2.2.1.- Historia
Scheme
Scriptol
Seed7
Self
Sh
Simula
Smalltalk
Snobol
SPARK
Squeak
SR
Standard ML
TI-Basic
TCL
VBA
Visual Basic
Visual C++
Visual DialogScript
Visual Foxpro
Yurix
ZPL
6
a
l
e
d
Fin
s
e
r
p
n
ó
i
c
a
t
en
Tema 2.2.1.- Historia
7