viernes, 21 de junio de 2013

Lenguajes de Programación



Lenguajes de programación

Tras el desarrollo de las primeras computadoras surgió la necesidad de programarlas para que realizaran las tareas deseadas.
Los lenguajes más primitivos fueron los denominados lenguajes máquina. Como el hardware se desarrollaba antes que el software, estos lenguajes se basaban en el hardware, con lo que cada máquina tenía su propio lenguaje y por ello la programación era un trabajo costoso, válido sólo para esa máquina en concreto.
El primer avance fue el desarrollo de las primeras herramientas automáticas generadoras de código fuente. Pero con el permanente desarrollo de las computadoras, y el aumento de complejidad de las tareas, surgieron a partir de los años 50 los primeros lenguajes de programación de alto nivel.
Con la aparición de los distintos lenguajes, solían aparecer diferentes versiones de un mismo lenguaje, por lo que surgió la necesidad de estandarizarlos para que fueran más universales. Las organizaciones que se encargan de regularizar los lenguajes son ANSI (Instituto de las Normas Americanas) y ISO (Organización de Normas Internacionales).

Evolución de los lenguajes de programación:

Año
Aparición

1950




1955



Lenguaje Ensamblador (lenguaje máquina)

Lenguajes experimentales de alto nivel

1956





1960


FORTRAN

ALGOL 58 y 60

COBOL

LISP

1961








1965


FORTRAN IV

COBOL 61 Extendido

ALGOL 60 Revisado

SNOBOL

BASIC

APL (como notación sólo)

PL/I

1966









1970


APL/360

FORTRAN 66 (estándar)

COBOL 65 (estándar)

ALGOL 68

SNOBOL 4

SIMULA 67

1971




1975




COBOL 74

PASCAL

1976







1980


ADA

FORTRAN 77

PROLOG

C

Modula-2

1980




2000


C++

JAVA




LENGUAJE MÁQUINA
Lenguaje de máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata . Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas.
Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos niveles de tensión. Dichos niveles, por abstracción, se simbolizan con el cero (0), y el uno (1), por eso el lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.
Claude Elwood Shannon, en su Analysis of Relay and Switching Circuits, y con sus experiencias en redes de conmutación, sentó las bases para la aplicación del álgebra de Boole a las redes de conmutación.
Una red de conmutación es un circuito de interruptores eléctricos que al cumplir ciertas combinaciones booleanas con las variables de entrada, define el estado de la salida. Este concepto es el núcleo de las puertas lógicas, las cuales son, por su parte, los ladrillos con que se construyen sistemas lógicos cada vez más complejos.
Shannon utilizaba el relé como dispositivo físico de conmutación en sus redes. El relé, a igual que una lámpara eléctrica, posee dos estados: 1 o 0, esto es, activado (encendido), o desactivado (apagado).
El desarrollo tecnológico ha permitido evolucionar desde las redes de relés electromagnéticos de Shannon a circuitos con tubos de vacío, luego a redes transistorizadas, hasta llegar a los modernos circuitos integrados cuyas cúspide lo forman los circuitos microprogramados.

LENGUAJE DE ALTO NIVEL

Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.
En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales.
Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida.
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman de tercera generación o de alto nivel, en contraposición a los de bajo nivel o de nivel próximo a la máquina.

Ventajas e inconvenientes:

Ventajas
  • Genera un código más sencillo y comprensible.
  • Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.

Inconvenientes
  • Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.
  • Algunos requieren que la máquina cliente posea una determinada plataforma.


FORTRAN

Fortran (previamente FORTRAN) (contracción del inglés Formula Translating System) es un lenguaje de programación alto nivel de propósito general,  procedimental e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica. Desarrollado originalmente por IBM en 1957 para el equipo IBM 704, y usado para aplicaciones científicas y de ingeniería, el FORTRAN vino a dominar esta área de la programación desde el principio y ha estado en uso continuo por más de medio siglo en áreas de cómputo intensivo tales como la predicción numérica del tiempo, análisis de elementos finitos, dinámica de fluidos computacional (CFD), física computacional, y química computacional. Es una de los lenguajes más populares en el área de la computación de alto rendimiento y es el lenguaje usado para programas que evalúan el desempeño (benchmark) y el ranking de los supercomputadores más rápidos del mundo.
El FORTRAN (una palabra compuesta, derivada de The IBM Mathematical Formula Translating System) abarca un linaje de versiones, cada una de las cuales evolucionó para añadir extensiones al lenguaje mientras que usualmente retenía compatibilidad con las versiones previas. Versiones sucesivas han añadido soporte para procesamiento de datos basados en caracteres (FORTRAN 77), programación de arreglos, programación modular y programación orientada a objetos (Fortran 90/95), y programación genérica (Fortran 2003).

Versiones
Algunas otras versiones subsiguientes fueron:
  • FORTRAN IV
  • FORTRAN 77
  • FORTRAN 90
  • FORTRAN 95
  • FORTRAN 2003
  • FORTRAN 2008
  • FORTRAN 2010

Principales características
El lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única alteración posible en el orden de ejecución era producida con la instrucción goto. Estas características han evolucionado de versión en versión. Las actuales contienen subprogramas, recursión y una variada gama de estructuras de control.

Especificaciones
Existen dos versiones normalizadas del lenguaje.
  • ANSI X3.198-1992 (R1997). Título: Programming Language "Fortran" Extended. Conocida como Fortran 90. Se trata de un estándar publicado por ANSI.
  • ISO/IEC 1539-1:1997. Title: Information technology - Programming languages - Fortran - Part 1: Base language. Conocida como Fortran 95. también adoptada por ANSI.


ALGOL

Se denomina ALGOL (o Algol) a un lenguaje de programación. La voz es un acrónimo de las palabras inglesas Algorithmic Language (lenguaje algorítmico).
Fue muy popular en las universidades durante los años 60, pero no llegó a cuajar como lenguaje de utilización comercial.
Sin embargo, Algol influyó profundamente en varios lenguajes posteriores que sí alcanzaron gran difusión, como Pascal, C y Ada.

Hacia 1965 dos corrientes se distinguieron sobre el tema de un sucesor para Algol. Como resultado se definieron los lenguajes Algol W que es un lenguaje minimalista, rápidamente implementado y distribuido y, por otra parte, Algol 68 que para la época está en la frontera entre un lenguaje para programar en él y un lenguaje para investigar sobre él.
Lenguaje elaborado diseñado por Niklaus Wirth y Tony Hoare a partir de los trabajos del grupo ALGOL de la IFIP. Se trata de un lenguaje conciso, simple de implementar, que evita todos los defectos conocidos del lenguaje Algol e incluye sus propias características adicionales. Sin embargo, el grupo Algol no lo adoptó como sucesor de Algol prefiriendo en su lugar al que terminó siendo Algol 68. Algol W fue utilizado por gran cantidad de usuarios y sembró el camino para el nacimiento del lenguaje Pascal.

Entre las características del lenguaje se destacan: Aritmética de doble precisión, números complejos, Strings y estructuras de datos dinámicas, evaluación por valor, pasaje de parámetros por valor, valor resultado o resultado.


COBOL

El lenguaje COBOL (acrónimo de COmmon Business-Oriented Language, Lenguaje Común Orientado a Negocios) fue creado en el año 1959 con el objetivo de crear un lenguaje de programación universal que pudiera ser usado en cualquier ordenador, ya que en los años 1960 existían numerosos modelos de ordenadores incompatibles entre sí, y que estuviera orientado principalmente a los negocios, es decir, a la llamada informática de gestión.
En la creación de este lenguaje participó la comisión CODASYL, compuesta por fabricantes de ordenadores, usuarios y el Departamento de Defensa de Estados Unidos en mayo de 1959. La definición del lenguaje se completó en poco más de seis meses, siendo aprobada por la comisión en enero de 1959. El lenguaje COBOL fue diseñado inspirándose en el lenguaje Flow-Matic de Grace Hopper y el IBM COMTRAN de Bob Bemer, ya que ambos formaron parte de la comisión.
Gracias a la ayuda de los usuarios COBOL evolucionó rápidamente y fue revisado de 1961 a 1965 para añadirle nuevas funcionalidades. En 1968 salió la primera versión ANSI del lenguaje, siendo revisada posteriormente en 1974 (COBOL ANS-74), 1985 (COBOL ANS-85, ampliado en 1989 con funciones matemáticas, finalizando el estándar actual más usado, conocido como COBOL-ANSI), y en 2002 (COBOL ANS-2002). Desde el año 2007 se viene preparando una nueva revisión del lenguaje.
Además, existe una versión conocida como COBOL ENTERPRISE, actualizada regularmente y lanzada en 1991, usada generalmente en sistemas Host.
En el 2011 se actualizó con Visual COBOL.

Características:

  • COBOL fue dotado de unas excelentes capacidades de autodocumentación
  • Una buena gestión de archivos y una excelente gestión de los tipos de datos para la época, a través de la conocida sentencia PICTURE para la definición de campos estructurados. Para evitar errores de redondeo en los cálculos que se producen al convertir los números a binario y que son inaceptables en temas comerciales, COBOL puede emplear y emplea por defecto números en base diez. Para facilitar la creación de programas en COBOL, la sintaxis del mismo fue creada de forma que fuese parecida al idioma inglés, evitando el uso de símbolos que se impusieron en lenguajes de programación posteriores.

Pese a esto, a comienzos de los ochenta se fue quedando anticuado respecto a los nuevos paradigmas de programación y a los lenguajes que los implementaban. En la revisión de 1985 se solucionó, incorporando a COBOL variables locales, recursividad, reserva de memoria dinámica y programación estructurada.
En la revisión de 2002 se le añadió orientación a objetos, aunque desde la revisión de 1974 se podía crear un entorno de trabajo similar a la orientación a objetos, y un método de generación de pantallas gráficas estandarizado.
Antes de la inclusión de las nuevas características en el estándar oficial, muchos fabricantes de compiladores las añadían de forma no estándar. En la actualidad este proceso se está viendo con la integración de COBOL con Internet. Existen varios compiladores que permiten emplear COBOL como lenguaje de scripting y de servicio web. También existen compiladores que permiten generar código COBOL para la plataforma .NET y EJB.

LISP

El Lisp (o LISP) es una familia de lenguajes de programación de computadora de tipo multiparadigma con una larga historia y una sintaxis completamente entre paréntesis. Especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnológico de Massachusetts, el Lisp es el segundo más viejo lenguaje de programación de alto nivel de extenso uso hoy en día; solamente el FORTRAN es más viejo. Al igual que el FORTRAN, el Lisp ha cambiado mucho desde sus comienzos, y han existido un número de dialectos en su historia. Hoy, los dialectos Lisp de propósito general más ampliamente conocidos son el Common Lisp y el Scheme.

El Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programación, el Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador auto contenido.
El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el código fuente del Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programación de dominio específico empotrados en el Lisp.
La intercambiabilidad del código y los datos también da a Lisp su instantáneamente reconocible sintaxis. Todo el código del programa es escrito como expresiones S, o listas entre paréntesis. Una llamada de función o una forma sintáctica es escrita como una lista, con la función o el nombre del operador en primer lugar, y los argumentos a continuación; por ejemplo, una función f que toma tres argumentos puede ser llamada usando (f x y z).
Historia

El Lisp fue inventado por John McCarthy en 1958 mientras estaba en el Instituto Tecnológico de Massachusetts (MIT). McCarthy publicó su diseño en 1960 en un artículo de Communications of the ACM titulado "funciones recursivas de expresiones simbólicas y su cómputo por la máquina, parte I"1 (la "parte II" nunca fue publicada). Allí mostró que con algunos operadores simples y una notación para las funciones, uno puede construir un lenguaje turing completo para los algoritmos.
Desde 1955 ó 1956, el Information Processing Language fue el primer lenguaje de AI, y ya había incluido muchos de los conceptos, tales como proceso por lista y recursión, que vinieron a ser usados en el Lisp.

La notación original de McCarthy usaba "expresiones M" en corchetes que serían traducidas a expresiones S. Como un ejemplo, la expresión M car[cons[A,B]] es equivalente a la expresión S (car (cons A B)). Una vez el Lisp fue implementado, los programadores rápidamente eligieron usar expresiones S, y las expresiones M fueron abandonadas. las expresiones M emergieron otra vez con los intentos efímeros del MLISP de Horace Enea y el CGOL de Vaughan Pratt.

El Lisp fue implementado primero por Steve Russel en un computador IBM 704. Russell había leído el artículo de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la función eval del Lisp podía ser implementada en código de máquina. El resultado fue un intérprete de Lisp funcional que podía ser usado para correr programas Lisp, o más correctamente, "evaluar expresiones Lisp".

Dos rutinas de lenguaje ensamblador para el IBM 704 se convirtieron en las operaciones primitivas para descomponer listas: car (contenido del registro de dirección) y cdr (contenido del registro del decremento). Los dialectos del Lisp todavía usan el car y cdr (pronunciado /ˈkɑr/ y /ˈkʊdər/) para las operaciones que retornan el primer elemento y el resto de la lista respectivamente.

Relación con la inteligencia artificial
Desde su inicio, el Lisp estaba estrechamente relacionado con la comunidad de investigación de la inteligencia artificial, especialmente en sistemas PDP-10. El Lisp fue usado como la implementación del lenguaje de programación Micro Planner que fue la fundación para el famoso sistema de AI SHRDLU. En los años 1970, a medida que la investigación del AI engendró descendientes comerciales, el desempeño de los sistemas Lisp existentes se convirtió en un problema creciente.

El Lisp era un sistema difícil de implementar con las técnicas de compilador y hardware común de los años 1970. Las rutinas de recolección de basura, desarrolladas por el entonces estudiante graduado del MIT, Daniel Edwards, hicieron práctico correr Lisp en sistemas de computación de propósito general, pero la eficacia todavía seguía siendo un problema. Esto llevó a la creación de las máquinas Lisp: hardware dedicado para correr ambientes y programas Lisp. Avances tanto en el hardware de computadora como en la tecnología de compiladores pronto hicieron obsoletas a las máquinas de Lisp, en detrimento del mercado del Lisp.

Durante los años 1980 y 1990, fue hecho un gran esfuerzo para unificar los numerosos dialectos del Lisp en un solo lenguaje (más notablemente, InterLisp, Maclisp, ZetaLisp, MetaLisp, y Franz Lisp). El nuevo lenguaje, Common Lisp, fue esencialmente un subconjunto compatible de los dialectos que reemplazó. En 1994, la ANSI publicó el estándar del Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp". En aquel momento el mercado mundial para el Lisp era mucho más pequeño de lo que es hoy.

SNOBOL

SNOBOL (StriNg Oriented symBOlic Language) es un lenguaje de programación de computadoras de muy alto nivel que surgió en la década de los 60 en los Laboratorios Bell merced al equipo formado por David J. Farber, Ralph E. Griswold y Ivan P. Polonsky.

Durante las décadas de los cincuenta y sesenta del siglo veinte había un importante interés en lenguajes de programación de computadoras de propósito especial. SNOBOL fue uno más de los lenguajes orientados a cadenas de texto y de entre ellos uno de los más exitosos. (v.g.: COMIT y TRAC).

Fue usado ampliamente durante las décadas de los setenta y ochenta del siglo veinte como un lenguaje de manipulación de texto en las disciplinas humanísticas, pero, en años recientes su popularidad se ha desvanecido merced a que lenguajes nuevos tales como AWK y Perl han hecho popular la manipulación de cadenas usando expresiones regulares; ahora es usado principalmente por aficionados siendo raro ver implementaciones recientes.
La implementación clásica fue en la PDP-10 y se ha usado para estudiar compiladores, gramáticas formales e inteligencia artificial, en particular traducción automática y comprensión automática de lenguajes naturales. La implementación original fue en una IBM 7090 en los Laboratorios Bell en Holmdel, Nueva Jersey. Fue diseñado expresamente para la portabilidad así que fue rápidamente exportado a otras plataformas.
Queda por comprobar lo que se dice al respecto de que el algoritmo de coincidencia de patrones de búsqueda es superior al de las expresiones regulares de modo que programas bien escritos y compilados usando la implementación SPITBOL del SNOBOL4 son del orden de 10 o más veces más rápidos en su ejecución que los equivalentes escritos en Perl. Se llamaba originalmente "SEXI" (StriNg EXpression Interpreter), que en español es algo así como: Intérprete de Expresiones de Cadenas. La versión SNOBOL4 es la cuarta y más reciente encarnación de una serie de lenguajes de programación de computadoras para el propósito especial de manipulación de cadenas de caracteres.

SNOBOL4 soporta una cantidad importante de tipos de datos tales como: enteros, números reales de precisión limitada, cadenas de texto, patrones de búsqueda, arreglos y tablas así como la capacidad de permitir al programador definir tipos de datos adicionales y nuevas funciones (esta última característica fue avanzada para su época además de parecerse y de que precede a los 'records' del Pascal o los 'structs' del C)
Sobresale de entre los lenguajes de programación más famosos de su tiempo por usar los patrones de búsqueda como un tipo de datos nativo al lenguaje y por proveer operadores para concatenación de patrones y alternación, además de que las cadenas generadas durante la ejecución pueden ser tratadas como programas que pueden a su vez ser ejecutados. Un patrón de búsqueda puede ser muy simple o extremadamente complicado. Un ejemplo de patrón simple puede ser una cadena de texto (v.g.: "ABCD"), y un ejemplo de patrón complicado puede ser una gran estructura que describa la gramática completa de un lenguaje de programación de computadoras.

Ofrece al programador una amplia variedad de características incluyendo algunas muy exóticas, de ahí que se pueda usar como si fuera un lenguaje orientado a objetos, un lenguaje de programación lógica, un lenguaje de programación funcional o un lenguaje de programación imperativa cambiando el conjunto de características usadas para escribir un programa. También concatena cadenas que estén una junto a la otra en una sentencia y mantiene las cadenas en un montículo de memoria liberando así a los programadores de preocupaciones tales como asignación de memoria y manejo de cadenas.

Se implementa normalmente como un intérprete debido a las dificultades para instrumentar algunas de sus características de muy alto nivel, pero hay un compilador, el SPITBOL, que provee casi todas las características que la versión interpretada. El lenguaje de programación de computadoras Icon es un descendiente de SNOBOL4.


BASIC

En la programación de computadoras, el BASIC, siglas de Beginner's All-purpose Symbolic Instruction Code, es una familia de lenguajes de programación de alto nivel. El BASIC original, el Dartmouth BASIC, fue diseñado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, Estados Unidos, como un medio para facilitar programar computadores a estudiantes (y profesores) que no fueran de ciencias. En ese tiempo, casi todo el uso de los computadores requería codificar software hecho a la medida, lo cual era algo bastante restringido a personas con formación como científicos y matemáticos. BASIC originalmente fue desarrollado como una herramienta de enseñanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles en los microcomputadores a finales de los años 1970 y en los años 1980. El BASIC sigue siendo popular hasta el día de hoy en un puñado de dialectos altamente modificados, y en nuevos lenguajes, influenciados por BASIC tales como Microsoft Visual Basic o Gambas en Gnu/Linux. Por el año 2006, el 59% de los desarrolladores para la plataforma .NET usaban Visual Basic .NET como su único lenguaje.

Los ocho principios que rigeron el diseño de BASIC fueron:
  1. Ser fácil de usar para los principiantes.
  2. Ser un lenguaje de propósito general (no orientado).
  3. Permitir a los expertos añadir características avanzadas, conservando simple el lenguaje para los principiantes.
  4. Ser interactivo.
  5. Proveer mensajes de error claros y amigables.
  6. Responder rápido en los programas pequeños.
  7. No requerir un conocimiento del hardware de la computadora.
  8. Proteger al usuario del sistema operativo.

El lenguaje fue en parte basado en FORTRAN II y parte en Algol 60, con adiciones para hacerlo apropiado en sistemas de tiempo compartido y con elementos que facilitaran la operación aritmética de matrices. BASIC fue implementado por primera vez para la mainframe GE-265, máquina que soportaba múltiples terminales.

En este período se crearon versiones de BASIC nuevas y más poderosas. Microsoft vendió varias versiones de BASIC para MS-DOS/PC-DOS, incluyendo BASICA, GW-BASIC (una versión compatible con BASICA que no necesitaba la ROM de IBM), y Quick BASIC. El fabricante de Turbo Pascal, Borland, publicó Turbo BASIC 1.0 en 1985 (versiones sucesoras aún se venden bajo el nombre de PowerBASIC por otra compañía). Aparecieron varias extensiones de BASIC para computadores caseros, típicamente con capacidad para gráficos, sonido, y comandos DOS, así como facilidades para Programación estructurada. Hubo lenguajes que usaron la sintaxis de BASIC como base para otros sistemas totalmente diferentes, por ejemplo GRASS.

Sin embargo a finales de la década de 1980 las computadoras nuevas eran mucho más complejas, e incluían características (como la Interfaz gráfica de usuario) que hacían a BASIC menos apropiado para programarlas. Al mismo tiempo las computadoras progresaban de ser interés para aficionados a herramientas usadas principalmente para ejecutar aplicaciones escritas por otros, y la programación en sí se fue haciendo menos importante para una creciente mayoría de usuarios. BASIC comenzó a desvanecerse, aunque numerosas versiones aún estaban disponibles.
Una de las más poderosas fue el denominado Basic 2 diseñado para el entorno gráfico GEM. Esta nueva versión del lenguaje permitía crear aplicaciones con interfaces gráficas dotadas de ventanas, menús, diferentes tipos de gráficos estadísticos...

La suerte de BASIC dio un giro nuevamente con la introducción de Visual Basic de Microsoft. Si bien este lenguaje utiliza prácticamente todas las palabras clave (sentencias, estructuras de control y funciones intrínsecas) y forma de manejo y tipo de datos que versiones BASIC anteriores (DOS); VB es abismalmente más potente y evolucionado; y se ha convertido en uno de los lenguajes más utilizados en la plataforma Windows; se estima que entre el 70 y el 80% del total de aplicaciones comerciales son programadas en VB. A partir de 2002, y con la introducción de la plataforma .NET Framework de Microsoft, Visual Basic comienza a utilizar el paradigma "orientado a objetos", aumentando la potencia del lenguaje y haciéndolo multiplataforma. Visual Basic for Applications (VBA) fue añadido a Microsoft Excel 5.0 en 1993 y al resto de la línea de productos de Microsoft Office en 1997. Windows 98 incluyó un intérprete de VBScript. La versión más reciente de Visual Basic es llamada VB.NET. Por otra parte, también existe la variante OpenOffice.org Basic menos poderosa pero similar a VBA de Microsoft.

APL

APL (A Programing Language, también conocido como Array Processing Language) desde hace algunos años) es un lenguaje de programación interpretado desarrollado por Kenneth Iverson, de IBM, a finales de los años 60.

Características

Es un lenguaje muy conciso, con una sintaxis muy sencilla. Está orientado a trabajos con matrices, con la que se pueden hacer todo tipo de operaciones lógicas o matemáticas. Incluso se pueden definir nuevas operaciones matriciales.

Es de una potencia tremenda. Una sola sentencia puede traducirse en miles de ellas en otros lenguajes, como por ejemplo Fortran. Como ejemplo, el lenguaje de simulación de circuitos, SIAL, ocupaba cerca de 25 000 sentencias en Fortran-Assembler y, al ser reescrito en APL, todo el programa se podía imprimir en dos folios. Por otra parte, a pesar de ser un lenguaje de tan alto nivel, también es capaz de manipular a escala de bits y tiene interfaces con lenguajes de programación de bajo nivel (C, ensamblador...) mediante los llamados procesadores auxiliares.

Tiene la propiedad de que desde una rutina se puede crear, compilar y ejecutar, en tiempo de ejecución, otras, lo que lo hace muy apropiado para la fabricación de compiladores e intérpretes.

Sus problemas radican en que:

1.    Necesita teclado especial para poner los operadores lógicos y simbólicos.
2.    Los programas escritos en APL son tan concisos que son difíciles de documentar y de comprender.

Aplicaciones del APL

El APL, al ser tan conciso, es un lenguaje que permite un ciclo de desarrollo muy veloz. Por otra parte, al ser interpretado, la velocidad de ejecución es típicamente más lenta que la de los lenguajes de programación compilados. Por ello, se considera un buen lenguaje para el desarrollo de prototipos.

Entre sus aplicaciones más conocidas está su uso en la película Tron de Walt Disney para la generación de los efectos especiales,2 y en el sistema Deep Blue de IBM que venció a Kasparov al ajedrez.

Como curiosidad, en la novela Cheap Complex Devices de J. C. Sundman, el autor afirma que el contenido del libro ha sido generado automáticamente por un ordenador escrito en APL, lo que le ha valido el premio Douglas R. Hofstadter de creación de novelas por ordenador en 1997. Todo ello, naturalmente, es un artificio literario.


PL/1

PL/1, acrónimo de Programming Language 1 (Lenguaje de Programación 1), fue propuesto por IBM hacia 1970 para responder simultáneamente a las necesidades de las aplicaciones científicas y comerciales, disponible en las novedosas plataformas de utilidad general IBM 360 y más adelante IBM 370.

Este lenguaje tenía muchas de las características que más adelante adoptaría el lenguaje C y algunas de C++. Por desgracia, IBM registra el nombre del lenguaje como forma de mantener control sobre su desarrollo, lo que disuadió a otras empresas de dar ese nombre a sus implementaciones. No siendo posible encontrar un único lenguaje para diversas plataformas, los potenciales usuarios del lenguaje prefirieron no adoptarlo a pesar de sus múltiples innovaciones, que incluían multiprocesamiento, recursión, estructuras de control modernas, facilidades para la puesta a punto, asignación dinámica de espacio para estructuras de datos, procedimientos genéricos, etc.

Sin embargo, dentro de los usuarios de IBM, el lenguaje se utilizó con bastante intensidad, y el proyecto Multics utilizó PL/1 como lenguaje de desarrollo para su sistema de operación.

PL/1 fue probablemente el primer lenguaje comercial cuyo compilador estaba escrito en el lenguaje que compilaba.


SIMULA

Simula es un lenguaje de programación orientada a objetos (OOP). Fue el primero de los lenguajes orientado a objetos. Varios años después de su desarrollo, casi todos los lenguajes modernos comenzaron a utilizar sus principios de orientación a objetos. Así fue como se popularizaron términos como clases, objetos, instancias, herencia, polimorfismo, etc.

Simula 67 fue lanzado oficialmente por sus autores Ole Johan Dahl y Kristen Nygaard en mayo de 1967, en la Conferencia de Trabajo en Lenguajes de Simulación IFIO TC 2, en Lysebu cerca de Oslo.

Hoy en día, los creadores de Simula han desarrollado un nuevo lenguaje de programación, llamado Beta, que generaliza todas las construcciones del lenguaje en una única idea denominada patrón.

En Simula, los objetos siempre son manejados por medio de referencias. Existe un recolector de basura que se encarga de eliminar de la memoria los objetos que se han quedado sin referencias a ellos. Una de estas referencias la vemos con variable objeto. Utilizamos el operador :- para asignar referencias.

A diferencia de muchos lenguajes modernos, Simula entiende de dos tipos de objetos.

Activos son aquellos objetos que aún no han completado su bloque asociado begin/end.

Inactivos por otra parte, han completado su bloque de instrucciones.

Tanto de unos como de otros, es posible ejecutar los procedimientos miembro y consultar los atributos en cualquier momento.

Dado que Simula 67 es un lenguaje ya un poco añejo, los conceptos que maneja son un poco distintos a los actualmente utilizados por la comunidad de programación orientada a objetos. Las instancias a las que estamos habituados corresponden a los objetos inactivos. En tanto que el bloque de instrucciones constituye una serie de constructores.

En cuanto a los objetos activos, estos existen debido a una funcionalidad de pseudo-paralelismo encontrada en Simula y ausente en casi todos los lenguajes modernos. Esta funcionalidad recibe el nombre de co-rutina y es controlada directamente por el lenguaje por medio de un grupo de palabras clave.

Un grupo de objetos activos pueden coexistir en un mismo programa Simula, y transferir el control de unos a otros en cualquier momento. Esta funcionalidad es la base de las características de simulación que dan nombre al lenguaje.

PASCAL

Pascal es un lenguaje de programación desarrollado por el profesor suizo Niklaus Wirth entre los años 1968 y 1969 y publicado en 1970. Su objetivo era crear un lenguaje que facilitara el aprendizaje de programación a sus alumnos, utilizando la programación estructurada y estructuración de datos. Sin embargo con el tiempo su utilización excedió el ámbito académico para convertirse en una herramienta para la creación de aplicaciones de todo tipo.

Pascal se caracteriza por ser un lenguaje de programación estructurado fuertemente tipificado. Esto implica que:

El código está dividido en porciones fácilmente legibles llamadas funciones o procedimientos. De esta forma Pascal facilita la utilización de la programación estructurada en oposición al antiguo estilo de programación monolítica.
El tipo de dato de todas las variables debe ser declarado previamente para que su uso quede habilitado.
El nombre de Pascal fue escogido en honor al matemático Blaise Pascal.

Características únicas

A diferencia de lenguajes de programación descendientes de C, Pascal utiliza el símbolo ":=" para la asignación en vez de "=". Si bien el segundo es más conocido, la práctica ha demostrado que muchos usuarios utilizan el símbolo de igualdad para comparar valores en lugar del comparador de C que es el símbolo ==. Esta sintaxis conduce a muchos errores o bugs difíciles de rastrear en código C. Dado que Pascal no permite asignaciones dentro de expresiones y utiliza sintaxis distintas para asignaciones y comparaciones, no sufre estos errores.

Además sus programas tienen definidas dos partes: declarativa y ejecutiva. En la primera debe aparecer todo lo que se usará en la segunda, de lo contrario se detecta como desconocido y evita ciertas incomprensiones como veremos más adelante. En la parte declarativa se enuncian Unit existentes, procedimientos, funciones, variables, constantes y nuevos tipos de datos estructurados.

Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su definición; la asignación a variables de valores de tipo incompatible no están autorizadas (en C, en cambio, el compilador hace el mejor esfuerzo para dar una interpretación a casi todo tipo de asignaciones). Esto previene errores comunes donde variables son usadas incorrectamente porque el tipo es desconocido; y también evita la necesidad de notación húngara, que vienen a ser prefijos que se añaden a los nombres de las variables y que indican su tipo.

Compiladores disponibles públicamente

Varios compiladores de Pascal están disponibles para el uso del público en general:

·         Epox
·         Compilador GNU Pascal (GPC), escrito en C, basado en GNU Compiler Collection (GCC). Se distribuye bajo licencia GPL.
·         Free Pascal está escrito en Pascal (el compilador está creado usando Free Pascal), es un compilador estable y potente. También distribuido libremente bajo la licencia GPL. Este sistema permite mezclar código Turbo Pascal con código Delphi, y soporta muchas plataformas y sistemas operativos.
·         Turbo Pascal fue el compilador Pascal dominante para PC durante los años 1980 y hasta principios de los años 1990, muy popular debido a sus magníficas extensiones y tiempos de compilación sumamente cortos. Actualmente, versiones viejas de Turbo Pascal (hasta la 7.0) están disponibles para descargarlo gratuito desde el sitio de Borland (es necesario registrarse).
·         Delphi es un producto tipo RAD (Rapid Application Development) de Borland. Utiliza el lenguaje de programación Delphi, descendiente de Pascal, para crear aplicaciones para la plataforma Windows. Las últimas versiones soportan compilación en la plataforma .NET.
·         Kylix es la versión más nueva de Borland reiterando la rama de Pascal de sus productos. Es descendiente de Delphi, con soporte para el sistema operativo Linux y una librería de objetos mejorada (CLX). El compilador y el IDE están disponibles para uso no comercial. Actualmente este proyecto está descontinuado.
·         Lazarus es un clon de Delphi, basado en Free Pascal es software libre.
·         MidletPascal para la plataforma J2ME.
·         TMT. Pascal.

ADA

Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.

Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.

Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.

Historia

El lenguaje fue diseñado bajo encargo del Departamento de Defensa de los Estados Unidos (DoD). Durante los años 1970, este departamento tenía proyectos en una infinidad de lenguajes y estaba gastando mucho dinero en software. Para solucionarlo se buscó un lenguaje único que cumpliese unas ciertas normas recogidas en el documento Steelman. Después de un estudio de los lenguajes existentes en la época se decidió que ninguno las cumplía totalmente, por lo que se hizo un concurso público al que se presentaron cuatro equipos, cuyas propuestas se nombraron con un color: Rojo (Intermetrics), Verde (CII Honeywell Bull), Azul (SofTEch) y Amarillo (SRI International). Finalmente en mayo de 1979 se seleccionó la propuesta Verde diseñada por Jean Ichbiah de CII Honeywell Bull, y se le dio el nombre de Ada. Esta propuesta era un sucesor de un lenguaje anterior de este equipo llamado LIS y desarrollado durante los años 1970.

El nombre se eligió en conmemoración de lady Ada Augusta Byron (1815-1852) Condesa de Lovelace, hija del poeta Lord George Byron, a quien se considera la primera programadora de la Historia, por su colaboración y relación con Charles Babbage, creador de la máquina analítica.

Características

·         La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).
·         Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves, es decir es un lenguaje case-insensitive.
·         En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).
·         Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
·         El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal.
·         La sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota: esto sólo aplica a atributos predefinidos por el lenguaje, ya que no es el concepto de atributo típico de OOP).
·         Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). Muchos lenguajes de programación no hacen esta distinción. Las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no pueden tener parámetros in out.


PROLOG

El Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique, es un lenguaje de programación lógico e interpretado, bastante conocido en el medio de investigación en Inteligencia Artificial.

Historia
Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille I (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versión definitiva en 1972. Esta primera versión de Prolog fue programada en ALGOL W.

Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado.

Si bien en un principio se trataba de un lenguaje de uso reducido, la aparición de intérpretes del mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo Prolog de Borland, entre otros muchos) a lo largo de la década de 1980 contribuyó notablemente a su popularización. Otro importante factor en su difusión fue la adopción del mismo para el desarrollo del proyecto de la quinta generación de computadoras a principios de la década de los 80,5 en cuyo contexto se desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollo moderno de Prolog.

Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo6 , hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.

Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java.

En los lenguajes de programación antes mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en el mismo orden en que están escritas, que sólo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia).

Los programas en Prolog se componen de cláusulas de Horn que constituyen reglas del tipo "modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el consecuente". No obstante, la forma de escribir las cláusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjunción de condiciones que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una instrucción o llamada a procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecución se basa en dos conceptos: la unificación y el backtracking.

Gracias a la unificación, cada objetivo determina un subconjunto de cláusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de elección. Prolog selecciona el primer punto de elección y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso.

En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al punto de elección. Entonces se toma el siguiente punto de elección que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan su ejecución bien en éxito ("verdadero"), bien en fracaso ("falso").

C

C# (pronunciado si sharp en inglés) es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes.

El nombre C Sharp fue inspirado por la notación musical, donde '#' (sostenido, en inglés sharp) indica que la nota (C es la nota do en inglés) es un semitono más alta, sugiriendo que C# es superior a C/C++. Además, el signo '#' viene de cuatro '+' pegados.

Aunque C# forma parte de la plataforma .NET, ésta es una API, mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows, Unix y GNU/Linux.

Tipos de datos

C# contiene dos categorías generales de tipos de datos integrados: tipos de valor y tipos de referencia. El término tipo de valor indica que esos tipos contienen directamente sus valores.

Tipos para definir números enteros:

Tipo de datos de enteros
Tipo
Equivalente BCL
Tamaño
Rango
Significado
byte
System.Byte
8-bit (1-byte)
0 a 255
Entero sin signo
sbyte
System.SByte
8-bit (1-byte)
-128 a 127
Entero con signo
short
System.Int16
16-bit (2-byte)
-32.768 a 32.767
Entero corto con signo
ushort
System.UInt16
16-bit (2-byte)
0 a 65.535
Entero corto sin signo
int
System.Int32
32-bit (4-byte)
-2.147.483.648 a 2.147.483.647
Entero medio con signo
uint
System.UInt32
32-bit (4-byte)
0 a 4.294.967.295
Entero medio sin signo
long
System.Int64
64-bit (8-byte)
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Entero largo con signo
ulong
System.UInt64
64-bit (8-byte)
0 a 18.446.744.073.709.551.615
Entero largo sin signo

Los tipos de coma flotante pueden representar números con componentes fraccionales. Existen dos clases de tipos de coma flotante: float y double. El tipo double es el más utilizado porque muchas funciones matemáticas de la biblioteca de clases de C# usan valores double. Quizá, el tipo de coma flotante más interesante de C# es decimal, dirigido al uso de cálculos monetarios. La aritmética de coma flotante normal está sujeta a una variedad de errores de redondeo cuando se aplica a valores decimales. El tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales.

Tipo de datos de coma flotante
Tipo
Equivalente BCL
Tamaño
Rango
Significado
float
System.Single
32-bit (4-byte)
±1.401298E−45 a ±3.402823E+38
Coma flotante corto
double
System.Double
64-bit (8-byte)
±4.94065645841246E−324 a
±1.79769313486232E+308
Coma flotante largo
decimal
System.Decimal
128-bit (16-byte)
−7.9228162514264337593543950335 a
+7.9228162514264337593543950335
Coma flotante monetario

Los caracteres en C# no tienen un tamaño de 8 bits como en otros muchos lenguajes de programación, sino que usa un tamaño de 16 bits llamado Unicode al cual se le llama char. No existen conversiones automáticas de tipo entero a char.

Tipo de datos de caracteres
Tipo
Equivalente BCL
Tamaño
Rango
Significado
char
System.Char
16-bit (2-byte)
'\u0000' a '\uFFFF'
Carácter unicode

Para los tipos de datos lógicos no existen conversiones automáticas de tipo entero a bool.
Tipo de datos lógicos
Tipo
Equivalente BCL
Tamaño
Rango
Significado
bool
System.Boolean
8-bit (1-byte)
true o false
Verdadero o falso


MODULA-2

Modula-2 es un lenguaje de programación cuyo autor es Niklaus Wirth, autor también del lenguaje Pascal.

Como novedad respecto a este último lenguaje, introduce el concepto de módulo, y de encapsulación. Del código contenido en un módulo, sólo se facilita una interfaz pública denominada módulo de definición, permaneciendo el resto oculto (encapsulado) para un desarrollador ajeno, lo que facilita el mantenimiento de dichas estructuras de programación a la vez que imposibilita la modificación de las mismas a cualquiera que no posea el código de su módulo de implementación.

Este concepto de módulo constituye el antecedente de las clases u objetos que se observan en el concepto moderno de Programación Orientada a Objetos (POO); sin embargo, la incapacidad de declarar múltiples instancias de los módulos, así como la ausencia de todo tipo de herencia, impiden afirmar que Modula-2 sea un lenguaje orientado a objetos propiamente dicho.

Modula-2 se utiliza principalmente en las universidades por su excelente adaptación a la enseñanza de lenguajes estructurados, pero en el ámbito laboral su difusión ha sido escasa frente al predominio de C, lo que ha contribuido a crear un distanciamiento entre universidad y mercado laboral.

Existen compiladores de Modula-2 como Mocka o GNU Modula-2 (para GNU/Linux y resto de sistemas soportados por GCC), FST (para MS-DOS) o Native XDS (para Windows) entre otros.

C++

C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.

Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos que se comporten como tipos fundamentales.

El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.

JAVA

Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.Con respecto a la memoria, su gestión no es un problema ya que ésta es gestionada por el propio lenguaje y no por el programador.

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible.

La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre.

Entre diciembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java aún no lo es).

Historia

Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java.

El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los archivos .class que genera el compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista aleatoria de palabras.

Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava.


Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme incremento en el número de clases y paquetes que componen la biblioteca estándar2 .

Desde J2SE 1.4, la evolución del lenguaje ha sido regulada por el JCP (Java Community Process), que usa Java Specification Requests (JSRs) para proponer y especificar cambios en la plataforma Java. El lenguaje en sí mismo está especificado en la Java Language Specification (JLS), o Especificación del Lenguaje Java. Los cambios en los JLS son gestionados en JSR 901.

JDK 1.0 (23 de enero de 1996) — Primer lanzamiento:

JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas:
ü  reestructuración intensiva del modelo de eventos AWT (Abstract Windowing Toolkit)
ü  clases internas (inner classes)
ü  JavaBeans
ü  JDBC (Java Database Connectivity), para la integración de bases de datos
ü  RMI (Remote Method Invocation)

J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Esta y las siguientes versiones fueron recogidas bajo la denominación Java 2 y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplazó a JDK para distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition). Otras mejoras añadidas incluían:
ü  la palabra reservada (keyword) strictfp
ü  reflexión en la programación
ü  la API gráfica ( Swing) fue integrada en las clases básicas
ü  la máquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in Time) por primera vez
ü  Java Plug-in
ü  Java IDL, una implementación de IDL (Lenguaje de Descripción de Interfaz) para la interoperabilidad con CORBA
ü  Colecciones (Collections)

J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel. Los cambios más notables fueron:
ü  la inclusión de la máquina virtual de HotSpot JVM (la JVM de HotSpot fue lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)
ü  RMI fue cambiado para que se basara en CORBA
ü  JavaSound
ü  se incluyó el Java Naming and Directory Interface (JNDI) en el paquete de bibliotecas principales (anteriormente disponible como una extensión)
ü  Java Platform Debugger Architecture (JPDA)

J2SE 1.4 (6 de febrero de 2002) — Nombre Clave Merlin. Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como JSR 59. Los cambios más notables fueron:
ü  Palabra reservada assert (Especificado en JSR 41.)
ü  Expresiones regulares modeladas al estilo de las expresiones regulares Perl
ü  Encadenación de excepciones Permite a una excepción encapsular la excepción de bajo nivel original.
ü  non-blocking NIO (New Input/Output) (Especificado en JSR 51.)
ü  Logging API (Specified in JSR 47.)
ü  API I/O para la lectura y escritura de imágenes en formatos como JPEG o PNG
ü  Parser XML integrado y procesador XSLT (JAXP) (Especificado en JSR 5 y JSR 63.)
ü  Seguridad integrada y extensiones criptográficas (JCE, JSSE, JAAS)
ü  Java Web Start incluido (El primer lanzamiento ocurrió en marzo de 2001 para J2SE 1.3) (Especificado en JSR 56.)

J2SE 5.0 (30 de septiembre de 2004) — Nombre clave: Tiger. (Originalmente numerado 1.5, esta notación aún es usada internamente.[2]) Desarrollado bajo JSR 176, Tiger añadió un número significativo de nuevas características:
ü  Plantillas (genéricos) — provee conversión de tipos (type safety) en tiempo de compilación para colecciones y elimina la necesidad de la mayoría de conversión de tipos (type casting). (Especificado por JSR 14.)
ü  Metadatos — también llamados anotaciones, permite a estructuras del lenguaje como las clases o los métodos, ser etiquetados con datos adicionales, que puedan ser procesados posteriormente por utilidades de proceso de metadatos. (Especificado por JSR 175.)
ü  Autoboxing/unboxing — Conversiones automáticas entre tipos primitivos (Como los int) y clases de envoltura primitivas (Como Integer). (Especificado por JSR 201.)
ü  Enumeraciones — la palabra reservada enum crea una typesafe, lista ordenada de valores (como Dia.LUNES, Dia.MARTES, etc.). Anteriormente, esto solo podía ser llevado a cabo por constantes enteras o clases construidas manualmente (enum pattern). (Especificado por JSR 201.).
ü  Varargs (número de argumentos variable) — El último parámetro de un método puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. void drawtext(String... lines)). En la llamada al método, puede usarse cualquier número de parámetros de ese tipo, que serán almacenados en un array para pasarlos al método.
ü  Bucle for mejorado — La sintaxis para el bucle for se ha extendido con una sintaxis especial para iterar sobre cada miembro de un array o sobre cualquier clase que implemente Iterable, como la clase estándar.

Java SE 6 (11 de diciembre de 2006) — Nombre clave Mustang. Estuvo en desarrollo bajo la JSR 270. En esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión. Está disponible en http://java.sun.com/javase/6/. Los cambios más importantes introducidos en esta versión son:
ü  Incluye un nuevo marco de trabajo y APIs que hacen posible la combinación de Java con lenguajes dinámicos como PHP, Python, Ruby y JavaScript.
ü  Incluye el motor Rhino, de Mozilla, una implementación de Javascript en Java.
ü  Incluye un cliente completo de Servicios Web y soporta las últimas especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP.
ü  Mejoras en la interfaz gráfica y en el rendimiento.
ü   
ü  Java SE 7 — Nombre clave Dolphin. En el año 2006 aún se encontraba en las primeras etapas de planificación. Su lanzamiento fue en julio de 2011.
ü  Soporte para XML dentro del propio lenguaje.
ü  Un nuevo concepto de superpaquete.
ü  Soporte para closures.
ü  Introducción de anotaciones estándar para detectar fallos en el software.
No oficiales:
ü  NIO2.
ü  Java Module System.
ü  Java Kernel.
ü  Nueva API para el manejo de Días y Fechas, la cual reemplazara las antiguas clases Date y Calendar.
ü  Posibilidad de operar con clases BigDecimal usando operandos.


Orientado a objetos

La primera característica, orientado a objetos (“OO”), se refiere a un método de programación y al diseño del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es diseñar el software de forma que los distintos tipos de datos que usen estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. Un objeto puede verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una estructura de datos implica un cambio en el código que opera sobre los mismos, o viceversa. Esta separación en objetos coherentes e independientes ofrece una base más estable para el diseño de un sistema software. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su calidad y reduciendo el número de proyectos fallidos. Otra de las grandes promesas de la programación orientada a objetos es la creación de entidades más genéricas (objetos) que permitan la reutilización del software entre proyectos, una de las premisas fundamentales de la Ingeniería del Software. Un objeto genérico “cliente”, por ejemplo, debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido, los objetos podrían verse como piezas reutilizables que pueden emplearse en múltiples proyectos distintos, posibilitando así a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto finalmente a una reducción drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su “comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser reutilizado en el campo de la construcción, del automóvil, de la aviación, etc.

La reutilización del software ha experimentado resultados dispares, encontrando dos dificultades principales: el diseño de objetos realmente genéricos es pobremente comprendido, y falta una metodología para la amplia comunicación de oportunidades de reutilización. Algunas comunidades de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la información sobre el uso y versatilidad de objetos reutilizables y bibliotecas de objetos.

Independencia de la plataforma

La segunda característica, la independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Este es el significado de ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, ‘’’write once, run anywhere’’’.

Para ello, se compila el código fuente escrito en lenguaje Java, para generar un código conocido como “bytecode” (específicamente Java bytecode)—instrucciones máquina simplificadas específicas de la plataforma Java. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la máquina virtual (JVM), un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el código. Además, se suministran bibliotecas adicionales para acceder a las características de cada dispositivo (como los gráficos, ejecución mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explícita de compilación, el bytecode generado es interpretado o convertido a instrucciones máquina del código nativo por el compilador JIT (Just In Time).

Hay implementaciones del compilador de Java que convierten el código fuente directamente en código objeto nativo, como GCJ. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladores sólo puede ejecutarse en un tipo de arquitectura.

La licencia sobre Java de Sun insiste que todas las implementaciones sean “compatibles”. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando éste último alegó que la implementación de Microsoft no daba soporte a las interfaces RMI y JNI además de haber añadido características ‘’dependientes’’ de su plataforma. Sun demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares) así como una orden judicial forzando la acatación de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versión de sistema operativo, y en recientes versiones de Windows, su navegador Internet Explorer no admite la ejecución de applets sin un conector (o plugin) aparte. Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows.

No hay comentarios:

Publicar un comentario