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