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:
- Ser fácil de usar para los principiantes.
- Ser un lenguaje de propósito general (no orientado).
- Permitir a los expertos añadir características avanzadas, conservando simple el lenguaje para los principiantes.
- Ser interactivo.
- Proveer mensajes de error claros y amigables.
- Responder rápido en los programas pequeños.
- No requerir un conocimiento del hardware de la computadora.
- 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